FlashDuty 告警规则 - 多个 PromQL 查询的功能说明

Product Team @快猫星云 2025-03-13 15:03:31

FlashDuty 不但是一个一站式告警 OnCall 平台,也提供了告警引擎能力,可以对接各种监控系统,本文介绍 FlashDuty 告警规则中多个 PromQL 查询的功能说明。

场景一:多个指标联合运算

举个例子,硬盘 IO.UTIL 大于 99% 同时写延迟超过 10ms 就告警,我们可以这么配置:

当然了,也可以直接在一个 Promql 中来写,比如 irate(diskio_io_time[2m])/10 > 99 and irate(diskio_write_time[2m])/irate(diskio_writes[2m]) > 10。我这里故意拆成两个查询条件只是为了演示功能。

这个配置就可以达到多指标联合运算的效果,但是有个前提,就是这两个查询得到的结果,其标签必须完全一致,否则没法这么运算。因为只有标签一致,才意味着参与运算的数据是针对相同的监控对象。比如 cpu 的指标和 disk 的指标,标签不同,就没法这么运算。

场景二:多个指标并行告警

如果多个指标之间没有关系,就不能这样使用「阈值计算」了,此时应该拆成多个告警规则。或者,不要使用「阈值计算」了,换用「数据存在」告警模式。比如:

上图中两个查询条件,一个是 mem_available_percent,另一个是 net_bits_recv,这俩指标的标签不同,没法联合运算,可以在「数据存在」模式下并行计算。

实际上,我们不推荐这么用,更推荐的是拆成多个告警规则。但是有时,多个查询条件很像,是一类东西,拆成多个告警规则管理起来比较费劲。此时也可以用这种模式。但是,在这个模式下,产生的告警规则里没有指标名字,这个原因很复杂不详细展开了,有个 workround 的方式,可以让产生的告警事件中带上指标名字,就是利用 label_replace 函数,额外做一个 label 出来,和 __name__ 的值保持一致,比如:

label_replace(mem_available_percent{ident="dev-backup-01"}, "metric_name", "$1", "__name__", "(.*)") > 0

之后产生的告警事件中,会有 metric_name 这个 label,值就是指标名字。

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