2. 遥测数据基础:常见遥测指标、采集原理与采样频率
遥测数据是异常检测模型的“原材料”。原材料质量不行,模型再牛也白搭。这一节我们聊聊遥测数据到底长什么样,怎么采回来的,以及采样频率这个坑。
2.1 常见遥测指标:CPU、内存、IO、网络
遥测指标分四大类。我习惯把它们叫做“主机四件套”。
2.1.1 CPU 指标
CPU 指标不是只有“使用率”这么简单。你想想看,一个进程卡在 IO 等待上,CPU 使用率可能很低,但系统已经慢得不行了。
| 指标名称 | 含义 | 典型阈值 |
|---|---|---|
| user | 用户态 CPU 时间占比 | < 70% |
| system | 内核态 CPU 时间占比 | < 30% |
| iowait | CPU 等待 IO 完成的时间占比 | < 10% |
| idle | 空闲时间占比 | > 20% |
| steal | 虚拟机被宿主机偷走的时间 | < 5% |
我的经验: 别只看 CPU 总使用率。有一次线上告警,CPU 总使用率才 40%,但 iowait 飙到了 35%。查了半天,是磁盘控制器坏了。如果只看总使用率,这个故障根本发现不了。
2.1.2 内存指标
内存指标的核心是“谁在用”和“够不够”。
- total:物理内存总量
- used:已使用的内存(含缓存)
- free:完全空闲的内存
- buff/cache:内核缓存和缓冲区
- available:新进程可用的内存(free + 可回收缓存)
注意: used 高不代表内存不够。Linux 会尽量用空闲内存做缓存。真正要看的是 available。我见过有人用 used/total 算内存使用率,结果一直 90%+,吓得要死,其实 available 还有一半。
2.1.3 IO 指标
IO 指标最容易让人迷惑。因为它有“延迟”和“吞吐”两个维度。
| 指标 | 单位 | 说明 |
|---|---|---|
| r/s, w/s | 次/秒 | 每秒读写请求数 |
| rkB/s, wkB/s | KB/s | 每秒读写数据量 |
| await | ms | IO 请求平均等待时间 |
| svctm | ms | IO 请求实际服务时间 |
| util | % | 磁盘忙闲比例 |
这里有个坑:util 到 100% 不代表磁盘“满了”。它只表示磁盘一直在干活。如果是 SSD,util 100% 可能还能扛住;如果是机械盘,util 超过 80% 延迟就开始飙升了。
2.1.4 网络指标
网络指标分三层看:
- 流量层:带宽使用率、pps(每秒包数)
- 连接层:TCP 连接数、连接状态分布
- 质量层:重传率、丢包率、RTT
核心观点: 网络异常检测不能只看流量。我曾经遇到一个案例,带宽使用率正常,但重传率从 0.1% 跳到了 5%。最后发现是交换机光模块坏了。如果只看流量,这个故障根本抓不到。
2.2 数据采集原理
遥测数据怎么来的?说白了,就两种方式:
- 主动采集:监控系统定期去目标机器拉数据(如 Prometheus 的 pull 模式)
- 被动上报:目标机器主动把数据推送到监控系统(如 Telegraf + InfluxDB 的 push 模式)
我个人的习惯是:核心指标用 pull,边缘节点用 push。为什么?pull 模式好控制采集频率,push 模式容易把监控系统打爆。
具体到每个指标,采集原理也不一样:
| 指标 | 数据来源 | 采集方式 |
|---|---|---|
| CPU | /proc/stat | 读取两次,计算差值 |
| 内存 | /proc/meminfo | 直接读取 |
| IO | /proc/diskstats | 读取两次,计算差值 |
| 网络 | /proc/net/dev | 读取两次,计算差值 |
嗯,这里要注意:CPU、IO、网络都是“差值型”指标。你读到的原始数据是累计值,必须隔一段时间读两次,算出差值,再除以时间间隔,才能得到“每秒”的值。
避坑指南: 我曾经犯过一个错——采集间隔不固定,导致计算出来的速率忽高忽低。后来我强制要求采集器必须用固定间隔,误差控制在 1% 以内。否则模型训练出来的基线全是噪声。
2.3 采样频率与精度
采样频率怎么定?这是个经典问题。太密浪费资源,太疏抓不到异常。
我一般按这个原则来:
- CPU/内存:10-30 秒一次。变化慢,没必要太密。
- IO:5-10 秒一次。IO 波动大,太疏了看不到毛刺。
- 网络:5-10 秒一次。网络流量突发性强。
- 业务指标:1-5 分钟一次。业务指标变化更慢。
你想想看,如果采样间隔是 60 秒,一个持续 30 秒的 IO 毛刺就完全被漏掉了。但如果你把采样间隔改成 1 秒,数据量直接膨胀 60 倍,存储成本受不了。
所以我的建议是:先粗后细。先用 30 秒间隔跑一段时间,看看指标波动范围。如果发现某个指标经常出现短时尖峰,再单独加密它的采样频率。
核心观点: 采样频率不是越高越好。精度也不是越细越好。关键是“够用”。我见过一个团队把 CPU 采样频率设成 1 秒一次,一年下来存储费用比服务器费用还高。而他们其实只需要 10 秒一次的精度就能检测出 90% 的异常。
2.4 知识体系总览
下面这张图把遥测数据的基础知识串起来了。你可以把它当作本章的“地图”。
这张图把本章的核心内容串起来了。从四大指标出发,到采集原理,再到采样频率的决策。你可以在后续章节中随时回来参考这张图。
2.5 小结
遥测数据基础就聊这么多。记住三件事:
- 指标要全:别只看 CPU 使用率,iowait、重传率这些“隐藏指标”往往更关键。
- 采集要稳:固定采样间隔,差值型指标两次读取之间不能有抖动。
- 频率要够:先粗后细,别一上来就 1 秒一次,存储成本扛不住。