Sentry собирает необработанные исключения Django-приложения, объединяет их в issue, добавляет контекст (пользователь, запрос, релиз, breadcrumbs) и уведомляет команду. В уроке подключим sentry-sdk и настроим его для продакшена.

Что Sentry добавляет к логам

Строка лога говорит, что что-то сломалось. Sentry даёт по одному issue на каждую уникальную ошибку, число затронутых пользователей, релиз, в котором она появилась, traceback с локальными переменными и уведомление по почте или в Slack. Используйте оба инструмента: логи для истории, Sentry для сигнала тревоги (см. логирование в Django).

Как ошибка попадает в Sentry
Как ошибка попадает в Sentry

Установка и init

bash
pip install "sentry-sdk[django]"

Создайте проект в Sentry, скопируйте его DSN и вызовите init в начале settings.py. Интеграция с Django включается автоматически, если Django установлен; если передать её явно, можно задать параметры вроде transaction_style.

python
# settings.py
import os

import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration

sentry_sdk.init(
    dsn=os.environ.get('SENTRY_DSN'),          # None -> SDK stays off
    environment=os.environ.get('SENTRY_ENVIRONMENT', 'development'),
    release=os.environ.get('GIT_SHA'),
    integrations=[DjangoIntegration(transaction_style='url')],
    traces_sample_rate=0.1,
    send_default_pii=False,
)

Если SENTRY_DSN не задан, SDK остаётся выключенным, и локальная разработка ничего не отправляет. Кроме того, SDK сам читает SENTRY_DSN, SENTRY_ENVIRONMENT и SENTRY_RELEASE из окружения.