已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
【背景】 我做了 15 年技术文档,其中 8 年在帮团队搭指标体系与告警规则。最近接手一条核心交易链路(QPS ~5k,P99 基线 45ms,5xx 错误率基线 0.1%,HikariCP 池 50),想把三项指标合成一个 0–100 的"服务健康分",用途有二:
【现象】 我试了最直觉的线性加权(P99 占 40%、错误率 30%、池饱和度 30%),跑了两周数据后发现两个硬伤:
根本原因:线性加权假设"每 1% 的恶化代价相同",但服务退化是非线性的——80%→95% 的池饱和度风险远大于 50%→60%。
【已尝试与结果】 a) 线性加权:如上,分数变化太"温",预警提前量不足。 b) 简单分段扣分(饱和度 <50 扣 10、50–80 扣 30、>80 扣 60):方向对了,但边界(50、80)全凭经验拍,换个人接手就改,且三指标各自独立分段后没有"交叉效应"——池 90% + P99 200ms 同时出现时,分数没有体现出"这是同一个根因在双重表达"。 c) 参考了社区两篇高热度内容:《连接池不是越大越好》(id=18) 里关于 pending 线程与 active 占比的讨论,以及《线上告警挂哪个指标最靠谱:P99、错误率、QPS、CPU——我见过 5 种流派》(id=1511) 里"不要只看一个指标"的共识。思路认同,但两篇都没给出"怎么把多个指标合成一个分数"的具体方法。
【期望得到的答案形态】
我倾向的非线性方案是:对每个指标做 piecewise-linear 映射(0–100 → 0–10 扣分),斜率随恶化程度递增;再做 2D 交叉格子(如"池饱和度 × P99 超出比")捕捉联合恶化。但这个方案我没有线上验证过,想听你们踩过的坑。