Опис
Працюємо з kube-prom-stack використовуючи HELM та файл values.yaml
Пізнаємо PagerDuty та його особливості, настав час реалізовувати цікаві інтеграція для інформативності та централізованої точки сповіщень).
В минулому дописі ми налаштовували інтеграцію для Zabbix PagerDuty – налаштування інтеграції з zabbix цього разу робимо аналогічне але для Prometheus.
Ось так це має виглядати:

- Prometheus-alertmanager буде відправляти події в pagerduty.
- Pagerduty своєю чергою отримує їх, створює інцидент.
- Після чого відправлятиме сповіщення про інцидент в PagerDuty_Mobile_App та в Slack(через PD_SLACK_APP) (який є додатковим каналом оповіщення)
Існує два варіанти інтеграції:
- Інтеграція Event Orchestration
Гнучкий спосіб обробки подій та сповіщень. Дозволяє налаштовувати обробку вхідних повідомлень, автоматизувати реакцію на події(приклад: запуск скриптів для усунення проблеми після створення певної події), надає більше контролю над обробкою та керуванням подій. Проте є складнішим в налаштуванні та керуванні. - Інтеграція PagerDuty Service (обраний варіант)
Пряма інтеграція для підключення зовнішніх сервісів (інтеграція prometheus and pagerduty). Простий в налаштуванні та має обмежені можливості обробки і керування подіями.
План реалізації
- Спочатку інтегруємо prometheus з pagerduty та перевіримо працездатність.
- Далі налаштуємо відправку сповіщень в Slack як додатковий канал оповіщення.
Налаштування
PagerDuty Service Integration
Переходимо в PagerDuty Web, в верхній панелі обираємо Services > Service Discovery:

Після чого в правому кутку тиснемо “+New Service”:

В полі Name вказуємо імя сервісу a в Description додаткову інформацію про даний сервіс, тиснемо Next
:

Маємо змогу створити нову політику Ескалації або обрати наявну, в моєму випадку обираю наявну в полі “Select an existing Escalation Policy”, тиснемо Next:

Тут потрібно обрати сервіс з яким будемо налаштовувати інтеграцію, шукаємо Prometheus, тиснемо на нього, після чого кнопка Create Service стане активною, натискаємо на неї:

Спостерігаємо наступну інформацію, коротка інструкція, налаштування та інше. Нас цікавить Integration Key який розташований з правого боку, зберігаємо його:

Тепер інциденти відображаються в PagerDuty, приклад:

PagerDuty Slack Integration
Налаштування відбувається в розділі Extention. В верхньому полі обираємо Integrations > Extensions > New Extensions:

В “Extension type: обираємо “Slack Integration” а в “Service” обираємо підключену інтеграцію з Prometheus, тиснемо Save:

Після чого в верхньому полі обираємо Integration з лівого боку буде YOUR_INTEGRATION та обираємо “Slack Integration”:

Оновиться сторінка, в якій буде прохання авторизувати додаток, коли натиснете на кнопку відправить в SlackApp для його додавання. Після чого потрібно буде надати доступ до Вашого Workspace (стандартні процедури).
Після маніпуляцій з авторизацією маємо змогу налаштовувати додаток. Бачимо підключений Workspace, для детального перегляду тиснемо View:

Провалюємось в налаштування:

де:
- AuthorizedWorkspace – глобальні налаштування для робочого простору.
- Stop incident updates and action … – зупинити інциденти та оновлення для всіх команди, крім тих кому цей інцидент спрямований).
- Create a Slack thread for all incidents – відправляти оновлення по інциденту в тред (acknowledge/resolve/update/etc).
- Connections – налаштування підключень з сервісами.
- ***-***-PROMETHEUS(Service) – підключений сервіс який ми налаштовували.
- Add Connection – налаштування нового підключення в межах нашого Workspace.
Щоб переглянути додаткові налаштування сервісу ***-***-PROMETHEUS в правому кутку натискаємо на олівець:

де:
- PagerDytySource – сервіс інтеграції яки хочемо використовувати.
- SlackChannel – канал для відправки інцидентів та інших подій.
- NotificationType – тип нотифікацій. Зацікавлена сторона(Stakeholder) або Відповідальна(Responder). Мене цікавить Respoinder.
- NotifyTheChannelofTheseUpdates – повідомлення які хочемо отримувати.
- WhenTheIncedentMatchesTheseCriteria – критерії для інцидету (залишив за замовчуванням).
З цим розібрались, переходимо далі.
Налаштування prometheus
Відкриваємо values.yaml файл, шукаємо блок для налаштування alertmanager. Спочатку додамо новий routes:
routes:
- receiver: "pagerduty"
matchers:
- severity =~ "critical|warning|info" # приклад
далі шукаємо рядок receiver й створюємо новий:
- name: "pagerduty"
pagerduty_configs:
- send_resolved: true
http_config:
follow_redirects: true
service_key: "<PD_KEY>" # додаєсмо сюди ключ інтеграці
description: '{{ .CommonLabels.summary }}' # використовуючи go template можна будувати заголовок інциденту як Вам заманеться.
де:
- service_key: сюди додаємо pagerduty ключ інтеграції про який ми скопіювали з інтеграції.
- description: модифіковано назву інциденту, оскільки за замовчуванням повідомлення не дуже інформативне.
Після чого розгортаємо зміни використовуючи helm).
Трігерим будь-яке правило, перевіряємо slack:

де:
- Acknowledge – реагуємо на інцидент, якщо не підтвердити через виставлений період часу отримаємо дзвінок на мобільний (все залежить від правил налаштування ескалацій і сповіщень). Якщо це буде дзвінок, то відбуватиметься до тих пір, поки ми не відреагуємо на нього. В цьому і є особливості PagerDuty(дістати Вас).
- Resolve – закрити проблему
- Add a Note – описати додаткові нотатки до даної проблеми, наприклад що займаєтесь нею або це планові роботи.
- Mode actions – додаткові параметри такі як (оновити, ескалювати проблему на іншого і так далі)
Так виглядає сповіщення коли проблему вирішено, з нових повідомлень ми отримуємо тільки короткий додатковий меседж і змінений статус попереднього повідомлення на Resolved:

Для оптимізації в налаштуванні Workspace можемо ввімкнути “Create a Slack thread for all incidents”, тепер всі оновлення по інциденту будуть опинятися в треді:

- Після натискання Acknowledged з`явзяється змога створити канал для обговорення інциденту через кнопку “View | Create Channel”.
Вигляд самого треду:

Залишається звикати до даного підходу, вивчати та оптимізовувати.
Посилання по темі
- https://support.pagerduty.com/docs/slack-integration-guide
- https://www.pagerduty.com/docs/guides/prometheus-integration-guide/
- https://prometheus.io/docs/alerting/latest/configuration/