Workload 指标接入
September 5, 2026 · View on GitHub
RuntimeObservability.workload 是进程内 facade。它只接受固定 kind,不允许把 session、run、tool 或 MCP 名称放进标签。
const runtime = ctx.get('dshRuntimeObservability')
const endRun = runtime.workload.begin('agent_run')
try {
await runAgent()
} finally {
endRun() // 幂等,可安全放 finally
}
runtime.workload.setQueue('tool', pending.length, oldestAgeSeconds)
runtime.workload.setRecoveryBacklog('ledger', pendingLedgers)
固定集合:
- active/queue:
agent_run | llm | tool | mcp - recovery:
session | task | ledger
setQueue(kind, 0) 会强制把 oldest age 清零;负数、NaN、Infinity 和未知 kind 会抛出 RangeError,防止静默污染时间序列。facade 在 metrics disabled 时仍可调用,便于宿主代码保持单一路径。
宿主集成状态
已确认 continuable subagent 提供稳定的公开 setup/event seam,因此 subagent 生命周期已由插件自动接入。通用 Agent Run、LLM、Tool、MCP queue/recovery facade 仍未接入宿主执行边界。
因此本阶段提交 facade 和 OTLP 指标注册,但不修改 profile 内依赖、不 monkey-patch 构建产物。取得宿主源码后,应分别在以下真实边界接入,并在宿主仓库独立提交:
- Agent Run、LLM、Tool、MCP 执行入口
begin(kind),在finally调用返回的 end。 - 调度器 enqueue/dequeue/cancel 后调用
setQueue,oldest age 来自队首入队时间。 - session/task/ledger 恢复器扫描或状态变更后调用
setRecoveryBacklog。
验收要求:并发用例中 active 精确回零;取消/异常路径不泄漏;空队列 age=0;标签只出现上述固定集合。