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

时间:2018-07-19 15:39:56

标签: monitoring prometheus health-monitoring prometheus-alertmanager pagerduty

情况:我安装了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

所需结果:

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

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

1 个答案:

答案 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

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