Prometheus-Alertmanager 警报的复杂规则/过滤器
Posted
技术标签:
【中文标题】Prometheus-Alertmanager 警报的复杂规则/过滤器【英文标题】:Complex rules/filters for Prometheus-Alertmanager Alerts 【发布时间】:2018-12-27 20:06:04 【问题描述】:情况:我设置了 Prometheus 和 Alertmanager 来监控各种设备的 CPU 温度等。 Alertmanager 将警报从生产设备发送到 PagerDuty。
我监控的设备有不同的型号和不同的操作规格。型号 1-5 的正常 CPU 温度为 50C,而型号 6 为 70C。目前 CPU 温度警报的阈值是 60C,因此 PagerDuty 不断收到来自在正常温度下运行的 6 型设备的警报。
如果温度低于 80 摄氏度,是否有办法仅过滤掉来自 6 型设备的 cpu 温度警报,并且在 60 摄氏度时仍会收到 1-5 型设备的 cpu 温度警报?
注意:还有许多其他指标正在被监控,但对于除 CPU 温度之外的所有指标,所有设备型号都具有完全相同的阈值。
这是来自我的alertmanager.yml
的 sn-p,它向 PagerDuty 发送 prod 警报
- 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
期望的结果:
除 device_cpu_temperature 外的所有关键 prod 警报都发送到 PagerDuty 仅当型号不是 6(uuid 包含型号后跟“X”)时,才会向 PagerDuty 发送关键 prod device_cpu_temperature 警报 仅当 CPU 温度高于 80C 时,来自 6 型设备的关键 prod device_cpu_temperature 警报才会发送到 PagerDuty。或者在 prometheus 中设置 2 个不同的警报规则会更好吗?某些规则能否仅适用于某些设备?如果有,怎么做?
【问题讨论】:
【参考方案1】:在 Prometheus 中创建不同的警报规则会更容易。
实际上,警报管理器仅用于发送、分组、过滤等警报,而不是评估指标。
您可以通过 Prometheus 配置中的两个不同警报实现此目的,按主机名或导出器提供的任何其他标签进行过滤。
服务器 1-5 的表达式应该是这样的:
- alert: ServiceProbeFailed
expr: cpu_temperaturehostname!~".*server_6.*" > 50
服务器 6 的规则:
- alert: ServiceProbeFailed
expr: cpu_temperaturehostname=~".*server_6.*" > 70
警报具有相同的名称,因此警报管理器将是相同的警报。
【讨论】:
工作就像一个魅力。特维姆!我认为制定单独的规则比让 Alertmanager 进行过滤更容易,但我的印象是在 Prometheus 中无法做到这一点。 我对你的回答做了一些细微的修改以更正语法。以上是关于Prometheus-Alertmanager 警报的复杂规则/过滤器的主要内容,如果未能解决你的问题,请参考以下文章