pydantic/logfire
Auf GitHub ansehenCelery needs to be instrumented on client side for distributed tracing
Open
#972 geöffnet am 31. März 2025
documentationgood first issue
Repository-Metriken
- Stars
- (4.282 Stars)
- PR-Merge-Metriken
- (Durchschn. Merge 7T 8h) (35 gemergte PRs in 30 T)
Beschreibung
Demo:
import logfire
from celery import Celery
from celery.signals import worker_init
from fastapi import FastAPI
@worker_init.connect()
def init_worker(*args, **kwargs):
logfire.configure(service_name="worker")
logfire.instrument_celery()
app = Celery("tasks", broker="redis://localhost:6379/0")
@app.task
def add(x: int, y: int):
return x + y
fapp = FastAPI()
logfire.configure()
logfire.instrument_fastapi(fapp)
########### Important:
logfire.instrument_celery()
@fapp.get("/hello")
async def hello(name: str):
add.delay(42, 50)
return {"message": f"hello {name}"}
if __name__ == "__main__":
import uvicorn
uvicorn.run(fapp)
The top-level logfire.instrument_celery() is required for the context propagation, based on https://github.com/open-telemetry/opentelemetry-python-contrib/issues/1002#issuecomment-1275273134
This should be documented at least, maybe fixed in some other way, e.g. in OTel.