kube-prom-stack – інтеграція alertmanager з pagerduty

Опис

Пізнаємо 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”.

Вигляд самого треду:

Залишається звикати до даного підходу, вивчати та оптимізовувати.

Посилання по темі

Click to rate this post!
[Total: 0 Average: 0]