核心概念
1. 阈值判定模式 (Threshold)
此模式适用于需要对聚合后的数值进行阈值比对的场景,例如监控”最近 5 分钟错误日志数量”。配置方式
- 查询语句:编写 SQL 聚合查询,返回数值列和(可选的)分组列。
- 示例:统计最近 5 分钟内,各服务的错误日志数量。
- 字段映射:
- 标签字段:用于区分不同告警对象的字段。上例中为
service_name。可以不填,Monitors 会自动把除了值字段外的所有字段都作为标签字段。 - 值字段:用于阈值判定的数值字段。上例中为
error_cnt。
- 阈值条件:
- 使用
$A.字段名引用数值。 - 示例:
Critical: $A.error_cnt > 50,Warning: $A.error_cnt > 10。 - 简写:如果只配置了一个值字段,可以直接使用
$A,如$A > 50。
工作原理
引擎执行 SQL 查询,获取二维表格数据。根据”标签字段”将数据分组,然后提取”值字段”的数值与阈值表达式进行比对。恢复逻辑
恢复查询示例
恢复查询示例
告警 SQL 查出了 引擎会将变量替换为实际值后执行查询,如果查到数据,则判定恢复。
network_host="a", interface="b" 的网卡挂了,恢复 SQL 可以写:2. 数据存在模式 (Data Exists)
此模式适用于将过滤逻辑直接写在 SQL 中的场景,或者只需要关注”是否有数据返回”的情况。配置方式
- 查询语句:在 SQL 中使用
HAVING子句直接过滤出异常数据。
- 示例:直接查询错误数超过 50 的服务。
- 字段映射:
- 在此模式下,标签字段和值字段为 非必填项。如果都留空,引擎会将查询结果中的所有字段都作为标签字段,可以在规则备注中引用。
恢复逻辑
- 数据消失即恢复:当 SQL 查询结果为空(即不再满足 HAVING 条件)时,引擎判定故障恢复。这是最常用的恢复方式。
- 恢复查询:
- 场景:有时”查不到数据”并不代表恢复(可能是日志采集挂了),或者需要更严格的恢复条件(如连续 N 分钟无错误)。
- 配置:编写一条独立的 SQL 语句用于恢复判定。只要该查询能查到数据,就认为故障已恢复。
- 变量支持:支持在恢复 SQL 中使用
${label_name}引用告警事件的标签值,实现精准恢复检测。
优缺点分析
3. 数据缺失模式 (No Data)
此模式用于监控”预期应该有数据,但实际没有数据”的场景,常用于监控日志采集链路中断或周期性任务未执行。配置方式
- 查询语句:编写一个预期应该持续返回数据的 SQL 查询。
- 示例:查询所有主机的日志上报心跳。
- 判定规则:
- 引擎会周期性执行该 SQL。
- 如果某个
host_name在之前的周期中出现过,但在当前周期(以及连续的 N 个周期)中不再出现在查询结果中,则触发”数据缺失”告警。 - 注意:这与 Data Exists 模式相反。Data Exists 是”查到数据就告警”,No Data 是”查不到数据就告警”。
恢复逻辑
4. 案例说明
日志告警经常遇到如下需求:统计最近 5 分钟的 ERROR 日志数量,如果超过阈值则告警,同时在告警消息中展示最近一条 ERROR 日志作为样例。配置方案如下:- 主告警条件:使用 Threshold 模式,SQL 语句统计最近 5 分钟的 ERROR 日志数量,配置阈值条件。
- 关联查询:配置一个关联查询,SQL 语句查询最近一条 ERROR 日志,使用
${service_name}等变量限定具体服务。 - 规则备注描述:在告警规则的备注描述中引用关联查询结果,使用
$relates变量,把日志原文渲染出来。