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 网络指标

网络指标分三层看:

  1. 流量层:带宽使用率、pps(每秒包数)
  2. 连接层:TCP 连接数、连接状态分布
  3. 质量层:重传率、丢包率、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 知识体系总览

下面这张图把遥测数据的基础知识串起来了。你可以把它当作本章的“地图”。

遥测数据基础 · 知识体系 遥测数据基础 CPU 指标 内存指标 IO 指标 网络指标 数据采集原理 采样频率与精度 主动采集 (Pull) 被动上报 (Push) CPU/内存: 10-30s IO/网络: 5-10s 核心原则 1. 差值型指标必须固定采样间隔,否则基线全是噪声 2. 采样频率不是越高越好,够用就行 3. 先粗后细:先用 30s 间隔跑,再针对波动大的指标加密

这张图把本章的核心内容串起来了。从四大指标出发,到采集原理,再到采样频率的决策。你可以在后续章节中随时回来参考这张图。

2.5 小结

遥测数据基础就聊这么多。记住三件事:

  1. 指标要全:别只看 CPU 使用率,iowait、重传率这些“隐藏指标”往往更关键。
  2. 采集要稳:固定采样间隔,差值型指标两次读取之间不能有抖动。
  3. 频率要够:先粗后细,别一上来就 1 秒一次,存储成本扛不住。