如何将 python rq worker 任务中的错误传播到 Sentry
How to propagate errors in python rq worker tasks to Sentry
我有一个带有 Sentry 错误跟踪功能的 Flask 应用程序。现在我用 rq
创建了一些任务,但它们的错误没有显示在 Sentry Issues 流中。我可以看出问题没有被过滤掉,因为过滤后的问题数量没有增加。错误显示在 heroku logs --tail
.
中
我运行工人rq worker homework-fetcher -c my_app.rq_sentry
my_app/rq_sentry.py
:
import os
import sentry_sdk
from sentry_sdk.integrations.rq import RqIntegration
dsn = os.environ["SENTRY_DSN"]
print(dsn) # I confirmed this appears in logs, so it is initialized
sentry_sdk.init(dsn=dsn, integrations=[RqIntegration()])
我有什么问题吗,还是我应该设置一个完整的应用程序来确认这一点并发布错误报告?
另外,我有一个(有点偏的)问题:
我应该在应用本身的哨兵设置中包含 RqIntegration
和 RedisIntegration
吗?这些有什么好处?
非常感谢您的帮助
编辑 1:当我安排任务 my_app.nonexistent_module
时,工作人员正确地提出错误,该错误被哨兵捕获。
所以我可能会改变我的问题:how to propagate Exceptions in rq worker
tasks to Sentry?
所以7个月后,我想通了。
Flask 应用使用应用工厂模式。然后在 worker 中,我需要像应用程序一样访问数据库,为此,我需要应用程序上下文。所以我from app_factory import create_app
,然后create_app().app_context().push()
。这就是问题所在——在工厂函数中,我还为应用程序本身初始化了哨兵,所以我最终将哨兵初始化了两次——一次是为应用程序,一次是为工作人员。结合我在工作任务文件(而不是配置)中调用应用程序初始化的事实,这可能会覆盖正确的哨兵初始化并阻止任务被正确记录
我有一个带有 Sentry 错误跟踪功能的 Flask 应用程序。现在我用 rq
创建了一些任务,但它们的错误没有显示在 Sentry Issues 流中。我可以看出问题没有被过滤掉,因为过滤后的问题数量没有增加。错误显示在 heroku logs --tail
.
我运行工人rq worker homework-fetcher -c my_app.rq_sentry
my_app/rq_sentry.py
:
import os
import sentry_sdk
from sentry_sdk.integrations.rq import RqIntegration
dsn = os.environ["SENTRY_DSN"]
print(dsn) # I confirmed this appears in logs, so it is initialized
sentry_sdk.init(dsn=dsn, integrations=[RqIntegration()])
我有什么问题吗,还是我应该设置一个完整的应用程序来确认这一点并发布错误报告?
另外,我有一个(有点偏的)问题:
我应该在应用本身的哨兵设置中包含 RqIntegration
和 RedisIntegration
吗?这些有什么好处?
非常感谢您的帮助
编辑 1:当我安排任务 my_app.nonexistent_module
时,工作人员正确地提出错误,该错误被哨兵捕获。
所以我可能会改变我的问题:how to propagate Exceptions in rq worker
tasks to Sentry?
所以7个月后,我想通了。
Flask 应用使用应用工厂模式。然后在 worker 中,我需要像应用程序一样访问数据库,为此,我需要应用程序上下文。所以我from app_factory import create_app
,然后create_app().app_context().push()
。这就是问题所在——在工厂函数中,我还为应用程序本身初始化了哨兵,所以我最终将哨兵初始化了两次——一次是为应用程序,一次是为工作人员。结合我在工作任务文件(而不是配置)中调用应用程序初始化的事实,这可能会覆盖正确的哨兵初始化并阻止任务被正确记录