当前位置: 首页 > news >正文

OpenTracing Python:分布式追踪的标准 API

文章目录

  • OpenTracing Python:分布式追踪的标准 API

OpenTracing Python:分布式追踪的标准 API

OpenTracing 的 Python 实现opentracing-python,目前收获了 750 Star:

这个项目是 OpenTracing 组织维护的 Python 平台 API,为分布式追踪提供了一套标准化的接口。当前版本主要提供 API 定义和一个基础的 no-op 实现,让各类 instrumentation 库能够基于统一的接口来收集和传播分布式追踪上下文,而不需要绑定到具体的追踪后端。

在微服务架构中,一个用户请求往往会流经多个服务。如果没有追踪机制,定位性能瓶颈或排查故障将变得极为困难。OpenTracing 正是为了解决这一问题而设计的开放标准,而opentracing-python则是该标准在 Python 生态中的具体落地。

项目的核心工作围绕三个环节展开:

  1. 接收请求时,通过 inject/extract API 延续已有的追踪链路,创建 Span 对象
  2. 处理请求时,将当前 Span 存入请求本地的存储中,供后续创建子 Span 时取用
  3. 发起请求时,从本地存储取出当前 Span,创建子 Span,并通过 inject/extract API 将其嵌入到出站请求中

入站请求处理

服务端收到请求时的典型处理逻辑:

defhandle_request(request):span=before_request(request,opentracing.global_tracer())withtracer.scope_manager.activate(span,True)asscope:handle_request_for_real(request)defbefore_request(request,tracer):span_context=tracer.extract(format=Format.HTTP_HEADERS,carrier=request.headers,)span=tracer.start_span(operation_name=request.operation,child_of=span_context)span.set_tag('http.url',request.full_url)remote_ip=request.remote_ipifremote_ip:span.set_tag(tags.PEER_HOST_IPV4,remote_ip)returnspan

这里的关键是从请求头中提取 span_context。如果请求中已存在活跃追踪,则延续该追踪;否则启动新的根 Span。

出站请求处理

服务向其他服务发起调用时,需要创建子 Span 并将追踪上下文传递出去:

defbefore_http_request(request,current_span_extractor):parent_span=current_span_extractor()outbound_span=opentracing.global_tracer().start_span(operation_name=request.operation,child_of=parent_span)outbound_span.set_tag('http.url',request.full_url)http_header_carrier={}opentracing.global_tracer().inject(span_context=outbound_span.context,format=Format.HTTP_HEADERS,carrier=http_header_carrier)forkey,valueinhttp_header_carrier.iteritems():request.add_header(key,value)returnoutbound_span

Scope 与进程内传播

OpenTracing 要求每个 Tracer 都包含一个 ScopeManager,用于管理当前活跃的 Span。Scope 可以通过上下文管理器自动注册和清理:

withtracer.start_active_span('someWork',finish_on_close=True)asscope:# 执行业务逻辑

如果需要手动管理 Scope:

span=tracer.start_span(operation_name='someWork')scope=tracer.scope_manager.activate(span,True)try:# 执行业务逻辑exceptExceptionase:span.set_tag('error','...')finally:scope.close()

多框架支持

项目内置了多种 ScopeManager 实现,覆盖不同的异步框架:

fromopentracing.scope_managersimportThreadLocalScopeManagerfromopentracing.scope_managers.geventimportGeventScopeManagerfromopentracing.scope_managers.tornadoimportTornadoScopeManagerfromopentracing.scope_managers.asyncioimportAsyncioScopeManagerfromopentracing.scope_managers.contextvarsimportContextVarsScopeManager

对于 asyncio 应用,推荐使用ContextVarsScopeManager。相比AsyncioScopeManager,它能自动将父 Span 传播到子协程、任务或回调中。

测试支持

项目还提供了 MockTracer 用于单元测试,无需接入真实的追踪后端即可验证 instrumentation 逻辑:

fromopentracing.mocktracerimportMockTracer tracer=MockTracer()withtracer.start_span('someWork')asspan:passspans=tracer.finished_spans()

opentracing-python作为 OpenTracing 规范在 Python 生态中的官方实现,为构建可观测的分布式系统提供了基础层接口。instrumentation 库可以基于此 API 开发,而应用开发者则可以自由选择后端追踪系统。

ntracing-python` 作为 OpenTracing 规范在 Python 生态中的官方实现,为构建可观测的分布式系统提供了基础层接口。instrumentation 库可以基于此 API 开发,而应用开发者则可以自由选择后端追踪系统。

http://www.jsqmd.com/news/1067246/

相关文章:

  • 先说基因:一个做自动化起家,一个做采集起家
  • AI写作辅助软件的使用规范:如何让AI生成内容通过严格学术审查
  • 我做了一个只用来搜歌词的小 App
  • 非对称密码体系的密码分析方法研究
  • Pendulum:Python 日期时间处理的终极解决方案
  • 告别新手级RAG!一文掌握专业级后检索优化之「校正」
  • Edge浏览器停止更新,并回退到老版本方法
  • 深入 .NET AI Agent 开发:利用 Microsoft.Agents.AI 提取思考、调用工具与执行脚本
  • Manim物理模拟:别自己写欧拉了!
  • 古典密码 - 维吉尼亚密码破解
  • [APM32F4] 跟随 Fabrice Bellard 的脚步,把 MicroQuickJS 移植到 APM32F427
  • 2026 佛山传统企业升级|短视频矩阵赋能,加快数字化内容建设
  • 在线 AI 开发平台-MonkeyCode
  • 吉他选购指南2026年入门级1000-2000元横评:参数对比+真实评测
  • 每日一个开源项目(第138篇):OpenMontage - 把 AI 编程助手变成完整的视频制作团队
  • HAProxy 学习总结
  • CS16S:01
  • 低成本创业辅助软件客观梳理
  • 无损FLAC音乐怎么变成MP3?一篇讲清楚flac转mp3操作步骤
  • 安全审计系统有哪些?2026年5大安全审计软件功能详解,最新分享
  • 独立研究者开发的土耳其语“形态大脑“
  • Childhood,23款童年卡牌游戏复刻
  • RAG 检索质量从 60% 到 90%:混合检索 + 重排序的完整实践
  • 基于知识图谱的百科知识问答系统:Django+Neo4j 智能问答平台项目实战
  • 从Copilot到Agent——我的开发工作流正在被颠覆的技术文章大纲
  • 隐性隐私泄露
  • 全网最全!2026AI论文平台榜单(覆盖 99% 毕业论文需求)
  • 12.1.1 质量属性概念 (续) - 运行期质量属性
  • 92-Java 多线程编程
  • Milvus架构与核心原理