Подтвердить что ты не робот

Задачи сельдерея нечеткие исключения не отправляются в 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)

Не могли бы вы помочь мне двигаться в определенном направлении?

Спасибо за ваше время!

4b9b3361

Ответ 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)

Спасибо за ваше время.