投影追踪与回放
概览
当 路由回放 采集路由记录时,每条记录除了 projections(匹配的输出名)和 projection_scores(聚合数值分数)外,还可以包含结构化的 projection_trace 字段(JSON)。
该 trace 解释该请求上分区归约、加权分数和映射阈值如何表现,因此运维人员和 dashboard 用户可以调试路由,而不必只从标量分数推断内部过程。
主要优势
- 回放记录保持自描述:同一持久化路径同时携带聚合分数和结构化可解释性 JSON。
- 分区竞争者列表、softmax 胜者、映射边界距离和每个 输入的分数贡献出现在一个对象中。
- 载荷中的版本
1为增量字段留出空间,而无需改写较旧的消费者。
解决什么问题?
匹配的投影名(projections)和数值摘要(projection_scores)回答选了什么,但它们不保留分区为何选出胜者,或映射离下一阈值档有多近。
projection_trace 为审计、支持和 insights 视图补上这一缺口,而无需在查询时额外推断。
何时使用
- 你运行 路由回放(memory、Redis 或 PostgreSQL),并希望每条记录带有可解释性列。
- 你对由回放支撑的流程使用 dashboard Insights 下钻,并需要可折叠的投影详情。
- 你正在构建对照真实流量(而不只是静态配置)校验投影行为的工具。
配置
评估投影时会发出可解释性载荷;存储取决于回放后端配置:
- 使用 Router 回放配置 中描述的持久化设置启用回放。
- 对于 PostgreSQL,确保迁移包含 JSONB 列
projection_trace,以及projections和projection_scores。
没有单独的“trace 开/关”开关——只要投影运行且记录器持久化富化后的 SignalResults/Record,tracing 就是隐式的。
Schema 版本 1
该 trace 已版本化,供前向兼容的消费者使用。
partitions:每个在此请求上运行归约的routing.projections.partitions组一条。记录带raw_score的contenders(语义为softmax_exclusive时还有normalized_score)、所选winner、winner_score(路由器随后存在信号上的值)、raw_winner_score、margin(比较分数中第一名减第二名——softmax 用归一化权重,否则用原始置信度),以及分区合成其配置默认成员时的default_used。scores:每个已配置投影分数一条,带total和每个输入的contribution(weight * value),与加权和运行时一致。mappings:每个投影映射一条。按顺序对每个阈值档记录matched、boundary_distance(到最近活动阈值的距离),并对第一个匹配档记录该档使用的selected_output、sigmoidconfidence和boundary_distance。
在哪里查看
- Dashboard → Insights:打开一条由回放支撑的记录。Projection trace 部分显示分区胜者表(存在时带竞争者分解)、分数输入和映射决策(包括边界距离和每个输出的阈值步骤列表),以及可折叠的原始 JSON。
- 存储:同一对象通过配置的路由回放后端持久化在回放
Record上。PostgreSQL 将其存在projection_traceJSONB 列中。
Traces 只从投影契约和已评估的信号结果派生——没有不透明的旁路模型。
投影 traces 包含规则名、分数、竞争者和所选输出。即使未启用正文采集,也应把它们视为策略和流量元数据,并相应限制回放访问。Trace schema 实现于
projectiontrace/trace.go。