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

Grafana告警配置:Loki日志触发,单主机单日仅告警一次且实时通知

实现实时触发且单主机每日仅一次告警的配置方案

要同时满足1分钟内实时触发和单主机每日仅推送一次告警的需求,需结合查询逻辑、告警规则与通知组件配置实现,具体步骤如下:

1. 编写核心查询语句

使用组合条件的查询语句,同时检测实时错误日志和该主机近24小时内的告警触发历史:

count_over_time({syslog_identifier="my_service", level="error"} |= `my_log_entry1` |= `my_log_entry2`[1m]) by (host) > 0
AND
count_over_time({syslog_identifier="my_service", level="error"} |= `my_log_entry1` |= `my_log_entry2`[24h] offset 1m) by (host) == 0

逻辑说明:

  • 第一个条件count_over_time(...) [1m] >0:确保最近1分钟内出现目标错误日志,实现实时触发
  • 第二个条件count_over_time(...) [24h] offset 1m ==0:排除“1分钟前到24小时前”已触发过告警的主机,确保每日仅触发一次

2. 配置告警规则(以Loki/Prometheus为例)

将上述查询写入告警规则文件(如alerts.yml),定义告警的基础属性:

groups:
- name: my_service_error_alerts
  rules:
  - alert: MyServiceCriticalError
    expr: |
      count_over_time({syslog_identifier="my_service", level="error"} |= `my_log_entry1` |= `my_log_entry2`[1m]) by (host) > 0
      AND
      count_over_time({syslog_identifier="my_service", level="error"} |= `my_log_entry1` |= `my_log_entry2`[24h] offset 1m) by (host) == 0
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "主机{{ $labels.host }}出现MyService错误日志"
      description: "主机{{ $labels.host }}在1分钟内检测到错误日志:my_log_entry1或my_log_entry2,且今日未触发过该告警"

3. 通知组件配置强化去重

为避免时间窗口边界问题导致的重复告警,在Alertmanager配置中设置分组与间隔规则,确保相同主机的告警24小时内仅推送一次:

route:
  group_by: ['host', 'alertname']
  group_wait: 30s
  group_interval: 24h  # 同一分组的告警间隔24小时再推送
  repeat_interval: 24h # 同一告警重复推送间隔24小时
  receiver: 'your_notification_channel'

receivers:
- name: 'your_notification_channel'
  # 配置你的通知方式(邮件、Slack等)

补充说明:

  • offset 1m用于避免1分钟窗口与24小时窗口重叠,防止刚触发的实时日志被计入历史统计导致告警被屏蔽
  • 若需按自然日(而非滚动24小时)触发,可结合day_of_month等时间函数调整查询逻辑,滚动24小时方案更简单通用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 20:33:13