AI 编码代理(GitHub Copilot、Claude Code、OpenClaw 等)正在迅速成为工程团队交付软件的一部分。 采用是最简单的部分。 较难的问题紧随其后:
- 我们花多少钱? 哪些模型、哪些团队和哪些任务驱动成本?
- 谁实际上在使用哪个代理,并且用于什么目的? 是否按预期方式调用工具?
- 体验是否可靠? 代理在何处停止、出错或让会话卡住?
- 我们能审核代理的所作所为吗? 安全与符合性评审的提示、工具调用和模型选择。
Grafana 为跨多个编码智能体的这些问题提供了一个单一的解决方案。 本指南逐步讲解端到端的设置:构建遥测管道,将每个智能体指向它,并导入现成的仪表板。
Note
OpenTelemetry 收集器(包括 contrib 分发版)和 Azure Monitor 导出程序是开源组件。 仅通过社区渠道提供对这些组件的支持。 若要提交 bug 报告、请求新功能或报告其他问题,请在 opentelemetry-collector-contrib 存储库中创建一个新问题。 Azure支持涵盖此管道中的Azure服务:Application Insights、Log Analytics 和 Grafana。
你将看到的内容
三个专用的 Grafana 仪表板直观显示 AI 编码代理很重要的信号,包括成本、令牌消耗、会话、模型使用情况、工具调用、延迟和错误:
| 仪表板 | 它显示的内容 | Link |
|---|---|---|
| GitHub Copilot | 操作、输入/输出令牌、聊天会话、工具调用、响应时间和按模型的TTFT | aka.ms/amg/dash/gh-copilot |
| Claude Code | 成本、会话、用户提示、API 请求/错误、每日成本和令牌趋势、每模型细分、工具使用情况分析 | aka.ms/amg/dash/claude-code |
| OpenClaw | 消息, 唯一聊天, 响应时间, LLM 调用, 令牌使用情况, 缓存读取, 停滞会话, 模型使用情况细分 | aka.ms/amg/dash/openclaw |
本指南面向谁
相同的仪表板为不同的受众提供服务:
- 平台和开发人员体验团队 - 跟踪采用趋势、按团队和模型支出,以及显示效率低下的使用模式。
- 工程领导 - 将代理活动与交付进行关联分析,回答“这项投资是否有回报?”
- 安全和治理团队 - 查看提示、工具调用以及合规性和风险的模型选择。
- 单个开发人员和呼叫工程师 - 调试代理行为、工具调用缓慢或会话停滞。
工作原理
- 每个 AI 编码代理(GitHub Copilot、Claude Code 或 OpenClaw)都会向配置的 OTLP 终结点发出 OpenTelemetry 跟踪、指标和日志。
- OpenTelemetry Collector在该终结点终止 OTLP,并使用Azure Monitor导出程序将数据转发到 Application Insights。
- Grafana 使用 Azure Monitor 数据源(Log Analytics/KQL)查询 Application Insights,以便呈现仪表板。
OpenTelemetry 收集器和 Application Insights 管道属于基础结构,是一次性配置。 本指南接下来将逐步介绍这一内容。
先决条件
- 应用程序信息 (Application Insights) 资源。 如果您还没有,请创建一个并将其附加到 Log Analytics 工作区。
- 已安装 Docker。
- Grafana 11.6 或更高版本(例如,Azure 托管 Grafana),其中包含可读取 Application Insights 资源的Azure Monitor数据源。
步骤 1:运行 OpenTelemetry 收集器
部署一个配置了 Azure Monitor Exporter 的 contrib( 发行版)。 收集器将 OTLP 从每个代理连接到 Application Insights 数据引入 API。
获取 Application Insights 连接字符串
收集器需要 Application Insights 连接字符串才能导出遥测数据。 若要从Azure门户检索它,请执行以下操作:
- 登录到 Azure 门户。
- 请访问您的 Application Insights 资源。
- 在左侧菜单中,选择“ 概述”。
- 在“概要”面板中找到 “连接字符串 ”字段,然后选择其旁边的复制图标。
值如下所示:
InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://<region>.in.applicationinsights.azure.com/;LiveEndpoint=https://<region>.livediagnostics.monitor.azure.com/;ApplicationId=00000000-0000-0000-0000-000000000000
Important
将连接字符串视为机密。 有权访问它的任何人都可以将数据发送到 Application Insights 资源。
创建收集器配置
将以下内容另存为 otel-collector-config.yaml,将 <YOUR-KEY> 和 <region> 占位符替换为连接字符串中的值:
receivers:
otlp:
protocols:
http:
endpoint: 0.0.0.0:4318
grpc:
endpoint: 0.0.0.0:4317
exporters:
azuremonitor:
connection_string: "InstrumentationKey=<YOUR-KEY>;IngestionEndpoint=https://<region>.in.applicationinsights.azure.com/;LiveEndpoint=https://<region>.livediagnostics.monitor.azure.com/"
service:
pipelines:
traces:
receivers: [otlp]
exporters: [azuremonitor]
metrics:
receivers: [otlp]
exporters: [azuremonitor]
logs:
receivers: [otlp]
exporters: [azuremonitor]
使用 Docker 运行收集器
使用 contrib 映像(包括Azure Monitor导出程序)启动收集器:
docker run -d --name otel-collector -p 4318:4318 -p 4317:4317 -v $(pwd)/otel-collector-config.yaml:/etc/otelcol-contrib/config.yaml otel/opentelemetry-collector-contrib:latest
下一部分中的示例假定收集器在本地运行,并且可以通过http://localhost:4318访问。 默认情况下,OTLP/HTTP 接收器侦听端口 4318 ,本指南中的所有三个代理都使用 OTLP/HTTP。 对于共享或远程收集器,请替换为你自己的终结点。
步骤 2:将每个 AI 编码代理指向收集器
每个代理都有自己的方法来启用 OpenTelemetry 导出。 共享目标是收集器的 OTLP/HTTP 接口。
GitHub Copilot
GitHub Copilot仪表板在Grafana中的屏幕截图,显示操作、令牌、会话、工具调用和每模型延迟。
当 GitHub Copilot 通过 Visual Studio Code 设置进行配置时,会发出 OpenTelemetry 信号。 有关详细信息,请参阅 Monitoring GitHub Copilot 代理程序。
将以下内容添加到 Visual Studio Code settings.json:
{
"github.copilot.chat.otel.enabled": true,
"github.copilot.chat.otel.exporterType": "otlp-http",
"github.copilot.chat.otel.otlpEndpoint": "http://localhost:4318",
"github.copilot.chat.otel.captureContent": true
}
GitHub Copilot 仪表盘显示总操作、输入/输出令牌、聊天会话、工具调用以及每个模型的延迟(平均持续时间和 P50/P90 TTFT),对于发现模型混合偏差和工具缓慢非常有用。
Claude Code
Claude Code 从环境变量中读取遥测配置。 有关详细信息,请参阅 “监视 Claude 代码”使用情况。
将以下内容添加到 Claude 代码 settings.json:
{
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
"OTEL_METRICS_EXPORTER": "otlp",
"OTEL_LOGS_EXPORTER": "otlp",
"OTEL_EXPORTER_OTLP_PROTOCOL": "http/protobuf",
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://localhost:4318",
"OTEL_LOG_USER_PROMPTS": "1",
"OTEL_LOG_TOOL_DETAILS": "1",
"OTEL_METRICS_INCLUDE_VERSION": "true"
}
}
小窍门
OTEL_LOG_USER_PROMPTS 和 OTEL_LOG_TOOL_DETAILS 丰富了仪表板的每个用户面板和工具使用面板。 如果不想捕获提示文本(例如,在包含敏感内容的受管制环境中),请省略它们。
Claude Code 仪表板按模型细分每日成本和令牌使用情况,展示 API 错误,并对调用频率最高的工具进行排名,这有助于管理支出和发现工具调用的回归问题。
OpenClaw
OpenClaw 网关通过其日志记录和遥测配置发布 OpenTelemetry 信号。有关详细信息,请参阅 OpenClaw - 导出到 OpenTelemetry。
将以下内容添加到网关的遥测配置:
{
"enabled": true,
"endpoint": "http://localhost:4318",
"protocol": "http/protobuf",
"serviceName": "openclaw-gateway",
"traces": true,
"metrics": true,
"logs": true,
"sampleRate": 1,
"flushIntervalMs": 5000
}
Important
serviceName 必须为 openclaw-gateway。 OpenClaw 仪表板通过 cloud_RoleName == "openclaw-gateway" 进行筛选,该筛选项派生自这个字段。
OpenClaw 仪表板按通道、响应时间百分位数、缓存读取令牌和停滞会话跟踪消息,这对于会话运行状况和缓存效率驱动成本和用户体验的聊天样式部署非常有用。
步骤 3:验证数据是否到达 Application Insights
代理和收集器运行后,在导入仪表板之前确认遥测数据已到达。
在 Azure 门户中,转到 Application Insights 资源,然后选择 Logs。
为每个源运行 KQL 检查:
// GitHub Copilot dependencies | where timestamp > ago(1h) | where cloud_RoleName == "copilot-chat" | take 50// Claude Code customMetrics | where timestamp > ago(1h) | where name startswith "claude_code" | take 50// OpenClaw dependencies | where timestamp > ago(1h) | where cloud_RoleName == "openclaw-gateway" | take 50
如果有行返回,管道正常工作。 否则,请检查收集器日志中是否存在导出错误。 典型的罪魁祸首是连接字符串不正确、Application Insights 引入终结点的出口受阻或防火墙的 OTLP 接收器端口。
步骤 4:将仪表板导入 Grafana 或在 Azure 门户中访问它们
每个仪表板都有自己的导入流和变量引用:
这三个都需要 Grafana 11.6 或更高版本和一个 Azure Monitor 数据源,且该数据源须有权访问包含 Application Insights 资源的订阅。
接下来往哪里走
- 添加更多代理。 同一收集器处理任何 OTLP 发出工具。 随着您的团队开始实施新的编码代理,请将它们指向同一个终结点,并参与创建或构建仪表板。
- 设置警报。 使用 Application Insights 警报规则或 Grafana 针对相同数据发出警报,例如,每日成本高于阈值、持续 API 错误率或停滞会话计数。
- 与利益干系人共享。 将仪表板固定到 Grafana 播放列表或将所选面板嵌入到团队的状态页面中,以便采用、成本和可靠性对领导层保持可见。
相关内容
- OpenTelemetry 收集器
- Azure Monitor 导出程序 用于 OpenTelemetry Collector
- Application Insights 连接字符串
- 监控 GitHub Copilot 代理
- 监视 Claude 代码使用情况
- OpenClaw - 导出到 OpenTelemetry