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

Prometheus告警触发后标签缺失问题求助

问题分析与解决

根本原因

你的告警规则中expr的聚合逻辑错误,导致job标签被意外丢弃:

expr: avg by (job) (100 - (100 * avg(irate(node_cpu_seconds_total{mode="idle", job="node_secure"}[1m]))))

内层的avg(irate(...))未指定聚合维度,会将所有标签(包括job、instance)全部聚合掉,生成一个无任何标签的单值时间序列。外层的avg by (job)无法从无标签序列中提取job标签,最终导致告警中的{{$labels.job}}为空。

解决方案

根据监控需求调整告警规则的expr,确保保留需要的标签:

方案1:按job聚合平均CPU使用率(保留job标签)

修改alert_rules.yml中的expr为:

expr: avg by (job) (100 - 100 * irate(node_cpu_seconds_total{mode="idle", job="node_secure"}[1m])) > 90
  • 直接对每个job+instance的空闲CPU使用率做速率计算,再按job求平均值,最后判断是否超过90%
  • 聚合后会保留job标签,告警中的{{$labels.job}}可正常显示

方案2:监控单个实例的CPU使用率(保留job和instance标签)

若需监控每个服务器实例的CPU使用率,修改expr为:

expr: 100 - 100 * irate(node_cpu_seconds_total{mode="idle", job="node_secure"}[1m]) > 90
  • 不对实例做聚合,每个instance的超标情况都会触发独立告警
  • 告警中会同时保留job和instance标签,{{$labels.instance}}也能正常显示

额外优化

将告警规则中的for值从10s改为1m,与描述中的“more than 1 minute”保持一致:

for: 1m

验证步骤

  1. 保存修改后的alert_rules.yml
  2. 重启Prometheus服务加载新规则
  3. 等待告警触发后,检查仪表盘或Alertmanager中的标签显示情况

内容的提问来源于stack exchange,提问作者Arno Van Brussel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:56:18