跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

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 包含:

字段含义
otlpEndpointOTLP HTTP endpoint
otlpProtocolhttp/json 或 http/protobuf,作用于所有信号
filePathJSON-lines trace 输出路径
exporterTypeotlp-http 或 file
sourceNameinstrumentation 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 次数本身不是费用账本。