Prometheus AlertManager-根据路由将警报发送到不同的客户端

时间:2018-07-23 19:01:46

标签: monitoring prometheus prometheus-alertmanager

我有两个要监视的不同的服务 A B 。另外,我在AlertManager配置文件中以receivers的形式有2个不同的通知通道 X Y

如果服务 A 发生故障,我想发送通知 X ,如果服务 B 我想通知 Y >掉下来。如何实现我的配置?

我的AlertManager YAML文件是:

route:
  receiver: X

receivers:
  - name: X
    email_configs:

  - name: Y
    email_configs:

alert.rule文件是:

groups:

- name: A
  rules:
    - alert: A_down
      expr: expression
      for: 1m
      labels:
         severity: critical
      annotations:
         summary: "A is down"

- name: B
  rules:
    - alert: B_down
      expr: expression
      for: 1m
      labels:
        severity: warning
      annotations:
        summary: "B is down"

2 个答案:

答案 0 :(得分:1)

配置应大致如下所示(未经测试):

route:
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 2h

  receiver: 'default-receiver'

  routes:
  - match:
      alertname: A_down
    receiver: X
  - match:
      alertname: B_down
    receiver: Y

这个想法是,每个route字段都可以有一个routes字段,您可以在其中放置一个不同的配置,如果match中的标签符合条件,该配置就会启用。 / p>

答案 1 :(得分:1)

为了澄清-用于处理Prometheus(Alertmanager和Prometheus集成)中的警报的 General Flow 像这样:

  

SomeErrorHappenInYourConfiguredRule( Rule )-> RouteToDestination( Route )   -> TriggeringAnEvent(收件人)-> GetAMessageInSlack / PagerDuty / Mail / etc ...

例如:

  

如果我的AWS机器集群production-a1发生故障,我想触发一个事件,向我的团队发送“ pagerDuty”和“ Slack”,并显示相关错误。

有3个重要的文件可在Prometheus系统上配置警报:

  1. alertmanager.yml-您的路线配置(获取触发 错误)和接收者(如何处理此错误)
  2. rules.yml-此规则将包含所有阈值和规则 您将在系统中定义。
  3. prometheus.yml-全局配置,用于将规则集成到路由和接收器中(上述两个)。

我要附加一个虚拟示例,以演示该想法,在此示例中,我将观察机器中的过载情况(使用安装在其上的节点导出器): 在/var/data/prometheus-stack/alertmanager/alertmanager.yml

global:
  # The smarthost and SMTP sender used for mail notifications.
  smtp_smarthost: 'localhost:25'
  smtp_from: 'JohnDoe@gmail.com'

route:
  receiver: defaultTrigger
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 6h
  routes:
  - match_re:
      service: service_overload
      owner: ATeam
    receiver: pagerDutyTrigger

receivers:
- name: 'pagerDutyTrigger'
  pagerduty_configs:
  - send_resolved: true
    routing_key: <myPagerDutyToken>

在/var/data/prometheus-stack/prometheus/yourRuleFile.yml

上添加一些规则
groups:
- name: alerts
  rules:
  - alert: service_overload_more_than_5000
    expr: (node_network_receive_bytes_total{job="someJobOrService"} / 1000) >= 5000
    for: 10m
    labels:
      service: service_overload
      severity: pager
      dev_team: myteam
    annotations:
      dev_team: myteam
      priority: Blocker
      identifier: '{{ $labels.name }}'
      description: 'service overflow'
      value: '{{ humanize $value }}%'

在/ var / data / prometheus-stack / prometheus / prometheus.yml 上,添加以下代码片段以集成alertmanager:

global:

...

alerting:
  alertmanagers:
  - scheme: http
    static_configs:
    - targets:
      - "alertmanager:9093"

rule_files:
  - "yourRuleFile.yml"

...

请注意,此示例的关键点是 service_overload ,它将规则连接并绑定到正确的接收者。

重新加载配置(再次重新启动服务或停止并启动docker容器)并进行测试,如果配置正确,则可以在http://your-prometheus-url:9090/alerts中查看警报