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

简介: 我们将 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日志并进行多维度分析。
目录
相关文章
|
4天前
|
存储 算法 Go
go语言并发实战——日志收集系统(七) etcd的介绍与简单使用
go语言并发实战——日志收集系统(七) etcd的介绍与简单使用
|
4天前
|
监控 Go
go语言并发实战——日志收集系统(八) go语言操作etcd以及利用watch实现对键值的监控
go语言并发实战——日志收集系统(八) go语言操作etcd以及利用watch实现对键值的监控
go语言并发实战——日志收集系统(八) go语言操作etcd以及利用watch实现对键值的监控
|
4天前
|
存储 Go 索引
go语言并发实战——日志收集系统(一) 项目前言
go语言并发实战——日志收集系统(一) 项目前言
go语言并发实战——日志收集系统(一) 项目前言
|
10天前
|
运维 监控 Java
系统日志规范及最佳实践
系统日志规范及最佳实践
系统日志规范及最佳实践
|
2天前
|
运维 Prometheus 监控
监控与日志分析:运维的双剑合璧
【6月更文挑战第21天】监控与日志分析在IT运维中至关重要。监控守护系统健康,通过性能指标、服务状态和安全事件预警确保稳定性;日志分析则用于问题追踪,通过错误、访问和安全日志定位故障。监控工具如Prometheus与日志分析工具如ELK堆栈协同工作,统一平台、合理告警、定期分析和团队协作是高效运维的关键。这两者的结合助力运维人员迅速响应和解决问题,维护系统稳定。
|
6天前
|
存储 监控 安全
深入探索Linux的journalctl命令:系统日志的利器
**journalctl 深入解析:Linux 系统日志的强大工具** journalctl 是 Linux 中用于查询和管理 systemd 日志的命令行工具,与 systemd-journald 配合收集广泛的信息,包括内核消息和服务日志。它提供实时追踪、过滤、导出等功能,如 `-f` 实时监控,`-u` 过滤特定服务日志,`-k` 显示内核消息,`--since` 和 `--until` 选择时间范围。在实际应用中,结合权限管理、日志空间控制和有效过滤,journalctl 成为系统管理员诊断和优化系统的得力助手。
|
4天前
|
消息中间件 存储 监控
go语言并发实战——日志收集系统(六) 编写日志收集系统客户端
go语言并发实战——日志收集系统(六) 编写日志收集系统客户端
|
4天前
|
消息中间件 存储 Kafka
go语言并发实战——日志收集系统(二) Kafka简介
go语言并发实战——日志收集系统(二) Kafka简介
|
9天前
|
SQL 监控 关系型数据库
MySQL数据库基础练习系列7、日志记录系统
MySQL数据库基础练习系列7、日志记录系统
6 1
|
22天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的公司员工工作日志办公系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的公司员工工作日志办公系统的详细设计和实现(源码+lw+部署文档+讲解等)

热门文章

最新文章