利用 FlashDuty 实现告警时关联查询

张望 2025-10-15 15:33:46

需求

我司时序库(Prometheus)里已经有了应用的 QPS 监控数据,想要在 QPS 突增时触发告警,同时希望在告警时能做几个关联查询(把关联查询的数据塞入告警消息中,方便 On-call 人员响应处理):

  • 当前 QPS
  • 昨天同时刻的 QPS
  • 最近一个月最大的 QPS

Prometheus 和 Nightingale 都可以在模板中执行 query 函数来实现关联查询, 但是有两个缺点:

  • 不够结构化,需要引号转义之类的,写起来麻烦
  • Prometheus 在恢复的时候,拿不到恢复时的值

FlashDuty 对这个需求支持的很好,我们最终准备使用 FlashDuty 来实现这个需求。

FlashDuty 简介

FlashDuty 是一个告警事件的 On-call 平台,支持对接各类监控系统(Prometheus、Nightingale、Zabbix、Grafana、云监控 等等),把告警事件收集到一个中心,做统一的告警降噪、认领、升级、路由、通知等处理。

FlashDuty 除了可以做 On-call 这摊事,也可以作为一个告警引擎,查询数据源的数据做告警判定,可以在 FlashDuty 中管理告警规则,对自己的数据中心的 Prometheus、VictoriaMetrics、ElasticSearch、ClickHouse 等做告警。

下面我们演示一下具体配置。哦对了,FlashDuty 是个 SaaS 服务,可以免费注册试用,也有免费套餐可以用,FlashDuty 的告警引擎功能是免费的。注册地址:https://console.flashcat.cloud/

前置条件

要使用 FlashDuty 做告警引擎,需要:

1、在自己的数据中心安装告警引擎(monitedge)模块,安装方法见:

告警引擎安装

2、在 FlashDuty 中添加数据源,操作入口:

配置数据源

规则配置

在 FlashDuty 中创建一个告警规则,告警规则的创建入口:

告警规则创建入口

在告警规则里,配置数据源为想要生效的 Prometheus 数据源,配置查询语句:

((avg_over_time(app_qps[5m]) - avg_over_time(app_qps[5m] offset 1d)) / avg_over_time(app_qps[5m] offset 1d) * 100) > 50

含义:当前 5 分钟的平均 QPS 比昨天同一时刻的平均 QPS 增加了 50% 以上。

对于这个 promql 查到的结果,不同的数值可以配置为不同的告警级别,我的配置如下:

然后,关键步骤来了,在告警规则里添加三条关联查询,分别写好 当前QPS、昨天同时期QPS、当月最大QPS的查询表达式。最后把关联查询的值展示到备注描述中(语法格式是 go template,看 FlashDuty 的字段上那个提示说明即可)

告警规则关联查询配置

最终效果

简单测试了一下,最终产生的告警消息中带有了三个关联查询的值:

完美实现需求,丝滑~~

标签: FlashDuty
快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云
OpenSource
开源版
Flashcat
Flashcat