Monitoring Prometheus Alertmanager警报的复杂规则/过滤器
情境:我有普罗米修斯和Alertmanager设置来监控各种设备的CPU温度。Alertmanager将警报从生产设备发送到PagerDuty 我监控的设备有不同的型号和不同的操作规范。型号1-5的正常CPU温度为50摄氏度,而型号6的正常CPU温度为70摄氏度。目前,CPU温度警报的阈值为60℃,因此PagerDuty不断从正常温度下运行的6型设备获取警报 如果温度低于80摄氏度,是否有办法仅从6型设备中过滤出cpu温度警报,并且在60摄氏度时仍能获得1-5型设备的cpu温度警报 注意:有许多其他指标正在被监控,但对于除CPU温度以外的所有指标,所有设备型号都具有完全相同的阈值 下面是我的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.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进行过滤更容易,但我的印象是,在普罗米修斯无法做到这一点。我对您的答案做了一些细微的修改,以更正语法。