Как настроить sentry для django celery-beat?

Я настроил sentry в моем демонстрационном проекте на python в файле settings.py.

sentry_sdk.init(
    dsn=os.getenv('SENTRY_KEY'),
    # Set traces_sample_rate to 1.0 to capture 100%
    # of transactions for performance monitoring.
    traces_sample_rate=1.0,
    # Set profiles_sample_rate to 1.0 to profile 100%
    # of sampled transactions.
    # We recommend adjusting this value in production.
    # profiles_sample_rate=1.0,
)

Теперь я хочу включить его для celery-beat. Каким образом можно интегрировать его или обновить существующий конфиг в settings.py? В документации Sentry говорится:

Инициализация Sentry в сигнале celeryd_init или beat_init

Нужно ли создавать celery task.py? Как автоматически запускать эту задачу при запуске python manage.py runserver или celery?

Вы можете инициализировать соединение Sentry с Django и Celery, используя приведенный ниже метод, если хотите, чтобы журналы пересылались в один и тот же DSN

import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration
from sentry_sdk.integrations.celery import CeleryIntegration

sentry_sdk.init(
    dsn="https://<YOUR_SENTRY_DSN>",
    integrations=[DjangoIntegration(), CeleryIntegration()],
    traces_sample_rate=1.0,
    send_default_pii=True
)

Для получения дополнительной информации проверьте Celery - Sentry, Django - Sentry docs

Для того чтобы задачи Beat выполнялись, необходимо убедиться, что вы запустили все следующее:

  • Сервер Django, с python manage.py runserver.
  • Рабочий Celery worker, с celery -A [app_name] worker.
  • Служба Celery Beat, с celery -A [app_name] beat.

Для того чтобы Sentry работал правильно, вам необходимо инициализировать SDK в Django, а также в Celery worker и Celery beat service. Вы можете сделать это, определив функцию init_sentry, которая слушает сигналы, упомянутые в вашем исходном сообщении, как в следующем примере. Не забудьте также установить monitor_beat_tasks=True в конструкторе CeleryIntegration.

@signals.beat_init.connect
@signals.celeryd_init.connect
def init_sentry(**kwargs):
    sentry_sdk.init(
        ...,
        integrations=[CeleryIntegration(monitor_beat_tasks=True),
    )

И последнее, убедитесь, что вы вызвали функцию init_sentry внутри вашего settings.py, чтобы Python SDK был инициализирован в вашем Django-сервере.

Вернуться на верх