FlashDuty 日志监控如何获取日志原文

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

之前有篇日志监控的文章:《夜莺日志监控如何获取日志原文》,讲到夜莺监控开源版本无法在日志监控的告警事件中包含日志原文,并给出了逻辑说明,其中提到 FlashDuty 可以做到,但是确实要稍微复杂一些,本文就演示一下 FlashDuty 日志监控的配置,讲解在 FlashDuty 日志监控中如何拿到日志原文。

数据准备

FlashDuty 针对 ElasticSearch 做日志监控,支持的是其 SQL 语法,我的演示数据如下:

上图是查询的 fc-insight 作为 Prefix 的索引,查询的最近 5 分钟的数据,加了一个 status = 502 的检索条件。

告警规则

日志的告警,常用的是两类,一类是统计带有某个关键字(或符合特定查询条件,比如 Level=ERROR)的日志行数,另一类是把日志作为结构化数据,提取日志里某一列的数据,做聚合统计,比如统计某个接口的平均响应时间或者 99 分位的响应时间等。

场景假设,我想监控最近 5 分钟 status = 502 的日志行数,只要满足条件的日志行数大于 0,就告警。我可以配置如下告警规则:

select count(1) as total from "fc-insight*" where "@timestamp" > now() - INTERVAL 5 MINUTES and status = 502

这样告警之后,我们可以知道满足条件的日志行数是多少,但是却不知道具体日志内容。怎么办呢?此时可以使用附加查询功能。比如这个例子,我可以继续配置一个附加查询条件,来查询第一条满足条件的日志原文,然后把查到的内容放到告警事件的描述信息中:

select * from "fc-insight*" where "@timestamp" > now() - INTERVAL 5 MINUTES and status = 502 limit 1

关联查询中,limit 1 确保只查到一条数据,否则如果有很多条日志都满足需求,就会把所有的日志都放到告警事件中,那这个告警事件就太太太长了。

备注描述中,引用了关联查询的结果:

{{- range $x := $relates.R1}}
request_id: {{$x.Fields.request_id}} , remote addr: {{$x.Fields.remote_addr}} 
{{- end}}

这里获取展示了 request_id 和 remote_addr 两个字段,你可以根据实际情况,获取更多字段。

$relates 就是上图中的 relate_values,告警产生之后,点击告警规则的那个 Triggered 按钮,就可以看到关联查询的结果了。

最后生成的告警事件中会带上 request_id 和 remote_addr 两个字段的内容:

FlashDuty-日志告警原文

结语

FlashDuty 提供了关联查询的功能,可以在告警事件中包含日志原文,这对于日志监控来说是一个非常有用的功能。如果你的日志监控工具不支持获取日志原文,可以考虑使用 FlashDuty,或者自己实现一个类似的功能。本文介绍的思路希望对你有所帮助。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云
OpenSource
开源版
Flashcat
Flashcat