Продолжение работы с логгированием в проектах Flask. Если быть точным - ещё несколько инструментов, помогающих отслеживать ошибки, активность пользователей в наших приложениях.
Это конспект по домашней работе с 24 модулем курса "python_advanced", здесь не всё чётко и красиво ибо я сам остался далёк от полного понимания того что нужно сделать и почему, скажем, в лекциях у лектора всё работало а я повторил тоже самое - у меня не работает. Спросил в чате - спасибо что не послали по известному адресу...
Задание 1. Sentry
1. Авторизуйтесь на sentry.io.
2. Настройте систему оповещений на почту.
3. Настройте интеграцию с GitLab/GitHub.
Казалось бы, всё просто, нужно лишь повторить всё тоже что и в лекции 24.3 что собственно я и сделал. Зарегался на sentry.io, получил ключ, собрал приложение, полученный ключ вставил в приложение:
Проверил все эндпойнты, всё работает как и должно, по каждой ошибке приходят оповещения, те ошибки, которые повторяются, не создают новых событий а просто увеличивают счетчик ошибок.
Настройка email, можно добавить множество адресов электронной почты на которую будут приходить письма с оповещениями:
Ну и как выглядит письмо от sentry:
А вот по поводу интерграции с GitLab/GitHub я так и не понял зачем это делается, но нашел несколько решений в интернете которые у меня не заработали. Дошел до пункта добавить приложение и куда дальше - не понял:
Написал по этому поводу куратору:
Но он не ответил, лишь в ответ принял моё задание, в котором так и не была настроена интеграция с Гитлабом, в которой я так и не понял смысла, если кто-то это сделал - напишите в комментах зачем это нужно было делать.
Задание 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.
Если этот эндпойнт запустить просто из Pycharm, без использования докер-контейнера, то результат работы будет вот таким:
Попробуем с нулём во втором параметре:
Посмотрим http://127.0.0.1/metrics, какие там появились данные, касаемые нашего эндпойнта, а не всё подряд:
Как видим, один ответ со статусом 200 и два ответа со статусом 500 (я дважды обращался к эдпойнту с неверными запросами, то есть нулём во втором параметре).
Ну а теперь всё это дело нужно просто упаковать в докер контейнер и запустить. Я всё повторил как в лекциях (24.4), только уже без генератора. Структура получилась такова:
Ну и поехали по порядку, сверху вниз:
После того как все файлы созданы - можно поднимать приложение с помощью docker-compose:
Запущенное приложение в контейнере выглядит примерно так:
Переходим по адресу http://127.0.0.1:3000, на этом, 3000 порту будет располагаться сервис grafana, который будет нам показывать график использования нашего эндпойнта:
Далее вы попадаете на главную страницу, где предлагается настроить соединение с прометем (prometheus), настраиваем:
Сначала посещаем наш тестовый эндпойнт и делаем несколько обращений к нему как с верными данными, чтобы всё было со статусом 200 так и несколько с нулем во втором параметре чтобы эндпойнт выдавал ошибку (Internal Server Error). Чтобы метрики зафиксировались в памяти приложения и у нас уже были какие-то данные которые можно графически отобразить.
Выбираем нужные метрики для отображения на графике, я выбрал как со статусом 200 так и со статусом 500, просто графики разных цветов, а не один график:
Появился вот такой график:
Чтобы добавить второй график, нажимаем кнопочку внизу, и выполняем те же действия, выбираем ту же самую метрику и фильтр, только уже со значением 500
Можно прописать дополнительные параметры панели:
После чего нажал кнопочку сохранить... и у меня получились вот такие графики:
Вот пожалуй и всё по этой работе. Я так и не понял как интегрировать Sentry с GitLab, а самое главное - зачем?! Но так или иначе, куратор принял мою работу и я двигаюсь дальше.
ЗЫ. Извиняюсь за долгое отсутствие. Я почти 20 дней был почти в информационном детоксе, жил в деревне, ходил в лес, на речку, на рыбалку. Старался не притрагиваться к ноутбуку. Ибо работа это конечно хорошо, но и отдых нужен обязательно, иначе в какой то момент начинает дёргаться глаз))))) И ты не можешь адекватно воспринимать этот мир. Пока молодой всё даётся легко и просто, а с годами начинаешь тормозить...