SDK OpenTelemetry
配置 runtime 追踪导出,并按语言连接应用与工具调用的 trace context。
Copilot SDK 可以为 CLI runtime 配置 OpenTelemetry,并通过 JSON-RPC 传递 W3C Trace Context。只需要收集 runtime traces 时,配置 telemetry 即可;应用自己已经创建 spans、需要合成分布式 trace 时,再接入上下文传递。
配置导出
import { CopilotClient } from "@github/copilot-sdk";
const client = new CopilotClient({
telemetry: {
otlpEndpoint: "http://localhost:4318",
otlpProtocol: "http/protobuf",
},
});这是本地 collector 地址示例,需有实际接收端。TypeScript TelemetryConfig 包含:
| 字段 | 含义 |
|---|---|
otlpEndpoint | OTLP HTTP endpoint |
otlpProtocol | http/json 或 http/protobuf,作用于所有信号 |
filePath | JSON-lines trace 输出路径 |
exporterType | otlp-http 或 file |
sourceName | instrumentation scope 名称 |
captureContent | 是否采集消息内容 |
省略协议使用 CLI 默认,官方专题没有在这里固定该默认值。按数据需求决定是否采集消息内容,不把开启导出自动等同于必须保存 prompt 全文。
应用到 runtime 的上下文
Node.js SDK 自身不依赖 OpenTelemetry。应用使用 @opentelemetry/api 时,通过 onGetTraceContext 在 session.create、session.resume、session.send 前提供当前 traceparent/tracestate:
import { CopilotClient } from "@github/copilot-sdk";
import { propagation, context } from "@opentelemetry/api";
const client = new CopilotClient({
telemetry: { otlpEndpoint: "http://localhost:4318" },
onGetTraceContext: () => {
const carrier: Record<string, string> = {};
propagation.inject(context.active(), carrier);
return carrier;
},
});这段代码要求应用已有相应库与 tracing 初始化。Python、Go、.NET 在各自 OpenTelemetry/Activity 已配置时自动注入;Java 依赖说明也明确 Java agent 或 SDK 配置后自动注入。不要为了所有语言看起来统一,额外臆造相同回调。
runtime 调用应用工具时
工具 handler 也能取得 runtime 的 trace context,使应用 span 成为执行工具 span 的子节点:
- Go:ToolInvocation.TraceContext 已恢复为 context.Context。
- Python:通过 trace_context() 在 handler 周围自动恢复。
- .NET:通过 RestoreTraceContext() 恢复,子 Activity 归入父 trace。
- Node.js:ToolInvocation 提供原始 traceparent、tracestate 字符串,应用需要时手动 extract 并在该上下文创建 span。
该页没有对每种语言都列出完全相同的入站恢复代码;未列出的细节以当前 SDK 类型为准。
依赖与用量关联
Python 官方提供 pip install copilot-sdk[telemetry],Go 使用 go.opentelemetry.io/otel,.NET 使用内置 System.Diagnostics.Activity,Java 可添加 io.opentelemetry:opentelemetry-api。是否安装或启用完整 exporter 仍由宿主应用的观测方案决定。
将 trace 与用量关联时可订阅 assistant.usage,读取 apiEndpoint 区分 Chat Completions、Responses、Anthropic Messages。费用和配额口径见SDK 用量,trace 次数本身不是费用账本。