尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
LLM API 调用链全链路追踪:OpenTelemetry 上下文注入与 Span 传递实战
LLM API 调用链全链路追踪OpenTelemetry 上下文注入与 Span 传递实战在大模型LLM应用架构中一个看似简单的用户请求在后端往往会经历一段极其错综复杂的“计算旅程”用户提问 - API 网关鉴权 - 向量数据库Milvus检索相关文档 - 提示词工程模板组装 - 外部安全审核模型校验 - 大模型核心生成 - 输出流式敏感词过滤。当用户抱怨某次请求卡顿了 6 秒时如果缺乏全链路追踪Distributed Tracing各组件的日志散落在不同的系统Loki / Elasticsearch中无法通过一个统一的 ID 串联开发团队各执一词无法定位到底是向量检索慢了还是模型生成耗时过长。基于CNCF OpenTelemetryOTel标准我们在全链路中实现W3Ctraceparent请求头的透明传递与 Step 级 Span 注入。本文将提供一份在 Go 微服务与 Python 大模型服务之间实现跨语言链路追踪的生产级实战代码。sequenceDiagram autonumber participant Client as 客户端 participant GoGateway as Go API 网关 (生成 TraceID) participant PythonLLM as Python vLLM 推理服务 participant Collector as OpenTelemetry Collector Client-GoGateway: 1. POST /v1/chat/completions Note over GoGateway: 2. 启动 Root Span: Gateway_Ingressbr/生成 TraceID: 4bf92f3577b34da6a3ce929d0e0e4736 GoGateway-PythonLLM: 3. 发送 HTTP 请求 (附带 Header traceparent: 00-4bf92f...-01) Note over PythonLLM: 4. 提取 traceparent启动 Child Span: vLLM_Prefill_Decodebr/继承完全相同的 TraceID! PythonLLM--GoGateway: 5. 返回流式输出并注入 token 计数属性 GoGateway--Client: 6. 返回最终响应 par 异步上报 Trace 数据 GoGateway--)Collector: 上报 Gateway Span (耗时 3.2s) PythonLLM--)Collector: 上报 LLM Span (Prefill: 200ms, Decode: 2.8s) end1. Go 网关层生成 Trace 并注入 HTTP 请求头package main import ( context net/http go.opentelemetry.io/otel go.opentelemetry.io/otel/propagation go.opentelemetry.io/otel/trace ) var tracer otel.Tracer(ai-gateway) func CallDownstreamLLMService(ctx context.Context, prompt string) (*http.Response, error) { // 1. 开启本地 Span ctx, span : tracer.Start(ctx, HTTP_Post_To_vLLM, trace.WithSpanKind(trace.SpanKindClient)) defer span.End() req, _ : http.NewRequestWithContext(ctx, POST, http://vllm-serving:8000/v1/completions, nil) // 2. 核心操作: 将当前 Context 中的 Trace 上下文自动序列化注入到 HTTP Header otel.GetTextMapPropagator().Inject(ctx, propagation.HeaderCarrier(req.Header)) // 发送带有 traceparent 的请求 return http.DefaultClient.Do(req) }2. Python 推理服务提取 TraceContext 并延续 Spanfrom fastapi import FastAPI, Request from opentelemetry import trace from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator app FastAPI() tracer trace.get_tracer(vllm-service) app.post(/v1/completions) async def generate_completions(request: Request): # 1. 从 HTTP Headers 中提取父级 TraceContext carrier dict(request.headers) parent_context TraceContextTextMapPropagator().extract(carriercarrier) # 2. 在父级 Context 下开启子 Span无缝延续调用链! with tracer.start_as_current_span(LLM_Prefill_And_Decode, contextparent_context) as span: span.set_attribute(gen_ai.system, vllm) span.set_attribute(gen_ai.request.model, llama-3-70b) # 执行模型推理生成 # ... span.set_attribute(gen_ai.usage.output_tokens, 128) return {text: 生成结果}3. 总结通过遵循 OpenTelemetry 标准化协议跨语言、跨组件的分布式调用链在 Jaeger 看板上被完整拼装为一幅一览无余的拓扑图使每一次慢调用与报错都能被毫秒级定位到具体的代码行与组件。
RELATED

相关推荐

工控液晶屏现场故障排查七步法:从黑屏到修复的实操指南

工控液晶屏现场故障排查七步法:从黑屏到修复的实操指南

1. 这不是教科书,是我在车间里擦着汗写下的真实记录“工控液晶屏维护手记:现场故障的排查顺序”——这标题听起来像本技术手册的章节名,但我要说,它其实是我在华北某汽车焊装车间、华东一家食品包装产线、西南一座化工DCS控制室里…

📅 2026/9/11 16:10:14
智能体系统治理:隔离、集成与实时策略引擎

智能体系统治理:隔离、集成与实时策略引擎

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/11 15:59:48
STM32F103 AB分区OTA实战:设计原理、代码实现与踩坑记录

STM32F103 AB分区OTA实战:设计原理、代码实现与踩坑记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/11 15:59:48
MORE NEWS

更多资讯

📰

ROS 2全栈机器人开发:从SLAM建图到Nav2导航实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

字符串核心知识盘点:转换、比较与性能避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

嵌入式面试全攻略:C语言、MCU、RTOS与Linux驱动考点精讲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

装上 Claudian 这个 Obsidian 插件后,知识库就是你的 AI 工作台

装上 Claudian 这个 Obsidian 插件后,知识库就是你的 AI 工作台 【免费下载链接】claudian An Obsidian plugin that embeds Claude Code/Codex as an AI collaborator in your vault 项目地址: https://gitcode.com/GitHub_Trending/cl/claudian Claudian 是…

📰

SerenityOS 截图工具 Screenshot 完全指南:图形界面操作、配置持久化与 shot 命令行详解

SerenityOS 截图工具 Screenshot 完全指南:图形界面操作、配置持久化与 shot 命令行详解 【免费下载链接】serenity The Serenity Operating System 🐞 项目地址: https://gitcode.com/GitHub_Trending/se/serenity Screenshot 是 SerenityOS 自带…

📰

Switch大气层超频插件sys-clk:频率表与配置文件详解

简介:大气层系统下任天堂Switch主机超频插件资源,面向已使用大气层破解并希望提升游戏性能的中高级玩家。资源内含主程序及配套配置文件,通过系统安装包与工具程序分别完成组件安装和前端管理,配合预设的模板、标志与配置文件&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬