OpsGenie — сервис, позволяющий настроить отправку уведомлений на почту, в Slack, SMS и умеющий выполнять звонки при возникновении алерта.
Кроме того — у него есть мобильные приложения для Android и iOS.
Сейчас у нас нотификации отправляются только в Slack, через slack_configs Alertmanager-а, но этого явно мало, особенно если ночью упадёт какой-то критичный сервис.
Собственно, задачей будет настроить отправку из Alertmanager нотификаций по различным уровням важности:
- только в Slack при уровне info
- в Slack, на почту и в приложение на телефоне — при уровне warning
- и везде, плюс звонок на мобильный — при уровне critical
У OpsGenie, как по мне, немного запутанный интерфейс, но если с ним разобраться — то его возможности приятно радуют.
Кроме того — много ограничений связано с планом подписки. Самый дешёвый ариант стоит 19 уе/мес за 1 пользователя, более адекватный — 29 уе/мес за 1 пользователя. Цены и описание пакетов есть тут>>>.
Примеры ниже созданы в пакете Standard.
Содержание
OpsGenie
Notifications
Регистрируемся в системе, и настраиваем профиль.
После первоначальной настройки — переходим в Notifications, и задаём номер мобильного для SMS и звонков:
Там же есть ссылка на мобильное приложение — устанавливаем его, логинимся, используя почту и свой пароль, и устройство появится в Mobile App.
На телефоне оно выглядит так:
При установке приложения — оно запросит разрешение на нотификации в беззвучном режиме телефона, что категорически рекомендуется, дабы не проспать алерты.
Notification Rules
Далее прокручиваем ниже, и в Notification Rules задаём правила уведомлений.
Alertmanager будет слать все уведомления в Slack + OpsGenie.
В OpsGenie опять сталкиваемся с ограничениями пакетов — что бы иметь возможность создавать несколько правил — требуется план минимум Standart, в Essentials вы ограничены одним правилом.
У меня будет два правила — одно при уровне алерта warning (P3) будет слать уведомление в приложение на телефон + почта:
И второе правило — при уровне critical (P1) — будет дополнительно выполнять звонок на мобильный, если в течении 10 минут алерт не был закрыт:
Всё вместе:
Team
Далее — создаём Team:
Во вкладке Members добавляем обоих пользователей:
Prometheus integration
Переходим в Intergrations, находим Prometheus:
Получаем API ключ:
Escalation
После создания Team OpsGenie создаёт правила по умолчанию. Редактируем их под свои нужды.
Эскалация описывает правила по отправке уведомлений:
Тут сначала уведомления об алертах отправляются мне (юзер Mobile), если в течении 15 минут я не среагировал (проспал, например) — то будет отправлено уведомление нашему бекенд-девелоперу.
Далее в On-Call Schedules задаём Rotations — кто будет ответственным за алерты.
В данном случае — большой группы саппорта у нас нет, поэтому добавляем обоих пользователей «навечно».
Жмём Add rotation, добавляем первого пользователя:
И второго пользователя во втором правиле:
Вместе все правила команды выглядят сейчас так:
Alertmanager и роуты
alert.rules
Используем тестовые правила:
- alert: NodeLowRootDiskInfoTest
expr: ((node_filesystem_size_bytes{mountpoint="/rootfs"} - node_filesystem_free_bytes{mountpoint="/rootfs"} ) / node_filesystem_size_bytes{mountpoint="/rootfs"} * 100) < 50
for: 1s
labels:
severity: info
annotations:
summary: 'Low root disk space'
description: '{{$labels.env}}: Data disk usage is above 50%. Current value is {{ $value | humanize }}%.'
- alert: NodeLowRootDiskWarningTest
expr: ((node_filesystem_size_bytes{mountpoint="/rootfs"} - node_filesystem_free_bytes{mountpoint="/rootfs"} ) / node_filesystem_size_bytes{mountpoint="/rootfs"} * 100) < 75
for: 1s
labels:
severity: warning
annotations:
summary: 'Low root disk space'
description: '{{$labels.env}}: Data disk usage is above 75%. Current value is {{ $value | humanize }}%.'
- alert: NodeLowRootDiskCriticalTest
expr: ((node_filesystem_size_bytes{mountpoint="/rootfs"} - node_filesystem_free_bytes{mountpoint="/rootfs"} ) / node_filesystem_size_bytes{mountpoint="/rootfs"} * 100) < 95
for: 1s
labels:
severity: critical
annotations:
summary: 'Low root disk space'
description: '{{$labels.env}}: Data disk usage is above 95%. Current value is {{ $value | humanize }}%.'
От реальных правил их отличает проверка условия — «<» вместо «>«.
В самом условии ((node_filesystem_size_bytes{mountpoint="/rootfs"} - node_filesystem_free_bytes{mountpoint="/rootfs"} ) / node_filesystem_size_bytes{mountpoint="/rootfs"} * 100) вычисляется % занятого места на корневом диске, и если это значение меньше 50, 75 и 95 (для теста, в нормальных тестах наоборот — если % занятого больше порога) — то в Prometheus будет срабатывать alert, который будет отправляться в Slack и OpsGenie.
Routes и receivers
Далее настраиваем alertmanager_config.yml:
global:
slack_api_url: https://hooks.slack.com/services/T08***vMb
opsgenie_api_key: e50***106
route:
group_by: ['alertname', 'cluster', 'job', 'env']
repeat_interval: 1h
group_interval: 5m
# default - send 'info' to Slack only
receiver: 'default'
routes:
# all 'warning' to the 'warning' receiver with P3
- match:
severity: warning
receiver: warning
# all 'critical' to the 'critical' receiver with P1
- match:
severity: critical
receiver: critical
receivers:
- name: 'default'
slack_configs:
- send_resolved: true
title: ":scream: {{ .CommonAnnotations.summary }}"
text: "{{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}"
- name: 'warning'
slack_configs:
- send_resolved: true
title: ":scream: {{ .CommonAnnotations.summary }}"
text: "{{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}"
opsgenie_configs:
- priority: P3
- name: 'critical'
slack_configs:
- send_resolved: true
title: ":scream: {{ .CommonAnnotations.summary }}"
text: "{{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}"
opsgenie_configs:
- priority: P1
Документация по Alertmanager — тут>>>, пример конфига — тут>>>.
Тут:
- info: шлём только в Slack
- warning: Slack + OpsGenie с уровнем P3
- critical: Slack + OpsGenie с уровнем P1
Комментируем алерт рулы warning и critical, проверям info.
Алерт в Alertmanager:
Уведомление в Slack:
В OpsGenie ничего не пришло.
ОК, комментируем alert NodeLowRootDiskInfoTest, активируем NodeLowRootDiskWarningTest — теперь уведомление должно придти в Slack и OpsGenie с уровнем P3.
Сам алерт:
Slack:
OpsGenie:
Приложение на телефоне:
Почта:
И повторяем проверку, но теперь включаем алерт NodeLowRootDiskCriticalTest — что бы пришёл звонок:
OpsGenie:
Звонок идёт в Viber 🙂
Если звонок сбросить — то третий-четвёртый уже пойдут на обычный телефон.
Собственно, на этом и всё.
В целом OpsGenie крайне интересный и полезный сервис, но стоимость и немного запутанный инфтерфейс — его минусы.






















