Задачи сельдерея нечеткие исключения не отправляются в Sentry
В настоящее время я работаю над задачами Celery в проекте на основе Django. У нас ворон настроен на отправку всех исключенных исключений и сообщений журнала в Sentry, как описано в документации.
Все работает очень хорошо, за исключением нерешенных исключений внутри задач сельдерея. Например, если я запустил эту задачу:
@app.task
def test_logging():
log.error('Testing logging inside a task')
raise IndexError('Testing exception inside a task')
В Sentry я вижу только log.error(...)
, но не исключение IndexError
.
Я попытался использовать блок try-except
вокруг исключения с log.exception(...)
внутри, и он действительно работал, но я думаю, что он не масштабируется, чтобы улавливать все исключения, подобные этому.
Таким образом, проблема - это только неотображаемые исключения, которые каким-то образом не обрабатываются должным образом.
Это мои текущие версии пакетов:
celery (3.1.17)
raven (5.1.1)
Django (1.7.1)
Не могли бы вы помочь мне двигаться в определенном направлении?
Спасибо за ваше время!
Ответы
Ответ 1
Как описано DRC в комментарии там, мы, наконец, добрались до решения, используя этот подход:
https://docs.getsentry.com/hosted/clients/python/integrations/celery/
В основном это:
import celery
class Celery(celery.Celery):
def on_configure(self):
if hasattr(settings, 'RAVEN_CONFIG') and settings.RAVEN_CONFIG['dsn']:
import raven
from raven.contrib.celery import (register_signal,
register_logger_signal)
client = raven.Client(settings.RAVEN_CONFIG['dsn'])
register_logger_signal(client)
register_signal(client)
app = Celery('myapp')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
Спасибо за ваше время.