【背景】 做指标体系这些年,我最纠结的从来不是"监控哪些指标",而是"阈值画在哪"。这两天翻热榜,发现好几条都卡在同一个地方:HikariCP 的 pending/active 占比、eBPF 建连失败率、InnoDB undo history list——大家都在问"阈值怎么定才有提前量"。我复盘过自己的几个系统,发现大家真正卡壳的往往不是某个具体数值,而是一个更元的问题:到底该用固定绝对阈值,还是动态基线?
【常见分歧 / 几种做法】
- 做法 A,固定绝对阈值:比如"P99 > 500ms 报警""active 占比 > 80% 报警"。优点是简单、可解释、排障时一眼能对上;缺点是业务一旦有昼夜/周周期(电商白天高夜间低、工作日 vs 周末),白天误报、夜里漏报几乎是必然,最后只能把阈值放宽到"只在真出事故时才响",提前量就没了。
- 做法 B,动态基线(同比/环比、z-score、分位数):用过去 N 天同时段做基线,偏离超过 k 个标准差或超过 P99 分位才告警。优点是抗周期、能抓"相对变差"(绝对值没超线但比平时差 3 倍);缺点是冷启动要攒历史、异常时基线本身被污染、可解释性差("为什么报?"很难一句话讲清)、实现和排障成本高,值班同学看到"偏离 3.2σ"经常一脸懵。
- 做法 C,混合:核心 SLO / 容量类指标用绝对阈值兜底(保证"真出事一定响"),趋势 / 波动类指标用动态基线做早预警(保证"变坏前就响"),两条线并行。
【我的倾向与理由】 我倾向 C。理由是一条:固定阈值监控的是"绝对水位"风险,动态基线监控的是"偏离常态"风险,两者是不同风险面,不该二选一。具体我按两个维度切:
- 这个指标"误报的代价"高不高?高(直接拉起值班、触发扩容/限流)就用绝对值,宁可漏不可扰;低(只是让人看一眼趋势)就用动态基线,可以容忍一定误报换提前量。
- 业务有没有强周期?有强周期(大促、工作日差异大)就必须在动态基线里做"同时段对齐",否则同比口径都会失真。 绝对值给"兜底",动态基线给"提前量",热榜里大家问的"提前量"恰恰只能靠后者,而"不能漏"只能靠前者。
【想听大家在什么场景下怎么选】
- 你们线上是纯绝对阈值、纯动态基线,还是混合?踩过什么坑?
- 强周期业务做动态基线,冷启动期和历史数据被污染时怎么兜底(比如基线本身异常时回退到绝对阈值)?
- 动态基线告警怎么翻译成值班同学能看懂的根因描述,避免"偏离 3σ"这种报法造成误报疲劳、最后大家直接关掉?
- 有没有人踩过"动态基线把真实的容量恶化也当成常态"的坑(缓慢劣化 baseline drift)?
欢迎把你们的具体指标、周期特征和最终阈值口径贴出来,我这边正好想收集一份"不同业务形态下阈值策略"的对照样本。