pydantic/logfire
在 GitHub 查看Celery needs to be instrumented on client side for distributed tracing
Open
#972 建立於 2025年3月31日
documentationgood first issue
倉庫指標
- Star
- (4,282 star)
- PR 合併指標
- (平均合併 7天 8小時) (30 天內合併 35 個 PR)
描述
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.