Найти в Дзене
Computer Pro

Освоить функционал Sentry, применить навыки по работе с Prometheus и Grafana

Оглавление

Продолжение работы с логгированием в проектах Flask. Если быть точным - ещё несколько инструментов, помогающих отслеживать ошибки, активность пользователей в наших приложениях.

Это конспект по домашней работе с 24 модулем курса "python_advanced", здесь не всё чётко и красиво ибо я сам остался далёк от полного понимания того что нужно сделать и почему, скажем, в лекциях у лектора всё работало а я повторил тоже самое - у меня не работает. Спросил в чате - спасибо что не послали по известному адресу...

Задание 1. Sentry

1. Авторизуйтесь на sentry.io.
2. Настройте систему оповещений на почту.
3. Настройте интеграцию с GitLab/GitHub.

Казалось бы, всё просто, нужно лишь повторить всё тоже что и в лекции 24.3 что собственно я и сделал. Зарегался на sentry.io, получил ключ, собрал приложение, полученный ключ вставил в приложение:

Проверил все эндпойнты, всё работает как и должно, по каждой ошибке приходят оповещения, те ошибки, которые повторяются, не создают новых событий а просто увеличивают счетчик ошибок.

-2

Настройка email, можно добавить множество адресов электронной почты на которую будут приходить письма с оповещениями:

-3

Ну и как выглядит письмо от sentry:

-4

А вот по поводу интерграции с GitLab/GitHub я так и не понял зачем это делается, но нашел несколько решений в интернете которые у меня не заработали. Дошел до пункта добавить приложение и куда дальше - не понял:

-5

Написал по этому поводу куратору:

-6

Но он не ответил, лишь в ответ принял моё задание, в котором так и не была настроена интеграция с Гитлабом, в которой я так и не понял смысла, если кто-то это сделал - напишите в комментах зачем это нужно было делать.

Задание 2. Prometheus + Grafana

1. Разверните Prometheus, Flask app, Grafana с помощью Docker.
2. Во Flask-приложении создайте эндпоинт (контекст неважен) и подключите пакет prometheus_flask_exporter.
3. На эндпоинт добавьте декоратор метрики @metrics.counter(), которая будет хранить счётчик запросов и кодов ответа.
4. Постройте график в Grafana, используя метрику из пункта 3, сделав фильтр по коду ответа, равному 200.

В данном задании уже более понятно что к чему и как делать. Здесь нужно Flask-приложение которое будет иметь один тестовый эндпойнт который при определенных параметрах будет давать статус ответа 200 а при другом 500 (не 200). Самое простое - это деление на 0, если нуля нет то статус ответа будет 200, а если в эндпойнте присутствует 0 - то будет ошибка и сервер вернет статус 500.

-7

Если этот эндпойнт запустить просто из Pycharm, без использования докер-контейнера, то результат работы будет вот таким:

результат без 0 во втором параметре
результат без 0 во втором параметре

Попробуем с нулём во втором параметре:

Ожидаемо выскочила ошибка деления на ноль...
Ожидаемо выскочила ошибка деления на ноль...

Посмотрим http://127.0.0.1/metrics, какие там появились данные, касаемые нашего эндпойнта, а не всё подряд:

-10

Как видим, один ответ со статусом 200 и два ответа со статусом 500 (я дважды обращался к эдпойнту с неверными запросами, то есть нулём во втором параметре).

Ну а теперь всё это дело нужно просто упаковать в докер контейнер и запустить. Я всё повторил как в лекциях (24.4), только уже без генератора. Структура получилась такова:

-11

Ну и поехали по порядку, сверху вниз:

докерфайл приложения
докерфайл приложения
зависимости
зависимости
это тот же файл что и выше был опубликован
это тот же файл что и выше был опубликован
конфиг прометея
конфиг прометея
Файл докер-компоуз который уже непосредственно будет собирать и поднимать приложение в докер контейнере
Файл докер-компоуз который уже непосредственно будет собирать и поднимать приложение в докер контейнере

После того как все файлы созданы - можно поднимать приложение с помощью docker-compose:

у меня уже всё было собрано и поэтому запустилось моментально, но когда сборка осуществляется первый раз, то нужно немного подождать
у меня уже всё было собрано и поэтому запустилось моментально, но когда сборка осуществляется первый раз, то нужно немного подождать

Запущенное приложение в контейнере выглядит примерно так:

-18

Переходим по адресу http://127.0.0.1:3000, на этом, 3000 порту будет располагаться сервис grafana, который будет нам показывать график использования нашего эндпойнта:

Логин и пароль по-умолчанию - admin, система предложила поменять пароль, но я не стал этого делать - зачем?! Нажал skip...
Логин и пароль по-умолчанию - admin, система предложила поменять пароль, но я не стал этого делать - зачем?! Нажал skip...

Далее вы попадаете на главную страницу, где предлагается настроить соединение с прометем (prometheus), настраиваем:

У меня эти два параметра уже настроены и поэтому написано COMPLETE (завершено)
У меня эти два параметра уже настроены и поэтому написано COMPLETE (завершено)
-21
-22
-23
-24
-25
-26

Сначала посещаем наш тестовый эндпойнт и делаем несколько обращений к нему как с верными данными, чтобы всё было со статусом 200 так и несколько с нулем во втором параметре чтобы эндпойнт выдавал ошибку (Internal Server Error). Чтобы метрики зафиксировались в памяти приложения и у нас уже были какие-то данные которые можно графически отобразить.

-27
-28

Выбираем нужные метрики для отображения на графике, я выбрал как со статусом 200 так и со статусом 500, просто графики разных цветов, а не один график:

-29
-30

Появился вот такой график:

-31

Чтобы добавить второй график, нажимаем кнопочку внизу, и выполняем те же действия, выбираем ту же самую метрику и фильтр, только уже со значением 500

-32

Можно прописать дополнительные параметры панели:

Я заполнил лишь поле panel title чтобы понимать что это за графики
Я заполнил лишь поле panel title чтобы понимать что это за графики

После чего нажал кнопочку сохранить... и у меня получились вот такие графики:

-34

Вот пожалуй и всё по этой работе. Я так и не понял как интегрировать Sentry с GitLab, а самое главное - зачем?! Но так или иначе, куратор принял мою работу и я двигаюсь дальше.

-35

ЗЫ. Извиняюсь за долгое отсутствие. Я почти 20 дней был почти в информационном детоксе, жил в деревне, ходил в лес, на речку, на рыбалку. Старался не притрагиваться к ноутбуку. Ибо работа это конечно хорошо, но и отдых нужен обязательно, иначе в какой то момент начинает дёргаться глаз))))) И ты не можешь адекватно воспринимать этот мир. Пока молодой всё даётся легко и просто, а с годами начинаешь тормозить...

-36