夜莺日志监控如何获取日志原文

快猫运营团队 2025-03-03 16:46:09

夜莺支持指标监控和日志监控,其中日志监控主要是对接的 ElasticSearch 和 Loki,社区用的比较多的是 ElasticSearch,有不少朋友咨询,我在夜莺的日志监控中,怎么配置才能在告警事件中包含日志原文呢?

我们先看一下开源版夜莺的日志告警规则是如何配置的:

夜莺日志告警规则

首先选择类型为 ElasticSearch,然后选择具体针对哪个数据源做告警,然后就是配置查询统计条件,查询统计条件最终会查到一个数值,然后在「阈值判断」中对这个数值做阈值比对,如果超过阈值就触发告警。

这个查询统计条件,最终会转换成 ElasticSearch 的 DSL 发起查询,ElasticSearch 查完之后返回数值,注意,ElasticSearch 返回的仅仅是一个数值,而不是日志原文。所以夜莺侧是拿不到日志原文的。

其实个人不建议在告警事件中包含日志原文,比如我想监控 Error 关键字,查询最近 5 分钟的日志,包含 Error 关键字的日志行有 1000 行,难道要把这 1000 行日志原文都塞到告警事件里吗?显然不现实。当然,有其他办法来做这个事情,但需要投入更多心智负担,开源版以简单实用为主,解决核心问题就可以了,所以就没有提供获取日志原文的功能。

如果就想要获取日志原文,可以参考 FlashDuty 的方案。

FlashDuty-告警规则

FlashDuty 也是支持多种不同的数据源,其中就包括 ElasticSearch。日志原文的内容太多,FlashDuty 建议只获取第一条样例日志,不要把日志全部塞到告警事件中。本质上,查询 ElasticSearch 「统计带有某个关键字的日志行数」和「获取包含某个关键字的第一条样例数据」是两个不同的查询请求,所以,一条规则中就要包含两个请求。相比开源夜莺,FlashDuty 额外支持了一个附加查询功能,可以在附加查询中额外配置一个查询条件来获取日志原文。

即:告警阈值的查询条件是统计带有 Error 关键字的日志行数,附加查询条件是获取包含 Error 关键字的第一条样例数据。

FlashDuty 的日志告警是免费的,如果你不想用 SaaS,就想自己实现这个功能怎么做?其实也可以,通过自定义脚本来接收告警事件,然后在收到告警事件之后判断这是哪一条告警规则,进而根据不同的告警规则去查询 ElasticSearch 获取日志原文,然后再发送告警通知。这可以看做是一个 Enrichment 的逻辑。

如果你是夜莺商业版客户,也可以看到附加查询功能,只不过夜莺商业版用的是 DSL 的方式配置告警规则,而 FlashDuty 用的是 SQL 语法。ElasticSearch 支持不同的语法,常用的是 DSL、SQL、EQL 等,在告警这个场景,基本都够用。

结语

日志告警是监控系统的重要一环,告警事件中包含日志原文是一个常见需求,但是不建议把日志原文全部塞到告警事件中,而是建议只获取第一条样例日志。如果你的日志监控工具不支持获取日志原文,可以考虑使用 FlashDuty,或者自己实现一个类似的功能。本文介绍的思路希望对你有所帮助。

标签: 日志监控
快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云
OpenSource
开源版
Flashcat
Flashcat