运行时可观测性契约¶
本页定义 Issue #45 的框架内部 telemetry 边界和已完成实现:业务包只依赖
trpcservice/observability 暴露的接口,不直接依赖 OpenTelemetry SDK、OTLP exporter 或日志实现。
默认 provider 为 no-op,因此没有配置 exporter 时请求、Runner 和关闭流程的行为保持不变。
关联关系与稳定命名¶
HTTP 入口创建或提取 W3C trace context,并生成 request_id;子操作沿用同一个 context:
http.request
└── gateway.dispatch
└── runner.execution
├── model.call
├── tool.call
├── storage.operation
└── channel.receive / channel.send
这些 operation 名称是兼容性契约。span 只允许 component、operation、status、
error_class、tenant_hash、app_hash、model_family 和 provider 等受控字段;
不得写入 Secret、token、完整 URL、session/user/message 原文或 request body。取消和
deadline 必须映射为 canceled / timeout 错误类别,provider 原始错误只在进程内分类。
指标目录与标签¶
指标使用单调计数器、直方图和异步 gauge,名称保持稳定:
| 指标 | 类型 | 允许标签 |
|---|---|---|
trpcservice_requests_total |
counter | component, operation, status, error_class |
trpcservice_operation_duration_ms |
histogram | component, operation, provider, status, error_class |
trpcservice_active_executions |
up/down counter | component |
trpcservice_runner_leases |
up/down counter | component, status |
trpcservice_operation_retries_total |
counter | component, operation, provider, error_class |
trpcservice_readiness / trpcservice_shutdown |
gauge | component, status |
标签通过白名单校验;tenant_id、user_id、session_id、message_id、完整 URL 和
原文永远不是标签。高基数关联使用 trace/log 字段或受控 digest。
结构化日志和脱敏¶
统一字段为 request_id、trace_id、component、operation、status、
error_class、duration_ms。集中 Redactor 对 token、API key、DSN、secret_ref、
Authorization、Webhook secret 和用户原文执行负向保护;错误只输出稳定类别,不透传
provider 文本或带敏感值的 stack。
生命周期和降级¶
Provider 必须支持创建、Tracer/Meter/Logger 获取和幂等 Shutdown。exporter
不可用或关闭超时时只能丢 telemetry,不能阻塞业务请求、Runner lease 或进程退出;
所有后台 goroutine 都由 provider context 管理并在关闭时可测试地回收。
Issue #45 实施台账¶
- [x] 契约:provider、context、redaction、sampling 和 operation/label 白名单。
- [x] 代码:默认 no-op provider 与可注入接口。
- [x] 代码:HTTP → Gateway → Dispatcher → Runner 的 context/span 关联(Gateway/Dispatcher 已接入,Runner 通过同一 context 继承)。
- [x] 代码:稳定 operation 名称与错误类别契约;Model、Tool、Storage、Channel 使用通用 hook API 接入。
- [x] 代码:低基数指标、结构化日志、OTLP/HTTP 配置与 exporter 故障降级。
- [x] 测试:取消、deadline、shutdown、无 exporter、脱敏负向和标签白名单。
- [x] 验证:
go test ./...、go test -race ./...、go vet ./...、go build ./...、mkdocs build --strict。
AuditEvent/usage/cost 持久化、Dashboard、告警和租户授权查询已分别在 审计与用量 与 Issue #79 中完成; Session/Memory/Storage 后端、Admin 路由、migration 和 bootstrap 通过对应文档的集成验收。