【问题标题】:Prometheus AlertManager - Send Alerts to different clients based on routesPrometheus AlertManager - 根据路由向不同的客户端发送警报
【发布时间】:2018-12-31 07:21:06
【问题描述】:

我有 2 个服务 AB 我想监控。此外,我在 AlertManager 配置文件中有 2 个不同的通知渠道 XY,格式为 receivers

如果服务 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"

【问题讨论】:

    标签: monitoring prometheus prometheus-alertmanager


    【解决方案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 中的标签符合条件,则启用该配置。

    【讨论】:

    • 感谢您的快速解决方案。顺便说一句,我们可以使用基于标签的警报过滤而不是alertname吗?
    • 是的,您可以根据警报中的任何标签进行过滤。
    • 哪些版本支持这个?
    【解决方案2】:

    为了澄清 - 在 Prometheus(Alertmanager 和 Prometheus 集成)中处理警报的一般流程如下:

    SomeErrorHappenInYourConfiguredRule(Rule) -> RouteToDestination(Route) -> TriggeringAnEvent(Reciever)-> GetAMessageInSlack/PagerDuty/Mail/etc...

    例如:

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

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

    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 上添加这个 sn-p 以集成 alertmanager:

    global:
    
    ...
    
    alerting:
      alertmanagers:
      - scheme: http
        static_configs:
        - targets:
          - "alertmanager:9093"
    
    rule_files:
      - "yourRuleFile.yml"
    
    ...
    

    注意这个例子的重点是service_overload,它将规则连接和绑定到正确的接收器。

    重新加载配置(重新启动服务或停止并启动您的 docker 容器)并对其进行测试,如果配置良好,您可以在 http://your-prometheus-url:9090/alerts 中查看警报

    【讨论】:

      猜你喜欢
      • 2022-07-13
      • 2021-11-04
      • 2016-03-15
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      • 2019-06-21
      • 1970-01-01
      • 2021-12-11
      相关资源
      最近更新 更多