Prometheus-Alertmanager 警报的复杂 rules/filters

Complex rules/filters for Prometheus-Alertmanager Alerts

情况:我设置了 Prometheus 和 Alertmanager 来监控 CPU 各种设备的温度等。 Alertmanager 将警报从生产设备发送到 PagerDuty。

我监控的设备有不同的型号和不同的操作规格。型号 1-5 的正常 CPU 温度为 50C,而型号 6 为 70C。目前 CPU 温度警报的阈值是 60C,因此 PagerDuty 不断收到来自在正常温度下运行的 6 型设备的警报。

如果温度低于 80C,是否可以过滤掉仅来自 6 型设备的 cpu 温度警报,并且在 60C 时仍会收到 1-5 型设备的 cpu 温度警报?

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

这是我的 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 个不同的警报规则会更好吗?某些规则是否只能应用于某些设备?如果可以,怎么做?

在 Prometheus 中创建不同的警报规则会更容易。

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

您可以在 Prometheus 配置中使用两个不同的警报来实现此目的,按主机名或导出器提供的任何其他标签进行过滤。

服务器 1-5 的表达式应该是这样的:

 - alert: ServiceProbeFailed
   expr: cpu_temperature{hostname!~".*server_6.*"} > 50

服务器 6 的规则:

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

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