1. PSI 漂移告警概述

1.1 PSI 指标定义

PSI(Pressure Stall Information)是 Linux 内核 4.20+ 引入的资源压力量化指标,用于衡量 CPU、内存、IO 三类资源因竞争导致任务停滞的时间占比。PSI 以 /proc/pressure/ 下的三个伪文件暴露原始数据:

资源类型 文件路径 核心字段 含义
CPU /proc/pressure/cpu some avg10/60/300 至少一个任务因 CPU 饥饿而等待的时间占比
内存 /proc/pressure/memory some avg10/60/300 + full avg10/60/300 some:至少一个任务因内存不足等待;full:所有任务均因内存等待
IO /proc/pressure/io some avg10/60/300 + full avg10/60/300 some:至少一个任务因 IO 阻塞等待;full:所有任务均因 IO 阻塞
关键区别: some 表示“至少一个任务受影响”,full 表示“所有可运行任务均受影响”。full 值越高,说明资源瓶颈越严重,对整体吞吐的打击越彻底。

1.2 漂移概念

“漂移”指 PSI 指标在时间维度上的基线偏移。正常运行时,PSI 各窗口(avg10 / avg60 / avg300)的数值在特定负载下保持相对稳定;当系统行为或配置发生变化,导致 PSI 值持续偏离历史基线,即发生漂移。漂移的典型表现:

  • 均值爬升: avg10 从 0.5% 逐步升至 5%,且持续超过 1 小时。
  • 窗口背离: avg10 远高于 avg300,说明近期突发压力,但长期基线未变。
  • full/some 比率恶化: 内存 full 值从 0.1% 升至 2%,表明内存瓶颈从偶发变为常态。
漂移 ≠ 毛刺: 毛刺是瞬时尖峰(秒级),漂移是分钟级到小时级的持续偏移。告警规则引擎必须区分二者,否则会触发大量无效告警。

1.3 告警在 SRE 中的重要性

PSI 漂移告警是 SRE 容量规划、故障定位、变更风控的第一道防线。其核心价值体现在三个层面:

  1. 提前发现资源瓶颈: 在 CPU 使用率或内存占用达到 100% 之前,PSI 漂移已暴露任务等待加剧,为扩容争取 5~30 分钟窗口。
  2. 区分真实负载与噪声: 结合 some 与 full 的漂移方向,可判断是局部争用还是全局瓶颈,避免误判。
  3. 量化变更影响: 上线新版本或调整内核参数后,PSI 基线漂移是衡量变更是否引入资源压力的客观指标。
常见陷阱: 直接使用固定阈值(如 PSI > 10%)告警,在低负载时段会漏报,在高负载时段会误报。必须引入动态基线 + 漂移检测机制,才能适配不同业务周期的资源画像。

1.4 PSI 漂移检测逻辑框架

下图展示 PSI 漂移告警规则引擎的核心检测流程,从原始指标采集到最终告警收敛:

PSI 漂移检测逻辑框架 PSI 漂移检测逻辑框架 原始指标采集 /proc/pressure/{cpu|memory|io} 滑动窗口基线计算 1h / 6h / 24h 历史分位数 漂移检测引擎 当前值 vs 基线 > 阈值 × 持续周期 告警收敛与分级 P0/P1/P2 + 抑制 + 聚合 通知与行动 钉钉 / 短信 / 自愈动作 每个环节均可独立调优:基线窗口长度、漂移阈值、持续周期、收敛策略

1.5 漂移告警 vs 固定阈值告警

对比维度 固定阈值告警 漂移告警
阈值设定 人工指定静态值(如 PSI > 10%) 基于历史数据自动计算动态基线
适应能力 无法适配业务潮汐、版本变更 自动跟随系统负载变化调整基线
误报率 高(低负载时漏报,高负载时误报) 低(仅对偏离基线的持续偏移告警)
漏报率 高(缓慢爬升不易触发固定阈值) 低(持续偏移超过漂移阈值即触发)
运维成本 需频繁人工调整阈值 基线自动更新,减少人工干预
实践建议: 在引入漂移告警的初期,建议同时保留固定阈值作为“兜底”告警,待漂移模型稳定运行 2~4 周后,再逐步将固定阈值告警降级为次要通知或关闭。