簡體   English   中英

Prometheus AlertManager - 根據路由向不同客戶端發送警報

[英]Prometheus AlertManager - Send Alerts to different clients based on routes

我有 2 個要監控的服務AB。 此外,我在 AlertManager 配置文件中以receivers的形式有 2 個不同的通知通道XY。

我想送,服務A出現故障,並想服務B下降到通知Ÿ通知X。 我怎樣才能實現這個我的配置?

我的 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"

配置應該大致如下(未測試):

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中的標簽與條件匹配,則啟用該字段。

為了澄清 - 在 Prometheus 中處理警報的一般流程(Alertmanager 和 Prometheus 集成)是這樣的:

SomeErrorHappenInYourConfiguredRule( Rule ) -> RouteToDestination( Route ) -> TriggeringAnEvent( Reciever )-> 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 /數據/普羅米修斯堆棧/普羅米修斯/ 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM