Prometheus AlertManager - отправка предупреждений разным клиентам в зависимости от маршрутов.

У меня есть 2 службы A и B, которые я хочу отслеживать. Также у меня есть 2 разных канала уведомлений X и Y в виде receivers в файле конфигурации AlertManager.

Я хочу отправить уведомление X, если служба A выходит из строя, и хочу уведомить Y, если служба B не работает . Как я могу добиться этой моей конфигурации?

Мой YAML-файл AlertManager:

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"

person Janshair Khan    schedule 23.07.2018    source источник


Ответы (2)


Конфигурация должна выглядеть примерно так (не тестировалось):

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 соответствуют условию.

person svenwltr    schedule 23.07.2018
comment
Спасибо за быстрое решение. Кстати, можем ли мы использовать фильтрацию предупреждений на основе ярлыков, а не alertname? - person Janshair Khan; 24.07.2018
comment
Да, вы можете фильтровать по любой метке в предупреждении. - person svenwltr; 24.07.2018
comment
Какие версии это поддерживают? - person Shell_Leko; 05.11.2018

Для пояснения - Общий поток для обработки предупреждений в Prometheus (Alertmanager и интеграция Prometheus) выглядит следующим образом:

SomeErrorHappenInYourConfiguredRule (Правило) -> RouteToDestination (Маршрут) -> TriggeringAnEvent (Получатель) -> GetAMessageInSlack / PagerDuty / Mail / и т. Д.

Например:

если мой кластер машин aws production-a1 не работает, я хочу вызвать событие, отправляющее моей команде "pagerDuty" и "Slack" с соответствующей ошибкой.

Для настройки предупреждений в вашей системе Prometheus важны 3 файла:

  1. alertmanager.yml - конфигурация ваших маршрутов (получение сработавших ошибок) и получателей (как обрабатывать эти ошибки)
  2. rules.yml - эти правила будут содержать все пороговые значения и правила, которые вы определите в своей системе.
  3. prometheus.yml - глобальная конфигурация для интеграции ваших правил в маршруты и приемники вместе (два выше).

Я прилагаю фиктивный пример. Чтобы продемонстрировать идею, в этом примере я буду наблюдать перегрузку на моем компьютере (используя установленный на нем экспортер узлов): On / var / data / prometheus-stack / alertmanager / alertmanager .yml

global:
  # The smarthost and SMTP sender used for mail notifications.
  smtp_smarthost: 'localhost:25'
  smtp_from: '[email protected]'

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, который подключает и привязывает правило к нужному получателю.

Перезагрузите конфигурацию (снова перезапустите службу или остановите и запустите контейнеры докеров) и протестируйте ее. Если она настроена правильно, вы можете просматривать предупреждения в http://your-prometheus-url:9090/alerts

person avivamg    schedule 03.10.2019