
如何为 VS Code Agent Host 启用 OTel 追踪并将 trace 导出到 OTLP 采集端点【免费下载链接】vscodeVisual Studio Code项目地址: https://gitcode.com/GitHub_Trending/vscode6/vscodeVS Code 的Agent Host是一个独立的 utility 进程位于src/vs/platform/agentHost/用于承载 native 的 Copilot、Claude 和 Codex 运行时而不是走扩展宿主内的 in-process harness。当你需要把这些 agent 会话产生的 OpenTelemetryOTeltrace 发送到自己的 OTLP 采集端点如 Aspire Dashboard、Jaeger 或其他 OTLP 兼容 collector时需要配置chat.agentHost.otel.*这一组设置。该能力目前仅在Insiders / 非 stable 构建中可用。注意它与扩展侧的 OTel 管线github.copilot.chat.otel.*文档见 agent_monitoring.md是两套独立管线前者在扩展宿主中运行设置前缀和持久化位置都不同。准备条件VS Code 构建Insiders 或其他非 stable 构建文档明确标注 Availability 为 Insiders / non-stable builds only。一个可访问的 OTLP 兼容 collector。示例主路径使用 Aspire Dashboard它是一个带内置 OTLP/HTTP 端点和 Web 界面的容器镜像无需云账号。前提是你已安装 Docker。启动 Aspire Dashboard来自 agent_monitoring.md 的 Quick Start 命令。该命令会拉取镜像并以后台方式启动一个名为aspire-dashboard的容器docker run --rm -d \ -p 18888:18888 \ -p 4318:18890 \ --name aspire-dashboard \ mcr.microsoft.com/dotnet/aspire-dashboard:latest端口映射的含义18888是 dashboard 的 Web 界面端口4318是 OTLP/HTTP 接收端口即 trace 要发送的端点。选择工作模式pass-through 还是 DB 模式Agent Host OTel 有两种模式配置前先确定你要哪一种模式触发条件行为Pass-throughchat.agentHost.otel.enabled为true且dbSpanExporter.enabled为falseSDK 直接导出到你配置的 exporterOTLP/HTTP、OTLP/gRPC、file 或 consolespan 不被拦截DB 模式chat.agentHost.otel.dbSpanExporter.enabled为true隐式启用 OTelSDK 指向 Agent Host 内127.0.0.1上的 loopback OTLP/HTTP receiverspan 解码后写入本地 SQLite 数据库若外部端点为 OTLP/HTTP JSON还会把规范化后的 JSON body 转发到你的 collector两者也可以同时开文档给出的 Quick Start 组合就同时启用 DB 落盘和 OTLP 转发既能在 dashboard 里看实时会话又能事后查询原始数据。配置设置打开SettingsCtrl,搜索agentHost otel或直接编辑settings.json。主路径pass-through 导出到 OTLP 端点{ chat.agentHost.otel.enabled: true, chat.agentHost.otel.otlpEndpoint: http://localhost:4318 }otlpEndpoint支持两种写法与标准OTEL_EXPORTER_OTLP_ENDPOINT约定一致裸 base URL如http://localhost:4318需要时自动追加/v1/traces完整信号级 URL如http://host:4318/v1/traces原样使用。如果同时想本地落盘再加上 DB 开关文档 Quick Start 的完整示例{ chat.agentHost.otel.enabled: true, chat.agentHost.otel.captureContent: true, chat.agentHost.otel.dbSpanExporter.enabled: true, chat.agentHost.otel.otlpEndpoint: http://localhost:4318 }其余相关设置的默认值与用途来自 OTEL.md设置默认值说明chat.agentHost.otel.exporterTypeotlp-http可选otlp-http、otlp-grpc、console、file。CLI runtime 会透明地把otlp-grpc降级为otlp-httpchat.agentHost.otel.captureContentfalse在 span 属性中捕获 prompt/response 内容。隐私敏感文档明确警告不要把 span 发往共享 sink 的环境中开启chat.agentHost.otel.outfileexporterType为file时的 JSON-lines 输出路径chat.agentHost.otel.dbSpanExporter.enabledfalse把每个 span 持久化到userData/agent-host/otel/agent-host-traces.db隐式启用 OTel这些设置只可在用户级 settings 中配置并且最终会被翻译成 Agent Host 进程的环境变量对应关系翻译点在 agentService.ts 的buildAgentHostOTelEnv()设置注册在 agentHostStarter.config.contribution.ts设置环境变量chat.agentHost.otel.enabledCOPILOT_OTEL_ENABLEDchat.agentHost.otel.exporterTypeCOPILOT_OTEL_EXPORTER_TYPEchat.agentHost.otel.otlpEndpointOTEL_EXPORTER_OTLP_ENDPOINTCOPILOT_OTEL_ENDPOINT也接受且优先chat.agentHost.otel.captureContentOTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENTchat.agentHost.otel.outfileCOPILOT_OTEL_FILE_EXPORTER_PATHchat.agentHost.otel.dbSpanExporter.enabledCOPILOT_OTEL_DB_SPAN_EXPORTER_ENABLED优先级企业 managed policy策略 父进程环境变量 用户设置。如果你在父进程环境里已经设置了同名变量开发覆盖它会赢过对应设置而企业策略值则赢过父进程环境变量。让配置生效必须重启环境变量在 Agent Hostspawn 时绑定IAgentHostOTelService在构造时读取一次process.env并缓存。会话中途修改chat.agentHost.otel.*设置对已在运行的 Agent Host没有任何效果——改完设置后必须 reload window 或重启 VS Code。重启后在 Copilot Chat 中发起一次 agent 会话例如 Agent 模式下发一条消息来产生 span。结果验证Pass-through 路径在 collector 端查看用 Aspire Dashboard 作 collector 时打开http://localhost:18888进入Traces页面即可看到会话 tracedashboard UI 端口来自上面的 docker 映射。Agent Host 会把所有 provider 的 trace 归到一个 trace id 下宿主发出零时长的vscode.agent_host.sessionanchor span并把 W3Ctraceparent/tracestate传给各 native runtime因此 Copilot、Claude、Codex 的原生 trace 共享同一个 trace id。各 producer 的service.name分别为github-copilot、claude-code、codex-app-server宿主侧元数据 span 为vscode-agent-host共同带上service.namespacevscode.agent-host资源属性可以用这些属性在 collector 中过滤。DB 模式本地 SQLite 验证与导出启用chat.agentHost.otel.dbSpanExporter.enabled后所有 span 写入userData/agent-host/otel/agent-host-traces.db用命令Chat: Export Agent Host Traces Database…命令 idworkbench.action.chat.agentHost.otel.exportAgentTracesDB把数据库复制一份用于离线检查。该命令仅在 DB 开关为true时出现实现见 exportAgentTracesDb.ts。几个可用于判断结果的行为数据库还不存在时命令会提示No agent host trace database found yet. Run an agent session with chat.agentHost.otel.dbSpanExporter.enabled turned on to populate it.——说明还没有在 DB 模式下跑过 agent 会话存储使用 WAL 模式运行中也可以安全地复制文件或用sqlite3查询导出时若存在-wal/-shm边车文件会一并复制得到的三件套是可直接打开并 checkpoint 的合法 WAL 数据库。排查与限制改了设置没有 trace先确认已 reload window / 重启 VS Codespawn-time 绑定再确认父进程环境没有同名变量把设置顶掉。DB 模式 外部端点的协议限制loopback 一跳固定使用 OTLP/HTTP JSON外部端点为 OTLP/HTTP JSON 时 span 会被转发但外部协议为 protobuf 或 gRPC 时trace 只留在本地 SQLiteprovider 的 logs/metrics 仍直接导出。认证头OTEL_EXPORTER_OTLP_HEADERS如AuthorizationBearer …只能通过环境变量继承传递给 Agent Host企业 managed headers 只作用于 Copilot Chat 扩展的 exporter不会投递给 Agent Host避免密钥泄漏到工具子进程向 provider 子进程投递 managed header 目前也不支持。Codex 0.142 临时过滤DB 模式下 loopback receiver 会丢弃 Codex 的认证轮询 span资源service.namecodex-app-server、span 名auth、code.module.namecodex_login::auth::manager三者同时满足该 span 约每秒两次其他 Codex span 不受影响。标题元数据 spanvscode.agent_host.session.title_changedspan 只在captureContent开启时发出重复设置相同标题不会重复发。备选用仓库内置的 collector 栈extensions/copilot/docs/monitoring/ 目录还提供了一个 docker compose 栈docker-compose.yaml otel-collector-config.yamlOTel Collector 在宿主机4328HTTP和4327gRPC接收 OTLP转发到 Azure Application Insights、本地 JaegerUI 在http://localhost:16687以及 stdout debug 导出器。它是任意 OTLP 兼容 collector 的另一个可选实例需要按文件头部说明设置APPLICATIONINSIGHTS_CONNECTION_STRINGAgent Host 侧只需把chat.agentHost.otel.otlpEndpoint指向http://localhost:4328。用完 Aspire Dashboard 后用docker stop aspire-dashboard停止容器收尾。更完整的管线行为、资源属性与信号路由细节见 OTEL.md实现入口是 agentHostOTelService.ts。【免费下载链接】vscodeVisual Studio Code项目地址: https://gitcode.com/GitHub_Trending/vscode6/vscode创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考