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

Max*_*Max 3 monitoring health-monitoring prometheus pagerduty prometheus-alertmanager

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

我监视的设备具有不同的型号,具有不同的操作规格。1-5型的正常CPU温度是50C,而6型的是70C。当前,CPU温度警报的阈值为60C,因此PagerDuty不断从在正常温度下运行的Model 6设备获取警报。

如果温度低于80C,有没有办法仅从6型设备中过滤出CPU温度警报,而在60C下仍能获得1-5型设备的CPU温度警报?

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

这是我的一个代码片段,alertmanager.yml它将产品警报发送到PagerDuty

- match:
    stack_name: prod
    severity: critical
  receiver: PagerDuty
Run Code Online (Sandbox Code Playgroud)

诚然,我没有很多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
Run Code Online (Sandbox Code Playgroud)

期望的结果:

  • 除device_cpu_temperature以外的所有关键产品警报都发送到PagerDuty
  • 仅当型号不是6时,严重的prod device_cpu_temperature警报才会发送到PagerDuty(uuid包含型号后跟“ X”)
  • 仅当CPU温度高于80C时,来自模型6设备的严重prod device_cpu_temperature警报才会发送到PagerDuty。

还是在Prometheus中设置两个不同的警报规则会更好?某些规则只能应用于某些设备吗?如果是这样,怎么办?

Ign*_*lán 6

比较容易的是在Prometheus中创建不同的警报规则。

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

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

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

 - alert: ServiceProbeFailed
   expr: cpu_temperature{hostname!~".*server_6.*"} > 50
Run Code Online (Sandbox Code Playgroud)

服务器6的规则:

 - alert: ServiceProbeFailed
   expr: cpu_temperature{hostname=~".*server_6.*"} > 70
Run Code Online (Sandbox Code Playgroud)

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