Skip to content

Tracing of Celery tasks does not work with Signatures #1416

Open
@alexpersin

Description

@alexpersin

How do you use Sentry?

Sentry Saas (sentry.io)

Version

1.5.10

Steps to Reproduce

The python sentry_sdk celery integration uses _wrap_apply_async to wrap the celery.Task.apply_async method. However it does not wrap celery Signatures as these have their own apply_async method defined in the celery package in celery/canvas.py. This means that tasks defined using signatures are not traced.

To reproduce:

import sentry_sdk
import os
from sentry_sdk.integrations.celery import CeleryIntegration

sentry_sdk.init(os.getenv('SENTRY_DSN'), integrations=[CeleryIntegration()],  traces_sample_rate=1.0, debug=True)

group_result = celery.group([
    celery.signature('foo', kwargs=kwargs),
    celery.signature('bar', kwargs=kwargs)
]).apply_async()

This does not produce traces. Alternatively,

import sentry_sdk
import os
from sentry_sdk.integrations.celery import CeleryIntegration
from celery.app.task import Task 

sentry_sdk.init(os.getenv('SENTRY_DSN'), integrations=[CeleryIntegration()],  traces_sample_rate=1.0, debug=True)

# Not wrapped by sentry sdk
print(celery.group.apply_async.__code__)

# Wrapped by sentry sdk
print(Task.apply_async.__code__)

Running the following fixes the issue:

import celery
from sentry_sdk.integrations.celery import _wrap_apply_async

celery.group.apply_async = _wrap_apply_async(celery.group.apply_async)
celery.chunks.apply_async = _wrap_apply_async(celery.chunks.apply_async)
celery.chain.apply_async = _wrap_apply_async(celery.chain.apply_async)
celery.chord.apply_async = _wrap_apply_async(celery.chord.apply_async)
Signature.apply_async = _wrap_apply_async(Signature.apply_async)

Expected Result

Transactions visible in the UI.

Actual Result

No transaction visible. Stepping through the code with a debugger, the function created with _wrap_apply_async is not called as the Signature.apply_async method is not wrapped.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions