关联会话、用量与工具事件
选择正确的 OTel 自定义 ID,避免用 metric 聚合值或去重键错误关联会话。
OpenTelemetry metrics 是聚合,不携带 conversation/request/usage_event ID。需要会话级分析时使用 logs,先按 cursor.event.id 去重,再按业务 ID 关联。
ID 的用途
| 属性 | 用途 |
|---|---|
| cursor.conversation.id | 会话;IDE/CLI 是 chat UUID,Cloud Agent 是 bc-… ID,Grok Bot 是 Bot 的 conversation ID |
| cursor.usage_event.id | 模型请求与费用修正的关联键 |
| cursor.request.id | 某些 log 的单次调用 ID,可选 |
| cursor.event.id | 单条事件去重,不能跨事件类型 join |
| cursor.user.account_id | 可选成员 ID,可连接 /teams/members 返回的 id |
api.correction、cloud_agent.、grok_bot. 不带 request.id。用户属性可缺失,团队 key 或服务账号启动的 Cloud Agent 无 owner,不带这些 owner 属性。不要用必填约束丢掉它们。
计算会话用量
按 conversation.id 汇总 api.request 的 input/output/cache token,再连接同会话 skill.activated、hook.execution_complete、cloud_agent.* 等事件。tool.calls 和 cost.usage 都仅是 metric,不能直接分摊到聊天;会话费用需用 token 和费率估算,或连接计费数据。
遇到 api.correction,按 usage_event.id 找到对应 request/error,将整组按不计费处理。这里是账单最终修正,不是新增负数 token metric。
Grok Bot 的回合和调用
cursor.grok_bot.turn.id 关联一轮 action 与该轮模型请求;event.sequence 排序行动,不依赖客户端时钟,序号无需连续。tool_call.id 连接一次工具调用的 tool_result、tool_decision、特定事件及 opt-in tool_io;decision.id 连接人工批准请求、等待与答复。
shell_command 事件自身不带 tool_call.id,不能强制用该键关联所有事件。消息日志使用可选 conversation.turn.id,也不能要求其一定有 grok_bot.turn.id。
subagent 有自己的 turn.id/subagent.id,可用 root_turn.id 汇总到发起回合。其他产品入口暂没有同等 parent rollup;旧 Bot 记录还可能缺 event.sequence/initiated_by,兼容这些可选字段。