普罗米修斯警报中缺少标签
Missing labels in prometheus alerts
我在使用 Prometheus 警报规则时遇到问题。我设置了各种 cAdvisor 特定警报,例如:
- alert: ContainerCpuUsage
expr: (sum(rate(container_cpu_usage_seconds_total[3m])) BY (instance, name) * 100) > 80
for: 2m
labels:
severity: warning
annotations:
title: 'Container CPU usage (instance {{ $labels.instance }})'
description: 'Container CPU usage is above 80%\n VALUE = {{ $value }}\n LABELS: {{ $labels }}'
满足条件时,我可以在 Prometheus 的“警报”选项卡中看到警报,但是缺少一些标签,因此不允许 alertmanager 通过 Slack 发送通知。具体来说,我将自定义“env”标签附加到每个目标:
{
"targets": [
"localhost:8080",
],
"labels": {
"job": "cadvisor",
"env": "production",
"__metrics_path__": "/metrics"
}
}
但是当基于 cadvisor 指标的警报被触发时,标签是:警报名称、实例和严重性 - 没有作业标签,没有环境标签。
来自其他导出器 (f.e.node-exporter) 的所有其他警报工作正常并且标签存在。
这是因为您使用了sum
功能;它收集了所有存在的时间序列并将它们加在一起,摸索 BY (instance, name)
。如果您 运行 在 Prometheus 中执行相同的查询,您将看到 sum
只留下分组标签:
{instance="foo", name="bar"} 135.38819037447163
其他聚合方法,如 avg
、max
、min
等,以相同的方式工作。要恢复标签,只需将 env
添加到分组列表:by (instance, name, env)
.
我在使用 Prometheus 警报规则时遇到问题。我设置了各种 cAdvisor 特定警报,例如:
- alert: ContainerCpuUsage
expr: (sum(rate(container_cpu_usage_seconds_total[3m])) BY (instance, name) * 100) > 80
for: 2m
labels:
severity: warning
annotations:
title: 'Container CPU usage (instance {{ $labels.instance }})'
description: 'Container CPU usage is above 80%\n VALUE = {{ $value }}\n LABELS: {{ $labels }}'
满足条件时,我可以在 Prometheus 的“警报”选项卡中看到警报,但是缺少一些标签,因此不允许 alertmanager 通过 Slack 发送通知。具体来说,我将自定义“env”标签附加到每个目标:
{
"targets": [
"localhost:8080",
],
"labels": {
"job": "cadvisor",
"env": "production",
"__metrics_path__": "/metrics"
}
}
但是当基于 cadvisor 指标的警报被触发时,标签是:警报名称、实例和严重性 - 没有作业标签,没有环境标签。 来自其他导出器 (f.e.node-exporter) 的所有其他警报工作正常并且标签存在。
这是因为您使用了sum
功能;它收集了所有存在的时间序列并将它们加在一起,摸索 BY (instance, name)
。如果您 运行 在 Prometheus 中执行相同的查询,您将看到 sum
只留下分组标签:
{instance="foo", name="bar"} 135.38819037447163
其他聚合方法,如 avg
、max
、min
等,以相同的方式工作。要恢复标签,只需将 env
添加到分组列表:by (instance, name, env)
.