Flask集成OpenCensus对接Azure时如何将trace-id写入响应header
你可以通过Flask的after_request钩子,从OpenCensus的当前执行上下文中提取trace_id(也就是Azure Monitor中对应的operation_Id),再添加到响应header中返回给客户端,具体实现步骤如下:
1. 新增依赖导入
先引入OpenCensus的执行上下文模块,用于获取当前请求的trace信息:
from opencensus.trace import execution_context
2. 配置全局响应钩子
添加全局请求后处理逻辑,所有接口返回前都会自动注入trace id header:
@app.after_request def inject_trace_id(response): tracer = execution_context.get_opencensus_tracer() # 仅当存在trace上下文时添加header if tracer and hasattr(tracer, "span_context"): trace_id = tracer.span_context.trace_id # 自定义header名,和内部日志的operation_Id完全一致 response.headers["X-Trace-Id"] = trace_id # 若有跨域需求,添加此行允许前端读取该header # response.headers["Access-Control-Expose-Headers"] = "X-Trace-Id" return response
验证效果
启动服务后发起请求,响应头中会携带X-Trace-Id字段,值完全匹配Azure Monitor中对应请求的operation_Id,客户端拿到后可以直接用该值检索全链路日志。
内容的提问来源于stack exchange,提问作者sheldonzy
相关产品推荐
相关产品推荐

