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

Monitoring Prometheus AlertManager-根据路由向不同的客户端发送警报,monitoring,prometheus,prometheus-alertmanager,Monitoring,Prometheus,Prometheus Alertmanager,我有两个服务A和B,我想监控它们。此外,我在AlertManager配置文件中有两个不同的通知通道X和Y,形式为receivers 如果服务A停止,我想发送通知X,如果服务B停止,我想发送通知Y。如何在我的配置中实现这一点 我的AlertManager YAML文件是: route: receiver: X receivers: - name: X email_configs: - name: Y email_configs: 和警报。规则文件是: groups

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

如果服务A停止,我想发送通知X,如果服务B停止,我想发送通知Y。如何在我的配置中实现这一点

我的AlertManager YAML文件是:

route:
  receiver: X

receivers:
  - name: X
    email_configs:

  - name: Y
    email_configs:
警报。规则文件是:

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"

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


其思想是,每个字段都可以有一个
路由
字段,您可以在其中放置不同的配置,如果
中的标签匹配
的条件,则该配置将被启用。

为了澄清-普罗米修斯(Alertmanager和普罗米修斯集成)中处理警报的通用流程如下所示:

您的配置文件(规则)->RouteToDestination(路由)发生了一些错误 ->触发事件(接收器)->GetAMessageInSlack/PagerDuty/Mail/etc

例如:

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

在普罗米修斯系统上配置警报有3个重要文件:

  • alertmanager.yml-配置您的路由(获取 错误)和接收器(如何处理此错误)
  • rules.yml-此规则将包含所有阈值和规则 您将在系统中定义
  • 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>
    
    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"
    
    ...
    
    请注意,本例的关键点是服务\u重载,它将规则连接并绑定到正确的接收器中


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

    谢谢您的快速解决方案。顺便问一下,我们是否可以使用基于标签的警报过滤而不是
    alertname
    ?是的,您可以基于警报中的任何标签进行过滤。哪些版本支持此功能?
    global:
    
    ...
    
    alerting:
      alertmanagers:
      - scheme: http
        static_configs:
        - targets:
          - "alertmanager:9093"
    
    rule_files:
      - "yourRuleFile.yml"
    
    ...