You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Loki中基于日志触发告警并基于另一日志关闭告警

实现Loki告警的触发与自动清除逻辑

你可以通过组合两个日志计数查询,构造一个仅当"New alarm"出现且"Deleted alarm"未出现时触发的告警规则,具体方案如下:

核心PromQL查询

直接对比两个count_over_time的结果,判断触发条件:

count_over_time({app="alarm-handler"} | json | message="New alarm" [1m]) > 0
AND
count_over_time({app="alarm-handler"} | json | message="Deleted alarm" [1m]) == 0

这个表达式的逻辑是:

  • 最近1分钟内出现过"New alarm"日志
  • 且最近1分钟内没有出现过"Deleted alarm"日志
    只要满足这两个条件,告警就会被触发;当"Deleted alarm"日志出现后,第二个条件不满足,告警会自动恢复。

告警规则配置示例

把上面的查询放到你的Prometheus/Loki告警规则文件中(比如alerts.yaml),注意要给告警设置唯一的标识标签(如果日志里有alarm_id这类唯一字段,一定要加到labels里,避免不同告警混淆):

groups:
- name: alarm-handler-alerts
  rules:
  - alert: ActiveAlarmTriggered
    expr: |
      count_over_time({app="alarm-handler"} | json | message="New alarm" [1m]) > 0
      AND
      count_over_time({app="alarm-handler"} | json | message="Deleted alarm" [1m]) == 0
    for: 30s  # 可选,延迟30秒触发,避免日志抖动
    labels:
      severity: critical
      # 如果日志里有唯一的alarm_id,这里要加上:
      # alarm_id: "{{ $labels.alarm_id }}"
    annotations:
      summary: "新告警触发"
      description: "检测到New alarm日志,且未收到对应的Deleted alarm日志"

关键注意事项

  • 时间窗口一致性:两个count_over_time的时间窗口([1m])要保持一致,避免逻辑判断出错
  • 日志字段解析:确保json解析能正确提取message字段,如果日志格式有变动,要调整解析规则
  • 唯一标识:如果你的业务里有多条不同的告警,一定要把日志里的唯一标识(比如alarm_id)作为告警标签,这样AlertManager才能准确区分和清除对应的告警,不会出现误关其他告警的情况

内容的提问来源于stack exchange,提问作者jerem0808

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 00:22:07