Monitoring 普罗米修斯警报中缺少标签

Monitoring 普罗米修斯警报中缺少标签,monitoring,prometheus,prometheus-alertmanager,cadvisor,Monitoring,Prometheus,Prometheus Alertmanager,Cadvisor,我对普罗米修斯的警报规则有意见。我设置了各种特定于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

我对普罗米修斯的警报规则有意见。我设置了各种特定于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 }}'
当条件满足时,我可以在普罗米修斯的“警报”选项卡中看到警报,但是缺少一些标签,因此不允许alertmanager通过Slack发送通知。具体而言,我将自定义“环境”标签附加到每个目标:

 {
  "targets": [
   "localhost:8080",
  ],
  "labels": {
   "job": "cadvisor",
   "env": "production",
   "__metrics_path__": "/metrics"
  }
 }
但是,当基于cadvisor度量的警报触发时,标签是:alertname、instance和severity-无作业标签、无环境标签。
来自其他导出器(f.e.节点导出器)的所有其他警报工作正常,且标签存在。

这是由于您使用的
sum
函数;它收集了所有出现的时间序列,并通过(实例、名称)摸索添加它们。如果在Prometheus中运行相同的查询,您将看到
sum
只留下分组标签:

Element                                 Value
{instance="instance-id", name="foo"}    135.38819037447163
如果仅当标签为
env=production
的容器超过阈值时才需要警报,请将
env
添加到分组列表中。但通过这种方式,您将获得每个实例、每个名称、每个环境的CPU利用率


根据您的监控设置和目标,可能有更好的方法,您可以处理警报规则的静态值(以及
严重性
),甚至可以处理
外部标签
,或者,您可能需要修改alertmanager过滤警报的方式,以便即使没有丢失的
env
或其他标签也能收到警报。

谢谢!我已经将我的查询修改为:
(sum(rate(rate)(container\u cpu\u usage\u seconds\u total{name!=“”}[3m]),修改为(instance,name,env)*100)>80
,看起来它工作得很好。这个问题可以吗?老实说,我并不完全理解这一点:“但这样,每个实例、每个名称、每个环境的CPU利用率都会得到提高。”-为什么会出现这样的问题?假设在一台机器(实例)上有一个容器,其中包含
env=prod
,另一个容器包含
env=dev
。通过运行查询,您将获得
env=dev
env=prod
的不同CPU利用率。由于您这样做是为了只有
env=prod
可以触发警报,因此在
env=dev
占用计算机上的所有CPU资源时,您不会收到通知。换句话说,机器CPU利用率将在不同的
env
标签值之间分配。这是否是一个问题取决于您的环境中的运行方式,如果生产机器上除了
prod
之外没有其他
env
,那么这就没问题了。@dywan666超出了字符限制,请参见上文。感谢您解释这个问题,现在一切都清楚了。在我的设置中,不同环境中的容器是完全分离的,所以谢天谢地,这是可以的!但是,我会记住这一点,以备将来此设置发生更改。再次感谢您对此的详细解释@如果dywan666是在生产实例的作业配置中明确定义的,那么我认为应该可以。