4. PSI 监控工具介绍:从内核接口到生产级采集
PSI 指标的内核接口是统一的,但生产环境需要将原始数据转化为可告警、可可视化的时间序列。本章介绍三种核心工具:内核 proc 文件、轻量级 CLI 工具 psi、以及 Prometheus 生态的 psi_exporter。理解它们的差异与适用场景,是后续设定阈值的基础。
4.1 内核原始接口:/proc/pressure
Linux 内核 4.20+ 通过 /proc/pressure 目录暴露三个文件,分别对应 CPU、内存、I/O 的 PSI 数据。这是所有上层工具的数据源。
| 文件路径 | 资源类型 | 输出格式示例 |
|---|---|---|
/proc/pressure/cpu |
CPU 等待 | some avg10=0.00 avg60=0.00 avg300=0.00 total=0 |
/proc/pressure/memory |
内存回收 | some avg10=0.00 avg60=0.00 avg300=0.00 total=0 |
/proc/pressure/io |
I/O 等待 | some avg10=0.00 avg60=0.00 avg300=0.00 total=0 |
字段说明:
- some:至少有一个任务因资源不足而 stall 的时间占比。
- full:所有非空闲任务同时 stall 的时间占比(仅 memory 和 io 有)。
- avg10 / avg60 / avg300:过去 10 秒 / 60 秒 / 300 秒的滑动平均百分比。
- total:系统启动以来的累计 stall 微秒数。
生产建议: 直接读取
/proc/pressure/* 适合脚本验证,但不适合大规模采集。内核接口无历史存储、无聚合、无告警逻辑,必须配合上层工具使用。
4.2 轻量级 CLI 工具:psi
psi 是一个用 Go 编写的开源命令行工具,专门用于实时观察 PSI 指标。它不依赖任何外部服务,适合在单机排障时快速查看压力状态。
安装与使用:
# 从 GitHub Release 下载二进制
wget https://github.com/xxxx/psi/releases/latest/download/psi-linux-amd64
chmod +x psi-linux-amd64
sudo mv psi-linux-amd64 /usr/local/bin/psi
# 实时监控(每秒刷新)
psi watch
# 查看当前快照
psi snapshot
输出示例:
┌──────────┬──────────┬──────────┬──────────┐
│ Resource │ avg10 │ avg60 │ avg300 │
├──────────┼──────────┼──────────┼──────────┤
│ cpu │ 0.00% │ 0.00% │ 0.00% │
│ memory │ 0.50% │ 0.30% │ 0.10% │
│ io │ 2.10% │ 1.80% │ 1.20% │
└──────────┴──────────┴──────────┴──────────┘
适用场景: 临时诊断、容器内快速验证、无 Prometheus 环境下的应急排查。不适合长期存储和告警。
4.3 生产级采集:Prometheus psi_exporter
psi_exporter 是 Prometheus 生态的专用 exporter,将 /proc/pressure 指标转换为 Prometheus 格式的 metrics,支持标签、聚合、告警规则集成。
架构位置:
部署示例:
# 使用 systemd 管理 psi_exporter
cat <<EOF | sudo tee /etc/systemd/system/psi_exporter.service
[Unit]
Description=PSI Exporter
After=network.target
[Service]
ExecStart=/usr/local/bin/psi_exporter --web.listen-address=:9100
Restart=always
User=nobody
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now psi_exporter
暴露的 Prometheus metrics 示例:
# HELP psi_cpu_some_avg10 CPU PSI some avg10 percentage
# TYPE psi_cpu_some_avg10 gauge
psi_cpu_some_avg10 0.0
# HELP psi_memory_some_avg10 Memory PSI some avg10 percentage
# TYPE psi_memory_some_avg10 gauge
psi_memory_some_avg10 0.5
# HELP psi_io_full_avg10 IO PSI full avg10 percentage
# TYPE psi_io_full_avg10 gauge
psi_io_full_avg10 2.1
4.4 工具选型对比
| 维度 | /proc/pressure | psi CLI | psi_exporter |
|---|---|---|---|
| 数据持久化 | 无 | 无 | 通过 Prometheus 存储 |
| 告警能力 | 无 | 无 | 支持 Prometheus 告警规则 |
| 可视化 | 无 | 终端表格 | Grafana 仪表盘 |
| 多机聚合 | 无 | 无 | 支持 |
| 适用规模 | 单机调试 | 单机排障 | 生产集群 |
| 资源开销 | 极低 | 低 | 中(Go 进程) |
注意: 不要在生产环境直接使用
cat /proc/pressure/* 做高频轮询(如每秒一次)。内核接口的读取本身有轻微开销,高频读取可能干扰 PSI 统计精度。推荐使用 psi_exporter 的默认采集间隔(15s)。
4.5 本章小结
- /proc/pressure 是内核原始接口,提供 some/full 和 avg10/60/300 四个维度的数据。
- psi CLI 适合单机快速诊断,无持久化能力。
- psi_exporter 是生产环境的标准选择,与 Prometheus + Alertmanager + Grafana 形成完整可观测链路。
- 后续章节的阈值设定和告警规则,均基于 psi_exporter 暴露的 metrics 进行配置。