OpenTelemetry 观测
导出 CLI traces 和 metrics,区分调用耗时、token、AI units 与敏感内容采集。
This page has not been translated into English yet. The original Chinese version is shown below.
Copilot CLI 可通过 OpenTelemetry 观察智能体、模型请求、工具执行和 token 消耗。默认关闭;配置启用变量、OTLP endpoint 或本地文件输出任一项即可启动。
输出到本地文件
export COPILOT_OTEL_FILE_EXPORTER_PATH=/tmp/copilot-otel.jsonl
copilot文件输出为 JSON-lines,设置路径自动选择 file exporter。配置 endpoint 则默认使用 otlp-http,协议默认 http/json,可设 http/protobuf。
| 变量 | 用途或默认 |
|---|---|
| COPILOT_OTEL_ENABLED | 默认 false,显式 true 启用 |
| OTEL_EXPORTER_OTLP_ENDPOINT | 设置后自动启用导出 |
| COPILOT_OTEL_EXPORTER_TYPE | otlp-http 或 file |
| OTEL_EXPORTER_OTLP_PROTOCOL | 默认 http/json |
| OTEL_EXPORTER_OTLP_TRACES_PROTOCOL | 单独覆盖 trace 协议 |
| OTEL_EXPORTER_OTLP_METRICS_PROTOCOL | 单独覆盖 metric 协议 |
| OTEL_SERVICE_NAME | 默认 github-copilot |
| OTEL_RESOURCE_ATTRIBUTES | 逗号分隔 key=value,特殊字符用百分号编码 |
| OTEL_EXPORTER_OTLP_HEADERS | exporter 认证头 |
| COPILOT_OTEL_SOURCE_NAME | 默认 github.copilot |
| OTEL_LOG_LEVEL | OTel 自身诊断级别 |
这些设置也可通过受支持的企业托管配置提供;endpoint 和 header 应指向团队实际使用的 collector。
Trace 结构
每次用户交互有 invoke_agent 根 span,下面有 chat 模型请求与 execute_tool 工具调用。顶层和 subagent 的 invoke_agent 都是 INTERNAL,chat 是面向 provider 的 CLIENT。
gen_ai.conversation.id 用于关联会话,gen_ai.request.model 与 gen_ai.response.model 区分请求和实际解析模型。token 字段区分输入、输出、cache read 与 cache creation;error.type 表示错误类型。
避免重复计量
github.copilot.nano_aiu 表示 nano AI units,1 AIU = 1,000,000,000 nano AIU。统计一次交互消耗时仅从根 invoke_agent 读取,不要再把子 chat 的同名值相加,否则重复计算。
github.copilot.cost 是计费计算所用的模型倍率,不是货币金额。不能把它直接展示为美元,也不能用 token 总数替代官方账单。
指标
| 指标 | 观察内容 |
|---|---|
| gen_ai.client.operation.duration | 模型请求和智能体操作耗时 |
| gen_ai.client.token.usage | input / output tokens |
| gen_ai.client.operation.time_to_first_chunk | 流式首块延迟 |
| gen_ai.invoke_agent.inference_calls | 一次智能体调用中的模型派发次数 |
| gen_ai.invoke_agent.tool_calls | 客户端工具调用次数 |
| gen_ai.invoke_workflow.duration | Fleet 等 workflow 总耗时 |
| github.copilot.tool.call.count / duration | 工具次数与耗时 |
| github.copilot.mcp.server.connection.count | MCP 连接尝试结果 |
| github.copilot.code.lines_added / removed | 编辑工具记录的增删行 |
模型调用次数包含已派发的失败与部分请求,不包含派发前被阻止的请求;工具计数不包含 provider 端工具或 CLI 合成生命周期。对比其他数据源时应保持口径一致。
内容采集
默认只采元数据,不采完整提示、回复或工具参数。OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true 会启用完整消息、系统指令、工具定义、调用参数和结果采集,可能包含源代码及敏感资料。
需要排查内容问题时再在可信环境启用,并控制 collector 和文件访问范围。普通延迟或 token 分析通常可以保留默认元数据方式。