本篇目录5 节

08告警与通知Alerting

指标与日志告警实战

两个端到端例子:基于 Prometheus 的 CPU 阈值告警与基于 Loki count_query 的错误日志突增告警,从建规则到收到通知逐环节走通,最后附通用排错清单。

约 2 分钟/622 字/GRAFANA 12.X

实战前的准备

两个例子共用同一套前提:数据源已连通(Prometheus、Loki 均在 Connections → Data sourcesSave & test 通过);已建好一个 Slack 或 Webhook 联系点并 Test 成功;你是所在文件夹的 Editor。心智模型回顾见Grafana 告警体系总览

例子一:CPU 阈值告警(Prometheus)

场景:任一主机的 CPU 使用率连续 5 分钟超过 80% 就通知值班群。

  1. Alerting → Alert rules → New alert rule,放入一个评估组(如 1m 间隔)。
  2. Query A 选 Prometheus 数据源,输入:
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
  1. Reduce B:对 A 取 Last;Threshold CIS ABOVE 80,选为最终条件。
  2. Evaluate for5m——没有它,单次采样毛刺就会告警。
  3. 加标签 severity=warningteam=infra;加注解 summary{{ $labels.instance }} CPU 使用率 {{ $value | printf "%.1f" }}%
  4. 保存后到规则详情看预览:每个 instance 一个实例,状态从 Normal/Pending/Firing 实时可见。

提示: 注解里的 $value$labels 只在规则的 label/annotation 模板里可用,与通知模板(Go template)是两套上下文,别混用。

例子二:错误日志突增告警(Loki count_query)

场景:过去 5 分钟内 ERROR 级别日志条数超过 50 即告警。

  1. 同样新建规则,Query A 选 Loki 数据源。日志告警必须使用能返回数值的指标型查询(count query),且以即时(instant)方式执行——纯日志行查询不能触发告警。
  2. 输入 LogQL:
sum(count_over_time({job="payments"} |= "ERROR" [5m]))
  1. Threshold BIS ABOVE 50,设为最终条件;for 给 2m 防抖。
  2. 想在通知里带上日志线索,把查询改为按服务分组 by (service),通知模板里 {{ range .Alerts }} 就能逐服务列出。

常见疑问:为什么 Explore 里有日志、告警里却说 NoData?十有八九是查询没包在 count_over_time 这类聚合里、返回的不是数值序列。日志侧的查询写法见探索日志

排错清单

通知没按时到达时,沿链路从上往下逐环节确认:

环节 检查点
规则 是否被暂停;预览状态是 Normal 还是根本没评估
评估组 间隔是否太长;组是否因规则过多而评估延迟
查询 时间范围内确实有数据;for 时长大于查询缓冲
无数据/错误 NoData、Error 的状态处理是否符合预期
标签 severity 等路由标签是否拼写正确、有没有漏打
路由 Alerting → Notification policies 用模拟匹配确认落点
静默 Silences 页是否有未过期的静默误伤
联系点 Test 按钮验证凭据与网络

注意: 排查「告警不触发」时,优先看规则详情里的实例状态历史,它能告诉你卡在了哪一步;仍无头绪再对照故障排查手册

下一步

本页为学习整理的中文改写,依据Grafana 官方文档最新版本编写(以 Grafana 12.x 为基准),操作路径请以实际产品界面为准。

Alerting