如何使用日志分析监控神农系统

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 我们将 SLS 的智能异常分析功能中的文本分析功能调整为模板发现和模板匹配两个子任务,提高了其在模板管理和应用上的灵活性。这里以对内部神农系统的运行日志监控为例,介绍改版后任务的使用场景与流程。

背景

近期我们对阿里云日志服务 SLS 智能异常分析功能中的文本分析功能进行了改版升级。在之前的版本中,文本分析可以对指定的日志库中的日志进行近实时的在线聚类与异常检测,在日志模板粒度汇总出异常事件,帮助您在海量日志中快速定位到需要关注的日志,详情可以参考之前的文章。根据用户的使用反馈,这种使用模式主要遇到以下问题:

  • 可维护性不高:用户只能使用模板聚类功能生成的原始模板,无法对模板进行增删改查等操作。这在聚类效果较好的系统日志上尚可接受。但是当日志结构复杂、聚类效果不稳定时,缺乏对于模板有效的管理、维护手段会使得模板难以使用。
  • 灵活性较差:检测到的异常事件、日志模板常常以告警的形式传递给客户,但是配置的告警需要与模板的 ID 绑定,即当某个 ID 的模板满足某个条件产生告警。由于缺乏对于模板的分组管理,如果用户需要监控多个模板,则需要配置多条告警或者在告警条件中拼接各个 ID。当有新的需要关注的模板时,仍需要修改之前的告警规则,这就对模板的使用和告警的维护造成不便。
  • 无法利用已有聚类能力:文本分析功能以流计算的形式提供持续的、近实时的日志聚类,SLS 还提供了 Ad hoc 形式的日志聚类方案,可以对亿级数据进行秒级聚类。很多用户通过 Ad hoc 形式的日志聚类发现需要关注的日志模板,但是由于这些模板无法被文本分析功能使用,因此难以实现对这些模板持续的监控与观测。

针对文本分析功能使用过程中遇到的种种问题,我们对文本分析功能进行了调整。除了兼容之前的使用方式,我们主要将文本分析功能拆分成日志模板发现和模板匹配两个子功能,还新增了用于模板管理的模板资源库。整体框架如下

  • 日志模板发现:同时兼容 Ad hoc 日志聚类和流式日志聚类,以离线的方式分析指定日志,将日志模板保存在模板资源库中
  • 日志模板匹配:提供在线聚类能力兼容之前的文本分析能力,此外提供模板匹配能力,将指定日志与模板资源库中的模板进行匹配、统计。对于未匹配的日志仍可以使用在线聚类模块进行聚类生成新的日志模板。匹配结果和在线聚类结果都保存到指定的日志库中(internal-ml-log)
  • 日志模板资源库:将日志模板发现任务产生的模板保存在一个资源库中,用户可以对资源库中的模板进行增删改查等操作,也可以对模板进行标注。目前模板匹配作业在线聚类生成的模板需要由用户手动选择添加到模板资源库中

这样通过对于之前文本分析功能整体架构的拆分,可以处理之前模板可维护性不高、灵活性较差和无法使用现有聚类能力的问题。下面我们以内部对神农监控系统日志的分析为例介绍如何使用改版后的文本分析功能。

场景说明

SLS 使用神农系统对底层服务进行监控,为服务的稳定运行的保驾护航。随着 SLS 的更新迭代,神农系统也在不断演进,这是通过多地域多集群神农服务的更新发版完成的。每一次神农系统的发版,都需要人工监控更新前后神农系统的各项指标,以确保神农系统线上更新的安全稳定。随着需要部署的地域、集群越来越多,通过人工监控服务的更新部署越来越耗时,持续下去也会逐渐拖慢服务的更新速度。因此我们在不断的挖掘服务自动部署、自动监控的可能性,将规律性、事务性的操作转由机器完成,提高运维效率。监控神农系统发布上线后是否正常运行,除了对相关的指标数据进行监控,还需要检查其运行日志中是否出现高风险日志。人工对神农系统的监控存在以下短板:

  • 日志数量庞大,难以在海量日志中及时找到需要关注的日志
  • 日志种类繁多,系统有多人共同开发维护,单个运维人员很难了解所有需要关注的日志
  • 日志格式复杂,由于历史原因,系统中存在很多不规范的日志,部分日志难以使用关键词定位

这几个短板也限制了我们直接使用告警规则对日志进行监控,因为这种条件下,我们需要维护大量的告警规则,且部分需要关注的日志由于缺少合适的索引难以通过告警描述。这就需要我们对原始日志进行归纳整理,在对需要关注的内容配置告警,这正是文本分析功能可以发挥作用的地方。

首先我们使用日志模板发现算法离线分析一段时间内各个集群的神农日志,得到数百个原始日志模板。然后我们在模板资源库中对个别日志模板进行修正和标注。最后使用模板匹配算法匹配各个集群的神农日志,统计各个日志模板随着时间的变化情况。并在日志标签粒度上配置告警规则监控需要关注的日志模板。在后面的章节中将介绍各个步骤的操作流程。

模板发现

首先从日志服务首页进入智能异常分析应用中,新建用于监控神农日志的实例。进入实例后点击左侧的 文本分析->日志模板发现 进入模板发现任务概览页面,点击右上角的 立即创建 按钮新建模板发现任务

在任务配置的基础配置页面中填写作业名称、要分析的日志所在的 project 和 logstore 等信息。点击下一步,对模板发现算法所需参数进行配置,步骤如下

  1. 选择算法类型,其中的日志聚类算法使用已有的 Ad hoc 形式的日志聚类功能生成日志模板。这里我们选择模板发现算法,即使用流式日志聚类算法挖掘日志模板
  2. 配置需要分析的日志字段,包括以下三项配置
  • 任务通过日志实体字段将日志划分成不同的分组,分别对不同分组的日志进行聚类,各分组互不相关
  • 日志等级字段用于标识日志的风险等级,如果配置了这一项,任务会标注得到的模板的风险等级
  • 在日志文本字段中正选(白名单)或者反选(黑名单)需要进行聚类分析的日志字段。由于神农日志格式不规范,无法通过白名单选择需要分析的字段。我们通过配置黑名单忽略某些字段,分析任务将对其余字段进行分析
  1. 配置模板数量调整生成的最终产生的模板的数量,滚动轴越往右,越倾向于产生更多模板(模板的粒度更细)
  2. 在调度配置中选择要分析哪个时间段的日志数据

我们还可以在高级配置中对模板发现算法进行进一步的配置,各个配置项如下

其中需要解释的是 起始常量长度 这个参数,这个参数表示日志的前几个字符一定是隶属的日志模板中的常量部分,即只有日志的这几个字符相同时,这些日志才可能归纳到同一个日志类别中。由于神农日志的格式不规范,各个日志类别的日志模板包含的日志字段和字段顺序都不同,因此这里配置 1。

配置完成后点击下方的 完成 按钮即可运行模板发现任务。之后我们可以在模板发现任务概览页面找到刚刚创建的任务,点击作业标识查看任务详情

模板发现任务包括两个阶段,第一个阶段为预聚类阶段,第二个阶段是在预聚类结果的基础上进一步聚类,得到最终的日志类别和相应的模板。第一、第二阶段的进度在上图的 1,2 两个图表中显示,图表 3 显示任务在运行过程中的异常信息,用于监控任务是否正常运行。当一、二两个阶段的进度都达到 100% 后表示模板发现任务运行完成。

模板管理

在模板发现任务概览页面点击 模板资源 页签可以找到发现任务生成的日志模板库,如下图所示

点击资源标识,查看模板库中模板数据,页面如下

页面上方显示生成模板资源的任务的基本信息,下方即为各个日志类别和表示各个日志类别的日志模板。可以通过其中按键对日志模板进行增删改查等操作,也可以在模板修改页面中对模板进行标注。需要注意的是,日志模板的批量操作暂时不支持事务操作,因此增删多个日志模板出现错误时,可能有部分或所有模板没有操作成功。

模板匹配

我们基于刚刚生成的模板资源库配置模板匹配任务,监控成都集群的神农日志。点击左侧的 文本分析->日志模板匹配 进入模板匹配任务概览页面,点击右上角的 立即创建 按钮新建模板匹配任务

在任务配置页面,我们首先需要配置要配置的日志的数据源,随后我们点击下一步进入算法参数配置页面,页面和操作步骤如下

  1. 选择算法,改版后我们新增了 相似度匹配算法 使用日志模板库对日志数据进行匹配分析,这里我们选择该算法。其他算法为之前版本已有的日志分析算法,仍然可以继续使用
  2. 在算法源配置中我们选择要使用的日志模板资源库,每一个模板资源库由生成模板的日志所在的 project、logstore 和任务名唯一标识。这里我们选择刚刚生成的神农日志模板库
  3. 配置模板匹配时的相似度阈值,即当日志与模板的相似度大于该阈值时匹配成功。阈值越大,匹配成功要求的相似度越高。阈值为 1 时表示精准匹配
  4. 配置待匹配的日志字段,一般与模板发现任务的字段配置相同。当选择了模板资源库,会根据其配置自动填充这些配置,仍可以在其基础上进行调整
  5. 调度配置中设置匹配任务要匹配从哪个时间点开始的日志数据

在下方的高级配置中可以对匹配任务进行进一步配置,配置项基本与发现任务的高级配置项相同,如下所示

其中需要介绍的 匹配方式,目前包括 字符匹配向量匹配 哈希匹配 三种匹配方式

  • 字符匹配直接在字符级别对日志进行匹配,匹配速度较慢,适合模板数量较少的场景。如果配置了合适的起始常量长度,也可以加速字符匹配过程
  • 向量匹配是将字符向量化后进行匹配,速度较字符匹配快,但是由于向量维度有限,可能会出现部分日志匹配不上或不精确。一般与字符匹配的效果相同
  • 哈希匹配计算日志和日志模板的哈希值,通过相似性哈希进行模板匹配,匹配速度最快,但是理论上也可能出现匹配不精确的问题,但是实际在测试过程中没有出现这种问题。适合日志模板数量较多的场景

由于神农日志模板的特征,起始常量长度对于加速字符匹配有很好的效果,因此这里选择字符匹配算法。配置完成后点击下方的完成按键运行模板匹配作业。之后我们可以在模板匹配任务概览页面找到刚刚创建的任务,点击作业标识查看任务详情。任务详情仪表盘上方显示日志匹配概览,包括匹配到的日志数量,未匹配的日志数量,各个日志模板匹配到的日志数量占比等等,如下所示

我们可以点击右侧扇形图的分区或者页面中间日志模板列表中模板标识查看该模板匹配的日志量随时间的变化情况

匹配作业对于未匹配到的日志进行在线聚类,我们可以在仪表盘中查看进行聚类的结果,如果其中有需要关注的日志类别,可以将对应的日志模板添加到日志资源库中。匹配作业会定时检测模板资源库是否有更新,使用最新的模板资源进行日志匹配

在仪表盘的最下端显示了匹配作业的进度,包括日志所在的各个 shard 的消费延迟

告警配置

匹配任务的结果将会写到对应 project 中的 internal-ml-log 日志库中,匹配结果日志结构如下

表示匹配到 1 条日志,日志模板的标识是 322,日志模板有一个表示日志等级的标签,其标签是 warnning。因此我们可以在日志模板级别或者日志标签级别配置告警规则,监控高风险日志。在神农日志场景,我们对部分 error 级别日志和其他标签日志进行了监控。 标签除了可以对日志模板进行解释说明,也提供了模板分组的能力,即拥有相同标签的模板可以任务是同一分组。如果对日志分组配置了告警,这个分组内模板的增删(添加、删除相应的标签)都不需要修改告警规则,匹配任务会自动同步最新的模板标签。这就方便了后续我们对于告警的管理。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
石季
+关注
目录
打赏
0
0
1
0
6
分享
相关文章
告别传统Log追踪!GOAT如何用HTTP接口重塑代码监控
本文介绍了GOAT(Golang Application Tracing)工具的使用方法,通过一个Echo问答服务实例,详细展示了代码埋点与追踪技术的应用。内容涵盖初始化配置、自动埋点、手动调整埋点、数据监控及清理埋点等核心功能。GOAT适用于灰度发布、功能验证、性能分析、Bug排查和代码重构等场景,助力Go项目质量保障与平稳发布。工具以轻量高效的特点,为开发团队提供数据支持,优化决策流程。
115 34
智能运维,由你定义:SAE自定义日志与监控解决方案
通过引入 Sidecar 容器的技术,SAE 为用户提供了更强大的自定义日志与监控解决方案,帮助用户轻松实现日志采集、监控指标收集等功能。未来,SAE 将会支持 istio 多租场景,帮助用户更高效地部署和管理服务网格。
270 51
数据采集监控与告警:错误重试、日志分析与自动化运维
本文探讨了数据采集技术从“简单采集”到自动化运维的演进。传统方式因反爬策略和网络波动常导致数据丢失,而引入错误重试、日志分析与自动化告警机制可显著提升系统稳定性与时效性。正方强调健全监控体系的重要性,反方则担忧复杂化带来的成本与安全风险。未来,结合AI与大数据技术,数据采集将向智能化、全自动方向发展,实现动态调整与智能识别反爬策略,降低人工干预需求。附带的Python示例展示了如何通过代理IP、重试策略及日志记录实现高效的数据采集程序。
数据采集监控与告警:错误重试、日志分析与自动化运维
Grafana Loki,轻量级日志系统
本文介绍了基于Grafana、Loki和Alloy构建的轻量级日志系统。Loki是一个由Grafana Labs开发的日志聚合系统,具备高可用性和多租户支持,专注于日志而非指标,通过标签索引而非内容索引实现高效存储。Alloy则是用于收集和转发日志至Loki的强大工具。文章详细描述了系统的架构、组件及其工作流程,并提供了快速搭建指南,包括准备步骤、部署命令及验证方法。此外,还展示了如何使用Grafana查看日志,以及一些基本的LogQL查询示例。最后,作者探讨了Loki架构的独特之处,提出了“巨型单体模块化”的概念,即一个应用既可单体部署也可分布式部署,整体协同实现全部功能。
899 69
Grafana Loki,轻量级日志系统
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
基于阿里云SelectDB,MiniMax构建了覆盖国内及海外业务的日志可观测中台,总体数据规模超过数PB,日均新增日志写入量达数百TB。系统在P95分位查询场景下的响应时间小于3秒,峰值时刻实现了超过10GB/s的读写吞吐。通过存算分离、高压缩比算法和单副本热缓存等技术手段,MiniMax在优化性能的同时显著降低了建设成本,计算资源用量降低40%,热数据存储用量降低50%,为未来业务的高速发展和技术演进奠定了坚实基础。
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
基于 PHP 语言的滑动窗口频率统计算法在公司局域网监控电脑日志分析中的应用研究
在当代企业网络架构中,公司局域网监控电脑系统需实时处理海量终端设备产生的连接日志。每台设备平均每分钟生成 3 至 5 条网络请求记录,这对监控系统的数据处理能力提出了极高要求。传统关系型数据库在应对这种高频写入场景时,性能往往难以令人满意。故而,引入特定的内存数据结构与优化算法成为必然选择。
32 3
PHP 日志系统的最佳搭档:一个 Go 写的远程日志收集服务
为了不再 SSH 上去翻日志,我写了个 Go 小脚本,用来接收远程日志。PHP 负责记录日志,Go 负责存储和展示,按天存储、支持 API 访问、可远程管理,终于能第一时间知道项目炸了。
48 10
智能运维,由你定义:SAE自定义日志与监控解决方案
SAE(Serverless应用引擎)是阿里云推出的全托管PaaS平台,致力于简化微服务应用开发与管理。为满足用户对可观测性和运维能力的更高需求,SAE引入Sidecar容器技术,实现日志采集、监控指标收集等功能扩展,且无需修改主应用代码。通过共享资源模式和独立资源模式,SAE平衡了资源灵活性与隔离性。同时,提供全链路运维能力,确保应用稳定性。未来,SAE将持续优化,支持更多场景,助力用户高效用云。
139 2
除了实时性能监控,Hyper-V还支持日志记录和警报功能你知道吗?
Hyper-V不仅支持实时性能监控,还具备强大的日志记录和警报功能。通过事件查看器可访问详细的日志文件,涵盖虚拟机管理、配置及Hypervisor事件,帮助故障排查和性能分析。警报功能支持预定义和自定义规则,可通过多种方式通知管理员,确保及时响应问题,保障虚拟化环境的稳定运行。
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
173 8

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等