Здравствуй дорогой читатель, если ты устал тратить своё драгоценное время в поисках причин возникновения багов на проде, и хочешь знать об ошибках через секунду после их возникновения, то ты попал на правильную статью. Сегодня я кратко расскажу о таком замечательном инструменте как Sentry, который позволит тебе организовать такой мониторинг ошибок.
Что такое Sentry и как это работает? кратко
Sentry принимает от вас HTTP запрос, с пришедшими в него данными: название ошибки, stack trace, теги для классификации ошибки и доп. данные для отображения ее контекста (extra data).
Далее классифицирует и группирует ошибки для удобного просмотра в личном кабинете.
Команда разработки предоставляет уже готовые библиотеки для интеграции проектов, написанных на большинстве популярных языков программирования: Python, PHP, JS, Go, JAVA, Node.js и тд.
Помимо этого Sentry имеет довольно широкий спектр интеграций, которые позволяют отправить вам сообщение об ошибке в Slack или же SMS через Twilio, создать или привязать тикет Jira и многое другое.
Меньше слов больше дела
Об устройстве Sentry вы всегда можете более подробно узнать сами, а я со своей стороны хочу познакомить вас с данным инструментом в течении 15 минут и отпустить вас в дальное плавание, поэтому сразу приступим к делу и попробуем организовать логирование ошибок.
Создание проекта
В данном примере я буду интегрировать Sentry на фреймворке Flask для языка программирования Python.
В документации вы можете найти как библиотеку для интеграции в чистом Python, так и решения для интеграции в таких фреймворках как: Flask, Django, Tornado, Pyramid и др
Для начала зарегистрируйтесь на сайте sentry.io всего в пару шагов, я же пропущу основные шаги по регистрации и покажу, как в два щелчка начать работать.
Python Flask + Sentry
А теперь я покажу простой пример того, как интегрировать у себя в проекте саму библиотеку.
Устанавливаем библиотеку
pip install --upgrade 'sentry-sdk[flask]==0.14.4'
Или добавляем в файл requirements.txt
sentry-sdk[flask]==0.14.4
Пример моего файла __main__.py в котором я намеренно обращаюсь к несуществующему ключу в ассоциативном массиве.
P.S Не забудьте заменить {{MYDSN}}
from flask import Flask
import sentry_sdk
from sentry_sdk.integrations.flask import FlaskIntegration
app = Flask(__name__)
sentry_sdk.init( dsn="{{MYDSN}}",
integrations=[FlaskIntegration()]
)
@app.route('/')
def index():
info = {'name':'Oleg'}
# намеренно обращаемся к несуществующему ключу в словаре
return info['age']
if __name__ == '__main__':
app.run(host="0.0.0.0")
После попытки обратиться к серверу по указанному пути мы видим ошибку
При этом в личном кабинете Sentry мы можем наблюдать такую картину, в графике ошибок появились новые события
Вот лишь некоторый список параметров на который стоит обратить внимание
- Sentry явно указывает в какой строке возникла ошибка, класс ошибки
- Дополнительную информацию. К примеру, в данном кейсе мы можем увидеть значение хранящееся в переменной info, а так же весь стектрейс созданный в момент возникновения ошибки
- url запроса
- Информация о пользователе: версия устройства и браузера
P.S Дорогой читатель, если ты нашел данную статью для себя полезной, не забудь поставить лайк и оставить комментарий, мне будет очень приятно.