情况:我安装了Prometheus和Alertmanager来监控各种设备的CPU温度。 Alertmanager将警报从生产设备发送到PagerDuty。
我监视的设备具有不同的型号和不同的操作规格。 1-5型的正常CPU温度是50C,而6型的是70C。当前,CPU温度警报的阈值是60C,因此PagerDuty会不断从在正常温度下运行的Model 6设备获取警报。
如果温度低于80C,是否有办法仅从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
所需结果:
在Prometheus中设置2个不同的警报规则会更好吗?某些规则只能应用于某些设备吗?如果可以,怎么办?
答案 0 :(得分:4)
更容易的是在Prometheus中创建不同的警报规则。
实际上,警报管理器仅用于发送,分组,过滤等警报,而不用于评估指标。
您可以在Prometheus配置中使用两种不同的警报来实现此目的,并按主机名或导出器提供的任何其他标签进行过滤。
服务器1-5的表达式应如下所示:
- alert: ServiceProbeFailed
expr: cpu_temperature{hostname!~".*server_6.*"} > 50
服务器6的规则:
- alert: ServiceProbeFailed
expr: cpu_temperature{hostname=~".*server_6.*"} > 70
警报具有相同的名称,因此警报管理器将是相同的警报。