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 крайне интересный и полезный сервис, но стоимость и немного запутанный инфтерфейс – его минусы.