- 审计误读订正:deprecated_per_day 是计数器(无分母),不给 _samples/_valid 是对的 - 新增 deprecated_total:区分「今天 0 条」与「从未统计过」(0 的二义性) - executor t8:原 Condition:0.1 从不生效(判据硬编码 >5)→ Condition:5.0 + 读 t.Condition,行为不变 - 单测钉住:RecordDeprecation 双计数、t8 阈值真的可配、计数器不带率键 - docs/metrics-semantics.md:counter/rate/mean 三种读法 + 0 的二义性铁律
2.3 KiB
2.3 KiB
织忆指标语义:counter / rate / mean(/api/v1/metrics)
2026-10-26 建立。起因:有效性审计把
deprecated_per_day(计数器)当成率指标, 报出「0 样本却判 valid=None ⇒ 缺最小样本门」。计数器没有分母,「样本门」对它无定义 —— 属探针模型错配,不是指标缺陷。本文件是给下游(审计脚本 / 看板 / 人)的唯一口径。
三类指标,三种读法
| 类型 | 命名特征 | 自带字段 | 怎么用 | 例子 |
|---|---|---|---|---|
| counter 计数器 | *_per_day / *_total / *_count |
无 _samples / _valid |
直接读绝对值,跨时间比大小;不要算比率、不要报「样本不足」 | deprecated_per_day、deprecated_total、distill_success_count |
| rate 比率 | *_rate |
_samples(分母)+ _valid(1=可判 / 0=不可判 / -1=N/A) |
_valid != 1 时不得当结论;_samples 小于门槛时只报「待积累」 |
auto_resolve_rate、recall_usefulness_rate |
| mean 均值 | avg_* |
_samples + _valid |
同上:无分母就不下判断 | avg_distill_loss |
铁律:0 永远有两种含义 —— 「今天确实没有」和「根本没在统计」。
- 计数器必须配一个累计值来区分:
deprecated_per_day=0+deprecated_total=0⇒ 从未统计过;per_day=0+total=137⇒ 统计活着,只是今天没发生。 - 率指标必须配
_valid/_samples,分母退化时返回metricNA(-1),不给 1(给 1 会被读成满分)。
触发器阈值也用同一套语义
internal/selfoptimize/executor.go 的 t8(TDecayCritical → archive_or_boost):
- 判据读的是计数器
deprecated_per_day(条/天),阈值由t8.Condition承载,默认 5 条/天。 - 2026-10-26 修正:原先
Condition: 0.1但判据函数里硬编码> 5,配置写了从不生效。 现改为Condition: 5.0+ 判据读t.Condition(行为不变,但配置真的能被改)。 - 若要改成「率」语义,需要先有分母(当日活跃写入量),否则别动 —— 那会变成另一个探针错配。
已知遗留
- 审计脚本侧对计数器发「样本不足」告警的白名单修复,归
t_44c07eca(脚本侧统一处理,避免多处各改一遍)。