Linux系统监控高级教程_PrometheusGrafana自定义告警

22次阅读

prometheus告警需配合Alertmanager实现去重分组路由grafana告警为独立体系;PromQL规则应使用rate/irate、加label过滤、设持续时间阈值以减少误报。

Linux系统监控高级教程_PrometheusGrafana自定义告警

想让 Prometheus + Grafana 告警真正管用,光配个阈值远远不够——得知道指标从哪来、规则怎么写、告警怎么收敛、通知怎么不漏不扰。

搞懂告警链路:从采集到通知不是一条直线

Prometheus 不直接发通知,它只负责“发现异常”;Alertmanager 才是告警的调度中心,负责去重、分组、静默、路由和派发;Grafana 的告警是独立体系(v8+ 后逐渐转向内置 Alerting),和 Prometheus 原生告警不互通。混用时务必分清职责:

  • Prometheus rules.yml 定义“什么算问题”(如:100 * (1 - avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m]))) > 90
  • Alertmanager 配置 routereceivers,决定“谁在什么时候收到哪类告警”
  • Grafana 告警需在面板或独立告警规则中配置,数据源必须是其支持的(Prometheus、Mimir、Loki 等),且触发逻辑走 Grafana 后端

写好 PromQL 告警规则:别让误报毁掉可信度

高频误报往往源于 PromQL 表达式没考虑时间窗口、实例差异或瞬时抖动。几个关键点:

  • rate()irate() 计算速率,别直接比原始计数器(如 node_network_receive_bytes_total
  • 聚合前先加 label 过滤,避免跨节点/服务误合并(例如加 {job="node-exporter", instance=~"prod-.*"}
  • 给 CPU、内存等基础指标留出缓冲空间,比如 “持续 3 分钟 > 92%” 比 “> 90%” 更稳,用 count_over_time(your_condition[3m]) == 3 实现
  • 对磁盘使用率这类缓慢增长指标,用 node_filesystem_avail_bytes / node_filesystem_size_bytes 比固定字节数更合理

Alertmanager 分组与静默:让运维不被消息淹没

一个宿主机宕机,可能同时触发 CPU、内存、网络、进程多个告警——全发出来就是噪音。靠 group_byinhibit_rules 控制节奏:

  • group_by: [alertname, job, instance] 把同实例的同类告警压成一条
  • 设置 group_wait: 30s(首次发前等)、group_interval: 5m(后续同组再发间隔)、repeat_interval: 4h(彻底静默前重复提醒)
  • 用抑制规则(inhibition)让高优先级告警压制低优先级:比如 instance_down 触发后,自动抑制该实例上所有 node_disk_io_time_seconds_total 告警
  • 日常维护前,用 Alertmanager ui 或 API 创建临时静默(silence),按标签匹配,精确到分钟级

对接真实通知渠道:微信钉钉飞书不能只靠 webhook

原生 Alertmanager 只支持 email、PagerDuty、Slack 等。国内常用 IM 工具需自建中转:

告警不是设完就完的事——要定期清理失效规则、校准阈值、回溯漏报案例、更新联系人列表。真正的稳定性,藏在每次告警之后的复盘里。

text=ZqhQzanResources