sentry – відправка сповіщень в telegram

Опис

В попередньій статті  sentry – огляд та встановлення self-hosted версії на Amazon Linux було піднято selfhosted версію sentry, та перевірили роботу за допомогою тестового Python проекту.

Тепер потрібно налаштувати відправку сповіщень. Історично склалося що розробники не дуже полюбили slack та користуються додатковим месенджером як Telegram для отримання нотифікацій.  Виникло завдання налаштування інтеграції саме з ним.

На старих версіях сентрі  (8 – 9 і) чудово з даним завданням справлявся плагін sentry-telegram==0.4.0, проте починаючи з версій 15+ він перестає працювати. Офіційної підтримки з боку розробників сентрі даного плагіну немає, на околицях GitHub було знайдено більш новішу версію плагіну sentry-telegram-py3 яка повинна працювати на нових версіях.

Тестувати будемо на  Sentry-22.11.0.

Налаштування

Перед початком налаштування потрібно зробити наступне:

  • створити телеграм бота використавши botfather.
  • створити канал, додати до нього бота, щоб була змога відправляти туди сповіщення.
  • отримати Token та ID-каналу до якого додано Бот.
    • щоб дізнатися ID-каналу відправте будь-яке повідомлення в канал.
    • відкрийте посилання https://api.telegram.org/bot<BOT_TOKEN>/getUpdates в браузері або скористайтесь curl-ом:
      ❯ curl https://api.telegram.org/bot542535******************/getUpdates | jq
      ...
      "chat": {
         "id": -71*******, << chat ID
         "title": "**************",
         "type": "group",
         "all_members_are_administrators": true
      },
      ...

Встановлення плагіну

В версіях 22+ було внесено зміни, тепер для встановлення додаткових компонентів потрібно вносити зміни в файл enhance-image.sh, знаходиться він в директорії ./sentry/sentry разом з іншими конфігураційними файлами. Редагуємо файл, доддаємо в нього деякі допоміжні пакети та сам плагін:

#!/bin/bash

# Enhance the base $SENTRY_IMAGE with additional dependencies, plugins - see https://github.com/getsentry/self-hosted#enhance-sentry-image
# For example:
apt-get update
apt-get install -y gcc libsasl2-dev python-dev libldap2-dev libssl-dev
pip install sentry-telegram-py3

після чого в корені директорії sentry запускаємо скрипт install.sh, який перезбере проект і встановить необхідні пакети:

bash install.sh
/opt/sentry/.env: line 8: SENTRY_ORG:: command not found
▶ Parsing command line ...

▶ Detecting Docker platform
Detected Docker platform is linux/amd64

▶ Initializing Docker Compose ...
.......

якщо все зробили вірно та не було помилок, після встановлення в виводі запропонує запустити docker-compose:

▶ Setting up GeoIP integration ...
Setting up IP address geolocation ...
IP address geolocation database already exists.
IP address geolocation is not configured for updates.
See https://develop.sentry.dev/self-hosted/geolocation/ for instructions.
Error setting up IP address geolocation.


-----------------------------------------------------------------

You're all done! Run the following command to get Sentry running:

  docker-compose up -d

-----------------------------------------------------------------

сервіс піднімаєтсья не швидко, доведеться почекати 1-2хв доки всі компоненти запустяться й сервіс стане активним, запускаємо:

❯ docker-compose up -d
WARNING: Python-dotenv could not parse statement starting at line 8
Starting sentry-self-hosted_memcached_1            ... done
Starting sentry-self-hosted_postgres_1             ... done
Starting sentry-self-hosted_symbolicator_1         ... done
Starting sentry-self-hosted_zookeeper_1            ... done
Starting sentry-self-hosted_redis_1                ... done
Starting sentry-self-hosted_smtp_1                 ... done
Recreating sentry-self-hosted_clickhouse_1         ... done
Creating sentry-self-hosted_symbolicator-cleanup_1 ... done
Creating sentry-self-hosted_geoipupdate_1          ... done
Starting sentry-self-hosted_kafka_1                ... done
Recreating sentry-self-hosted_snuba-transactions-consumer_1              ... done
Recreating sentry-self-hosted_snuba-consumer_1                           ... done
Recreating sentry-self-hosted_snuba-subscription-consumer-transactions_1 ... done
Creating sentry-self-hosted_snuba-transactions-cleanup_1                 ... done
Creating sentry-self-hosted_snuba-cleanup_1                              ... done
Recreating sentry-self-hosted_snuba-api_1                                ... done
Recreating sentry-self-hosted_snuba-sessions-consumer_1                  ... done
Recreating sentry-self-hosted_snuba-replacer_1                           ... done
Recreating sentry-self-hosted_snuba-subscription-consumer-events_1       ... done
Recreating sentry-self-hosted_snuba-outcomes-consumer_1                  ... done
Creating sentry-self-hosted_worker_1                                     ... done
Creating sentry-self-hosted_sentry-cleanup_1                             ... done
Creating sentry-self-hosted_post-process-forwarder-transactions_1        ... done
Creating sentry-self-hosted_subscription-consumer-transactions_1         ... done
Creating sentry-self-hosted_ingest-consumer_1                            ... done
Creating sentry-self-hosted_post-process-forwarder-errors_1              ... done
Creating sentry-self-hosted_web_1                                        ... done
Creating sentry-self-hosted_cron_1                                       ... done
Creating sentry-self-hosted_subscription-consumer-events_1               ... done
Creating sentry-self-hosted_relay_1                                      ... done
Creating sentry-self-hosted_nginx_1                                      ... done

Переходимо до налаштування плагіну.

Налаштування інтеграції з telegram

Відкриваємо веб-сторінку Sentry. Cпочатку потрібно активувати плагін.  Для цього обираємо проект (python), переходимо в нього,  далі з правого боку пірнаємо в налаштування проекту:

З лівого боку натискаємо на Legacy Integration,  в списку шукаємо встановлений плагін,  далі активовуємо його:

після активації потрібно налаштувати, переходимо в гору, в полі Projects обираємо Alert setting, бачимо вікно TELEGRAM NOTIFICATIONS PYTHON3 яке потрібо заповнити:

де:

  • Telegram API origin – посилання на API телеграму.
  • BotAPI Token – токен створеного бота.
  • Receivers – тут потрібно додати ID каналу телеграм.

додаємо необхідні данні та пробуємо відправити тестове сповіщення:

після додавання, натискання кнопку Test Plugin, в телеграм повинно надійти повідомлення:

Тестове повідомлення отримали, залишається перевірити відправку саме через Alerts Rules Sentry.

 

Налаштування Alerts

Детальніше про сповіщення читаємо тут.

В налаштуванні проекту, з правого боку натискаємо Create Alert:

 

 

 

після чого обираємо Issue,  далі натискаємо Set Conditions:

далі заповнюємо:

де:

  • Set Environment and Projects – обираємо певну змінну або всі,  вказуємо проект (вже обраний)
  • Set conditions
    • when – (коли отримувати сповіщення) обираємо any, вказуємо три базові умови як на зображенні.
    • if – (додаткові умови) пропускаємо (для нас зараз це не актуально).
    • then – (що будемо робити коли отримали сповіщення) обираємо  Send a notification via (Telegram Notification Python3) наш встановлений плагін.
  • Set action interval – виставимо 5 хв.
  • Add a name and owner – вказуємо назву правила та власника.

Тут помітив дрібничку, буває що трігери не відпрацьовують нормально і доводиться правити alert rule, стосується саме поля when, де ми можемо обрати any або all:

при ручному тестуванні довелося обрати any (тому що Issue створювались а Alert не triggered та сповіщення в телеграм не надходили), в інших правилах обрано all й повідомлення відправляються. Тож варто звертати на це увагу!! Зберігаємо створене правило та переходимо до перевірки.

Перевірка роботи плагіну

Використавши інтерпритатор python створимо нове issue:

❯ python3
Python 3.10.8 (main, Oct 21 2022, 22:22:30) [Clang 14.0.0 (clang-1400.0.29.202)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sentry_sdk
>>> sentry_sdk.init("http://23e907********************@sentry-test.example.com/2")
>>> sentry_sdk.capture_message("TEST ALERT FROM SENTRY TO TELEGRAM")

перевіримо в  sentry:

та нотифікацію в телеграм:

Як бачимо – працює.  Розробники будуть задоволені а ми спокійніші).

Click to rate this post!
[Total: 1 Average: 5]