快速配置告警规则体验夜莺告警功能

根据前面的文档,已经完成了夜莺的部署,并且采集到了数据、配置了数据源,现在我们就快速配置一个告警规则,体验一下夜莺的告警功能。

夜莺的告警规则和 Prometheus 类似,核心就是配置 promql,然后夜莺拿着这个 promql 周期性去查询时序库,如果查到了,就产生告警事件(查到几条生成几条事件),如果查不到了,就说明不再达到阈值,就产生恢复事件。我用 system_load_norm_1 这个指标来举例,先去即时查询里查一下这个指标的值:

20240223162044

system_load_norm_1 表示平均每个 cpu core 的负载,当前值是 0.14,为了快速生成告警事件,我会把阈值设置为 0,只要大于 0 就算触发阈值。执行频率设置为 15 秒,即每 15 秒查询一次时序库,持续时长设置为 0,相当于只要有一次触发阈值就产生告警,这两个字段上面都有说明,鼠标放上去就会看到提示。

20240223162553

保存告警规则,很快就会生成告警事件了,菜单入口:告警管理 - 活跃告警,如图所示:

20240223164010

告警事件成功生成!红框里两个按钮可以选择展示模式,当前展示的是列表模式,也可以使用卡片模式,卡片模式可以做事件聚合展示。

导入内置规则

夜莺已经内置了一些告警规则,可以导入到自己的业务组使用。菜单入口:告警管理 - 告警规则,选中左侧业务组,点击右上角【更多操作】-【导入告警规则】,如图所示:

20240223164636

Linux 分类下的 linux_by_categraf_zh 这个分组下的告警规则,既适用于 Linux 也适用 Windows。你可以基于这些规则做调整,比如批量修改告警接收人、批量启用/禁用告警规则等。

如果内置的告警规则不够用,推荐从下面这些地方获取:

不过,上面这些规则都是基于 Prometheus 的,没法直接导入夜莺中,不过有社区小伙伴写过转换脚本,可以把 Prometheus 的告警规则转换成夜莺的告警规则,脚本位置在 这里,Python 写的(大家应该都看得懂吧),可以自行下载、修改、使用。

告警规则关键字段说明

基础配置

  • 规则名称:告警规则的名称,比如 CPU 使用率过高
  • 附加标签:附加到该规则产生的所有告警事件上,未来可以使用这些标签做事件筛选,比如 team=cloud 这样的格式
  • 备注:告警规则的备注,可以写一些规则的说明,可以引用事件变量,比如 {{ $labels.instance }} 这样的格式

规则配置

夜莺支持时序指标告警、日志告警、机器失联告警,根据自己的需求选用。最常用的是指标告警,比如 Prometheus 数据源类型,需要配置以下字段:

  • 关联数据源:表示这个告警规则生效到哪些数据源,如果写 $all 表示生效到该类型下所有数据源,很多公司可能有多个 Prometheus 或 VictoriaMetrics,可以用一个规则生效到多个时序库上
  • 告警条件:promql 表达式,可以写多个,并启用级别抑制,比如内存可用率,如果过低就告警,小于 25% 是三级告警,小于 15% 是二级告警,小于 5% 是一级告警。则可以如下配置:

20240223170638

  • 执行频率:夜莺作为告警引擎,会周期性查询时序库,这个字段配置执行频率
  • 持续时长:相当于 Prometheus 告警规则中的 for 字段。通常持续时长大于执行频率,在持续时长内按照执行频率多次执行查询,每次都触发才生成告警;如果持续时长置为0,表示只要有一次查询的数据满足告警条件,就生成告警

生效配置

比如白天一个阈值规则,晚上是另一个,或者工作日是一个,周末是另一个,则可以通过生效配置来实现。

仅在本业务组生效

需求场景,比如有 A、B 两个业务组,每个业务组下面都有 10 台机器,此时在 A 业务组下配置告警规则:system_load_norm_1 > 0,则会对所有的 20 台机器生效。如果只想对 A 业务组下的 10 台机器生效,可以勾选【仅在本业务组生效】。

勾选该项之后,夜莺告警引擎的处理逻辑就变成了:拿着 system_load_norm_1 > 0 这个 promql 去查询时序库,时序库根本不知道哪些机器属于哪些业务组,会返回所有触发阈值的机器,在夜莺里机器标识是使用 ident 标签,告警引擎拿着 ident 标签与本业务组下的机器做比对,如果当前这个告警事件的 ident 标签指代的机器恰好在这个业务组下,才生成告警事件。

注意:如果 promql 查询结果中没有 ident 标签,则这个机制就没有办法跑通了。

通知配置

  • 告警接收组:告警事件产生后,通知哪些人。为了防止人员变动导致大面积告警规则调整,这里需要配置团队,告警之后,会发给这些团队中的所有的人。当然,规则里也可以不配置告警接收组,后面使用订阅规则和接收人做关联即可
  • 留观时长、重复通知间隔、最大发送次数,每个字段都有 tooltip 提示,自行阅读即可。一般来讲,重复通知间隔一般设置为 60 分钟,最大发送次数设置为 0,避免漏掉一些告警
  • 回调地址:告警事件产生后,可以通过回调地址通知外部系统,这里配置的回调地址自然是针对这个规则产生的告警事件,如果想让所有的告警事件都做回调,可以配置全局的回调地址,菜单入口:告警通知 - 通知设置 - 回调地址
  • 附加信息:相当于自定义字段,可以在备注里或通知模板里引用,假设我配置了一个 RunbookURL 字段

20240223175457

引用方式:{{ .AnnotationsJSON.RunbookURL }}。附加信息的字段是可以完全自定义的,直接手输就可以,虽然页面上有 runbook_url、dashboard_url、summary 等提示信息,那也只是 suggestion,你还是可以输入任何你想输入的字段名称。

告警降噪、认领升级

通常来讲,监控系统的侧重点是数据采集、存储、查询分析、告警,一旦产生告警事件就算完活了,但是告警事件的后续处理也是很重要的,比如告警降噪、排班认领升级、灵活分发、IM 协同等。这些功能是通用功能,夜莺需要,Zabbix、Prometheus、ElastAlert、蓝鲸、Open-Falcon、各类云监控等都需要,但是如果放到监控系统中来实现,势必就会和监控系统深度耦合,没法让其他监控系统享受到这个便利功能,所以夜莺并没有实现这些功能,而是单独拎出一个产品来实现,即 FlashDuty

FlashDuty 可以对接各类监控系统,统一收集告警事件,做后续处理,是一个一站式告警响应平台:降噪、值班、分派、升级、触达。FlashDuty 有免费套餐,也有商业套餐(包含较多电话、短信、邮件配额),欢迎大家试用。