Найти в Дзене
Олег Сабрян

Sentry - система мониторинга ошибок в реальном времени

Здравствуй дорогой читатель, если ты устал тратить своё драгоценное время в поисках причин возникновения багов на проде, и хочешь знать об ошибках через секунду после их возникновения, то ты попал на правильную статью. Сегодня я кратко расскажу о таком замечательном инструменте как Sentry, который позволит тебе организовать такой мониторинг ошибок. Что такое Sentry и как это работает? кратко Sentry принимает от вас HTTP запрос, с пришедшими в него данными: название ошибки, stack trace, теги для классификации ошибки и доп. данные для отображения ее контекста (extra data). Далее классифицирует и группирует ошибки для удобного просмотра в личном кабинете. Команда разработки предоставляет уже готовые библиотеки для интеграции проектов, написанных на большинстве популярных языков программирования: Python, PHP, JS, Go, JAVA, Node.js и тд. Помимо этого Sentry имеет довольно широкий спектр интеграций, которые позволяют отправить вам сообщение об ошибке в Slack или же SMS через Twilio, соз
Оглавление

Здравствуй дорогой читатель, если ты устал тратить своё драгоценное время в поисках причин возникновения багов на проде, и хочешь знать об ошибках через секунду после их возникновения, то ты попал на правильную статью. Сегодня я кратко расскажу о таком замечательном инструменте как 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 всего в пару шагов, я же пропущу основные шаги по регистрации и покажу, как в два щелчка начать работать.

1) Выбираем раздел "Проекты"
1) Выбираем раздел "Проекты"
2) Создаем новый проект
2) Создаем новый проект
3) Указываем для какого языка программирования (или фреймворка) создать проект, если вашего фреймворка нет в списке, тогда просто выберите сам язык. Не забудьте указать уникальное название своего проекта, что бы не запутаться. В. дальнейшем при развитии вашей компании, через личный кабинет вы можете создавать разные команды, добавлять в них участников и настраивать видимость проектов, указывая в проекте принадлежность к той или иной команде
3) Указываем для какого языка программирования (или фреймворка) создать проект, если вашего фреймворка нет в списке, тогда просто выберите сам язык. Не забудьте указать уникальное название своего проекта, что бы не запутаться. В. дальнейшем при развитии вашей компании, через личный кабинет вы можете создавать разные команды, добавлять в них участников и настраивать видимость проектов, указывая в проекте принадлежность к той или иной команде
4) . Вот и все дорогой друг, ты создал проект на Sentry, и на последнем шаге ты можешь увидеть краткую инструкцию по интеграции в свой проект. Подчеркнутая же линия, является уникальным идентификатором данного проекта.
4) . Вот и все дорогой друг, ты создал проект на Sentry, и на последнем шаге ты можешь увидеть краткую инструкцию по интеграции в свой проект. Подчеркнутая же линия, является уникальным идентификатором данного проекта.

Теперь снова заходим в раздел "Проекты" и видим наш созданный проект, пока без какой либо информации.
Теперь снова заходим в раздел "Проекты" и видим наш созданный проект, пока без какой либо информации.

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")

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

-6

При этом в личном кабинете Sentry мы можем наблюдать такую картину, в графике ошибок появились новые события

-7

Если мы зайдем в свой проект, то увидим сгенерированные ошибки + информацию о количестве ошибок и последнем ивенте
Если мы зайдем в свой проект, то увидим сгенерированные ошибки + информацию о количестве ошибок и последнем ивенте
А вот и детальная расшифровка, которая потенциально может вам помочь для дебага возникшей ошибки.
А вот и детальная расшифровка, которая потенциально может вам помочь для дебага возникшей ошибки.

Вот лишь некоторый список параметров на который стоит обратить внимание

  1. Sentry явно указывает в какой строке возникла ошибка, класс ошибки
  2. Дополнительную информацию. К примеру, в данном кейсе мы можем увидеть значение хранящееся в переменной info, а так же весь стектрейс созданный в момент возникновения ошибки
  3. url запроса
  4. Информация о пользователе: версия устройства и браузера

P.S Дорогой читатель, если ты нашел данную статью для себя полезной, не забудь поставить лайк и оставить комментарий, мне будет очень приятно.