告警抑制 by 查询(商业版)

本文从原理和数据流的角度,介绍夜莺监控的告警引擎的相关知识,帮助用户理解告警流程,排查告警问题。

概述

“按查询数据抑制”(Inhibit by Query Data)是一种高级的告警抑制机制。当告警触发时,系统会先执行配置的数据查询,根据查询结果决定是否抑制该告警:

  • 有查询结果:抑制告警,不发送通知
  • 无查询结果:正常发送告警通知

这种机制可以实现更加灵活和智能的告警抑制策略,避免在特定条件下产生冗余告警。

使用场景

场景一:基于实时状态的告警抑制

当某个服务正在维护或已知存在问题时,通过查询维护标记数据来抑制相关告警。

示例:如果监控系统中存在 maintenance_mode{service="app"} 指标且值为 1,则抑制该服务的所有告警。

场景二:依赖关系的级联抑制

当上游服务已经告警时,抑制下游服务的相关告警,避免告警风暴。

示例:数据库服务器已经产生告警时,抑制所有依赖该数据库的应用服务的连接失败告警。

场景三:动态阈值判断

结合实时查询数据,实现更复杂的抑制逻辑。

示例:仅当集群中其他节点正常运行时才抑制单节点告警,避免在全局故障时错误抑制。

配置说明

配置界面

配置界面截图

配置步骤

1. 选择抑制类型

在告警规则的抑制配置中,选择 “Inhibit by Query Data”(按查询数据抑制)类型。

2. 配置告警过滤条件

定义需要被抑制的告警必须满足的条件,支持两种过滤方式:

标签过滤

根据告警的标签(Labels)进行匹配。

  • 标签:选择或输入标签名称
  • 运算符:支持 ==(等于)、!=(不等于)、=~(正则匹配)、!~(正则不匹配)
  • 标签值:输入匹配的值

示例

标签: rulename
运算符: ==
标签值: 告警
属性过滤

根据告警的属性(Attributes)进行匹配

示例

属性: 业务组
运算符: ==
属性值: n9e

💡 提示:可以添加多个过滤条件,所有条件必须同时满足(AND 关系)。

3. 配置查询数据

设置需要执行的数据查询,当查询返回至少一条数据时,告警将被抑制。

查询

数据源类型

选择数据源类型,目前支持 Prometheus

数据源

选择具体的数据源实例。

查询配置
Prometheus 查询

在"内置指标"输入框中填写 PromQL 表达式。

支持模板变量

  • {{$labels.xxx}}:引用告警的标签值
  • {{$value}}:引用告警的触发值
  • {{$event}}:引用整个告警事件对象

示例

mem_active{ident="{{$labels.ident}}"}

该查询会查询与告警事件相同 ident 标签的 mem_active 指标,如果查询到数据,则抑制告警。

4. 保存配置

完成以上配置后,点击"保存"按钮使配置生效。

配置示例

示例 1:基于主机存活状态抑制告警

场景:当主机的 mem_active 指标有数据时(表示主机存活),抑制该主机的网络告警。

配置

  1. 标签过滤

    rulename == 网络告警
    
  2. 查询配置

    • 数据源类型:Prometheus
    • 数据源:prom
    • PromQL:mem_active{ident="{{$labels.ident}}"}

逻辑:如果能查询到该主机的内存活动指标,说明主机正常运行,此时的网络告警可能是误报,因此抑制。

示例 2:维护窗口期间抑制告警

场景:通过维护模式标记抑制正在维护的服务告警。

配置

  1. 标签过滤

    service == web-app
    
  2. 查询配置

    • 数据源类型:Prometheus
    • 数据源:prom
    • PromQL:maintenance_mode{service="{{$labels.service}}"} == 1

逻辑:如果该服务的维护模式标记为 1,则抑制所有相关告警。

注意事项

查询性能

  • 每次告警触发时都会执行查询,请确保查询语句性能良好
  • 避免使用复杂的聚合查询或大时间范围的查询

模板变量

  • 模板变量在查询执行时会被替换为实际值
  • 如果标签不存在,{{$labels.xxx}} 会被替换为空字符串
  • 建议在配置前确认告警事件包含所需的标签

过滤条件

  • 标签过滤和属性过滤是 AND 关系,必须全部满足

数据源可用性

  • 查询失败时,告警不会被抑制,会正常发送通知

最佳实践

  1. 先测试后上线:使用"测试"功能验证配置是否符合预期
  2. 合理使用属性过滤:利用属性过滤可以更精确地定位需要抑制的告警
  3. 避免过度抑制:确保抑制逻辑不会误杀重要告警
  4. 文档化配置:在规则备注中说明抑制逻辑,方便团队维护

常见问题

Q: 抑制的告警是否会保存到历史记录?

A: 被抑制的告警会保存到历史告警记录中。

Q: 如何调试查询配置?

A: 可以使用"测试"按钮模拟告警触发,查看查询执行结果和抑制判断逻辑。

Q: 查询超时会影响告警发送吗?

A: 不会。如果查询超时或失败,告警会正常发送,不会被抑制。

更新时间 2025-10-18

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云