1. 课程导论:PSI漂移概念、实时监控的重要性、Kafka在监控中的角色
1.1 什么是PSI漂移?
PSI(Pressure Stall Information) 是 Linux 内核 4.20+ 引入的指标,用于量化系统资源(CPU、内存、IO)因竞争导致的任务停滞时间比例。当某个资源成为瓶颈时,任务会进入不可运行或不可中断的等待状态,PSI 直接反映这种“压力”对工作负载的影响。
PSI 漂移 指在正常基线之上,PSI 指标出现持续性、非瞬态的升高或波动,通常由以下原因引发:
- 资源争抢加剧:突发流量、cgroup 限制不当、同宿主其他租户干扰。
- 内核/驱动异常:内存回收抖动、IO 调度延迟、NUMA 失衡。
- 配置退化:swap 阈值偏移、CPU 节流器参数变化。
关键区分:PSI 漂移 ≠ 瞬时尖峰。瞬时尖峰通常由正常突发引起(如定时任务、编译),而漂移是基线持续上移,代表系统健康度恶化。
1.2 实时监控PSI漂移的重要性
传统监控依赖 CPU 使用率、内存占用等均值指标,但均值会掩盖短时资源饥饿。PSI 直接度量任务实际等待时间,能更早发现亚健康状态。下表对比了传统指标与 PSI 的差异:
| 维度 | 传统指标(CPU/内存利用率) | PSI 指标 |
|---|---|---|
| 敏感度 | 对短时争抢不敏感 | 秒级感知任务停滞 |
| 误报率 | 高(均值拉平后仍正常) | 低(直接反映等待比例) |
| 根因定位 | 需结合多指标推断 | 按资源类型(CPU/MEM/IO)分类 |
| 告警时效 | 分钟级延迟 | 秒级(配合流处理) |
实时监控 PSI 漂移的价值:
- 提前干预:在 SLA 违约前发现资源饥饿趋势。
- 容量规划:量化真实压力,避免过度或不足配置。
- 故障隔离:区分是宿主级问题还是租户级干扰。
1.3 Kafka在PSI监控中的角色
Kafka 作为高吞吐、低延迟的分布式消息系统,在 PSI 实时监控架构中承担数据中枢角色:
- 采集层缓冲:各节点 Agent 将 PSI 指标推送到 Kafka Topic,削峰填谷,防止后端存储被突发流量打满。
- 流处理管道:Kafka Streams / ksqlDB 对 PSI 数据进行窗口聚合、基线计算、漂移检测。
- 多消费者解耦:告警引擎、可视化看板、长期存储可独立消费同一 Topic,互不影响。
- 重放与回溯:Kafka 的日志保留机制支持历史 PSI 数据重放,用于漂移模式分析和模型调优。
架构要点:Kafka 的 Topic 分区策略需按
host_id + resource_type 设计,保证同一主机的 PSI 数据顺序消费,避免乱序导致漂移误判。
1.4 PSI指标字段与Kafka消息结构
Linux PSI 接口输出格式如下(以 CPU 为例):
# cat /proc/pressure/cpu
some avg10=0.85 avg60=0.32 avg300=0.10 total=1234567890
Kafka 消息体建议采用 JSON 格式,包含元数据与指标值:
{
"host_id": "prod-web-01",
"resource": "cpu",
"timestamp": 1712567890,
"avg10": 0.85,
"avg60": 0.32,
"avg300": 0.10,
"total": 1234567890,
"cgroup_path": "/"
}
注意:
total 字段为单调递增计数器,消费者需记录上次值并计算差值,避免因重启导致漂移误报。
1.5 漂移检测的基线模型
实时监控中常用的漂移检测方法:
| 方法 | 原理 | 适用场景 |
|---|---|---|
| 固定阈值 | avg10 > 5.0 告警 | 已知硬件上限,简单直接 |
| 滑动窗口百分位 | 当前值 > 过去1h的P99 | 适应周期性负载变化 |
| 指数加权移动平均(EWMA) | 实时值与平滑基线偏差 | 对缓慢漂移敏感 |
| 季节性分解 | 去除日/周周期后检测残差 | 业务模式稳定的长期监控 |
本教程后续章节将重点讲解滑动窗口百分位 + EWMA 组合模型在 Kafka Streams 中的实现。
1.6 课程学习路径
本教程共 30 章,按以下阶段组织:
- 基础篇(1-5章):PSI 原理、Kafka 环境搭建、采集 Agent 开发。
- 核心篇(6-15章):Kafka Streams 漂移检测、窗口聚合、基线模型编码。
- 进阶篇(16-25章):多租户隔离、告警降噪、性能调优、容灾设计。
- 实战篇(26-30章):生产部署、Grafana 看板、故障演练、案例复盘。