Как настроить 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-сервере.