pydantic/logfire

Celery needs to be instrumented on client side for distributed tracing

オープン

#972 opened on 2025/03/31

 (3 件のコメント) (0 件のリアクション) (0 人の担当者)Python (244 件のフォーク)github user discovery
documentationgood first issue

Repository metrics

Stars
 (4,282 個のスター)
PR merge metrics
 (平均マージ 7d 8h) (30d で 35 merged PRs)

説明

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.

コントリビューターガイド