我在我的python FastAPI应用程序中使用opentelemetry。它能追踪到耶格。每个跟踪都有一个唯一的跟踪id,我也可以在Jaeger UI搜索栏中搜索。
我想在响应头中返回跟踪id,以便以后我可以查看特定请求的跟踪(只需从头中获取跟踪id并在Jaeger UI中搜索)。
我试着在FastAPI中添加一个中间件,它添加了这样的跟踪id -
class EnrichOpenTelemetryId(BaseHTTPMiddleware):
def __init__(self, app):
super().__init__(app)
async def dispatch(self, request: Request, call_next):
with tracer.start_span("dummy-span") as span:
trace_id = str(span.get_span_context().trace_id)
response = await call_next(request)
response.headers["X-Trace-Id"] = trace_id
return response
有一个新的头包含一些跟踪id(例如- 149906749482483391829634904508866243046)在每个请求,但它不是一个Jaeger使用…(这意味着我不能在该跟踪id上搜索)。积家跟踪id看起来像这样- 8eddc793de380fa76c54557af09538e3.
那么我如何得到耶格追踪id呢?
从Jaeger项目github - https://github.com/jaegertracing/jaeger/discussions/3783获得帮助。问题是我没有将跟踪id(整数)转换为十六进制值。下面是-
之后的工作代码片段class CaptureTraceId(BaseHTTPMiddleware):
def __init__(self, app):
super().__init__(app)
async def dispatch(self, request: Request, call_next):
trace_id = trace.get_current_span().get_span_context().trace_id
response = await call_next(request)
response.headers["X-Trace-Id"] = format(trace_id, 'x')
return response