Prometheus重标记后告警规则未触发问题求助
排查步骤
1. 验证重标记后的指标是否存在
直接在Prometheus UI的查询框中输入container_memory_namespace_bytes执行查询:
- 若无任何返回结果,说明重标记配置未生效,问题出在metric_relabel环节;
- 若有返回结果,确认指标值是否确实大于0,以及时间序列是否连续。
2. 检查metric_relabel_configs配置问题
引号问题
你的配置中replacement字段使用了单引号:
replacement: 'container_memory_namespace_bytes'
Prometheus的YAML配置中字符串无需额外单引号,这可能导致生成的指标名实际为'container_memory_namespace_bytes'(带单引号),而非预期名称。修改为:
replacement: container_memory_namespace_bytes
配置作用范围确认
确保metric_relabel_configs定义在scrape_configs下对应job: kubernetes-cadvisor的配置块内,而非全局配置或其他job下——只有对应job的抓取数据才会应用该重标记规则。
正则匹配验证
确认regex: container_memory_.*_bytes确实匹配原始指标container_memory_usage_bytes,也可调整为更精确的container_memory_\w+_bytes,避免意外匹配其他指标。
3. 检查告警规则状态
- 进入Prometheus的Alerts页面,确认
test of relabeling规则已加载,无语法错误提示; - 查看规则当前状态:如果是
pending,说明指标刚满足条件,还未达到for: 1m的持续时间;如果始终是inactive,说明规则表达式未匹配到任何数据。
4. 查看Prometheus日志
检查Prometheus启动或运行时的日志,排查是否有以下错误:
- 重标记配置解析错误;
- 告警规则加载失败;
- 抓取
kubernetes-cadvisorjob时的异常。
5. 验证for语句的影响
若指标刚满足条件,需等待1分钟才会从pending转为firing。可临时将for: 1m改为for: 0s测试,看是否能立即触发告警,排除时间等待的影响。
内容的提问来源于stack exchange,提问作者Thais
相关产品推荐
相关产品推荐

