Monitoring Prometheus Alertmanager警报的复杂规则/过滤器

Monitoring Prometheus Alertmanager警报的复杂规则/过滤器,monitoring,prometheus,health-monitoring,prometheus-alertmanager,pagerduty,Monitoring,Prometheus,Health Monitoring,Prometheus Alertmanager,Pagerduty,情境:我有普罗米修斯和Alertmanager设置来监控各种设备的CPU温度。Alertmanager将警报从生产设备发送到PagerDuty 我监控的设备有不同的型号和不同的操作规范。型号1-5的正常CPU温度为50摄氏度,而型号6的正常CPU温度为70摄氏度。目前,CPU温度警报的阈值为60℃,因此PagerDuty不断从正常温度下运行的6型设备获取警报 如果温度低于80摄氏度,是否有办法仅从6型设备中过滤出cpu温度警报,并且在60摄氏度时仍能获得1-5型设备的cpu温度警报 注意:有许多

情境:我有普罗米修斯和Alertmanager设置来监控各种设备的CPU温度。Alertmanager将警报从生产设备发送到PagerDuty

我监控的设备有不同的型号和不同的操作规范。型号1-5的正常CPU温度为50摄氏度,而型号6的正常CPU温度为70摄氏度。目前,CPU温度警报的阈值为60℃,因此PagerDuty不断从正常温度下运行的6型设备获取警报

如果温度低于80摄氏度,是否有办法仅从6型设备中过滤出cpu温度警报,并且在60摄氏度时仍能获得1-5型设备的cpu温度警报

注意:有许多其他指标正在被监控,但对于除CPU温度以外的所有指标,所有设备型号都具有完全相同的阈值

下面是我的
alertmanager.yml
中的一个片段,它向PagerDuty发送产品警报

- match:
    stack_name: prod
    severity: critical
  receiver: PagerDuty
诚然,我没有太多的YML经验。但这正是我希望做的,但我不确定正确的语法:

- match:
    stack_name: prod
    severity: critical
    alertname: !device_cpu_temperature
  receiver: PagerDuty
- match:
    stack_name: prod
    severity: critical
    alertname: device_cpu_temperature
    uuid: !*6X*
  receiver: PagerDuty
- match: 
    stack_name: prod
    severity: critical
    alertname: device_cpu_temperature
    uuid: *6X*
    value: >80
  receiver: PagerDuty
预期结果:

  • 除设备cpu温度外的所有关键产品警报均发送至PagerDuty
  • 关键产品设备\u cpu\u温度警报仅在型号不是6时发送给PagerDuty(uuid包含型号,后跟“X”)
  • 仅当cpu温度高于80℃时,来自6型设备的关键产品设备cpu温度警报才会发送到PagerDuty

或者在普罗米修斯中有两种不同的警报规则会更好吗?某些规则只能应用于某些设备吗?如果是这样,怎么做?

在普罗米修斯中更容易创建不同的警报规则

实际上,警报管理器仅用于发送、分组、筛选等警报,而不是评估指标

您可以通过Prometheus配置中的两个不同警报来实现这一点,通过主机名或导出器提供的任何其他标签进行过滤

服务器1-5的表达式应如下所示:

 - alert: ServiceProbeFailed
   expr: cpu_temperature{hostname!~".*server_6.*"} > 50
以及服务器6的规则:

 - alert: ServiceProbeFailed
   expr: cpu_temperature{hostname=~".*server_6.*"} > 70

警报具有相同的名称,因此警报管理器的警报将是相同的。

效果非常好。太好了!我认为制定单独的规则比让Alertmanager进行过滤更容易,但我的印象是,在普罗米修斯无法做到这一点。我对您的答案做了一些细微的修改,以更正语法。