【问题标题】:Celery tasks uncaught exceptions not being sent to SentryCelery 任务未捕获的异常未发送到 Sentry
【发布时间】:2015-02-17 11:54:39
【问题描述】:

我目前正在一个基于 Django 的项目中处理 Celery 任务。我们已将 raven 配置为将所有未捕获的异常和日志消息发送到 Sentry,如 documentation 中所述。

一切都很好,除了 celery 任务中未捕获的异常。例如,如果我运行这个任务:

@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)

你能帮我朝某个方向前进吗?

感谢您的宝贵时间!

【问题讨论】:

标签: django exception logging celery sentry


【解决方案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)

感谢您的宝贵时间。

【讨论】:

  • 这个配置写在哪个文件里供 celery 读取?
  • 我有一个专用的 celery.py 模块,所有 celery 配置都位于其中。然后将该配置导入到其他模块 tasks.py 我已经定义了所有任务。
  • 他们新的sentry-sdk API 的替代方案是什么?
【解决方案2】:

选择的答案是正确的,因为问题状态 raven 正在使用中。 但是 raven 已被弃用,取而代之的是 sentry SDK。

使用 sentry SDK 配置 djangocelery

首先将sentry-sdk 添加到您的需求文件中。

然后,在您的 django 设置文件中:

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

sentry_sdk.init(
    dsn="your_sentry_DSN",
    integrations=[DjangoIntegration(), CeleryIntegration()],
    send_default_pii=True
)

来源:

【讨论】:

  • 嗨,我已将这些更改添加到我的代码中,但它没有捕获 celery 任务错误。代码库中是否需要任何其他更改。你能帮忙吗?@guival
  • @Anjitha 不,应该是这样。是否正确捕获其他错误?
  • 是的,它正在跟踪所有与 celery 无关的错误。 celery 配置文件中是否有额外的设置?
  • @Anjitha 现在什么都想不出来,也许你应该打开你自己的问题。
  • @gdvalderrama 我建议为sentry-sdk(和self-answering 在这里回答你的答案)提出一个新问题。选择的答案是在遗留 raven 包的上下文中构建的,并且有一个适合该问题的答案。它们是不同的包。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多