常见指标类型
| 类型 | 特点 |
|---|---|
| counter | 只能增不能减,用于累积量(如请求数、字节数) |
| gauge | 可增可减,用于实时值(如内存、CPU 温度) |
| histogram | 分桶值,用于耗时统计 |
| summary | 百分位实时统计(不常用于大规模系统) |
1.CPU指标
1.1node_cpu_seconds_total
统计某个 CPU 核心在某种状态下运行的累计秒数。
具体样式:
node_cpu_seconds_total{cpu="0",mode="idle"}
| mode | 含义 | 描述 |
|---|---|---|
| idle | 空闲 | CPU 什么都没干 |
| user | 用户态 | 应用代码执行,例如 Java 程序 |
| system | 内核态 | 处理内核系统调用 |
| iowait | IO 等待 | CPU 在等磁盘或网络 IO |
| irq | 硬中断 | 硬件触发 |
| softirq | 软中断 | 网络包、定时器等 |
| steal | 被宿主机 "偷走" | 常见于虚拟机,被其他虚拟机占用核 |
常见公式:
总cpu利用率:
java
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
用户态cpu:
java
avg by (instance) (rate(node_cpu_seconds_total{mode="user"}[5m])) * 100
系统态cpu:
java
avg by (instance) (rate(node_cpu_seconds_total{mode="system"}[5m])) * 100
IO 等待(判断是否磁盘性能拖慢系统):
java
avg by (instance) (rate(node_cpu_seconds_total{mode="iowait"}[5m])) * 100
参数讲解:
5m表示取每个时间序列最近 5 分钟的数据点。
rate() 负责把"累计值的 counter" 转换成 "每秒变化率",即过去 5 分钟 CPU idle 了多少秒 / 300 秒。
avg by (instance):把同一个 instance 的所有 CPU 核心平均
1.2node_context_switches_total
统计上下文总切换次数。
常用判断规则:rate(node_context_switches_total5m)
1.3:node_load1/5/15
表示系统最近1/5/15分钟的负载。
| 指标 | 告警阈值 |
|---|---|
| load1 | > 0.8 × CPU核数 触发预警 |
| load5 | > 1.0 × CPU核数 触发告警 |
| load15 | > 1.5 × CPU核数 触发严重告警 |
常见原因:
| 原因 | 指标表现 |
|---|---|
| IO 阻塞(数据库、磁盘) | iowait 上升,load 升高,CPU 占用低 |
| 线程池满了 | load 升高,CPU 上不去 |
| 死锁 / 锁竞争 | context switch 很高 |
| GC 频繁 | load 升高,CPU user 偏高 |
| 虚拟机 CPU 资源不足(steal) | steal 升高,load 跟着升 |
2.内存指标
再开始介绍指标前,先了解下Linux内存大类,大致分为:
| 类别 | 解释 | 是否可回收 |
|---|---|---|
| MemTotal | 总内存 | - |
| MemFree | 完全没用到的内存(很少) | ✔ |
| Buffers | 缓冲区(IO缓冲) | ✔ |
| Cached | 文件缓存 | ✔ |
| Slab | 内核自己使用的缓存 | 部分可回收 |
| Active/Inactive | 活跃/非活跃内存页 | 非活跃可回收 |
| SwapTotal/SwapFree | 交换分区 | - |
Linux 内存不会像 Windows 一样"空着",它会尽可能缓存文件加速系统,所以你会看到"free 很低",但其实大量内存可以被立即回收。
2.1node_memory_MemTotal_bytes
表示机器总内存。
2.2node_memory_MemFree_bytes
完全空闲、未使用的内存(通常很小)。
2.3node_memory_Buffers_bytes
用于文件系统 metadata 缓冲区的内存。
2.4node_memory_Cached_bytes
用于文件内容的缓存,并非真正"占用"。
2.5node_memory_Slab_bytes
内核使用的缓存,高并发文件 IO 下可能变大。
2.6node_memory_MemAvailable_bytes
"可用内存",考虑了 free + 可回收 cache,因此比 free 更准确。
2.7常见公式
java
//内存使用率
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100
//内存实际占用(已使用量)
node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes
//缓存占用量
node_memory_Cached_bytes + node_memory_Buffers_bytes
//Swap使用率
(1 - (node_memory_SwapFree_bytes / node_memory_SwapTotal_bytes)) * 100
3.磁盘IO
3.1文件系统指标
java
//可用空间 fstype 过滤掉 tmpfs、overlay(临时文件系统)
node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"}
//总空间
node_filesystem_size_bytes{fstype!~"tmpfs|overlay"}
//已用空间
node_filesystem_size_bytes - node_filesystem_free_bytes
//磁盘使用率
100 * (1 - (node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"}
/ node_filesystem_size_bytes{fstype!~"tmpfs|overlay"}))
//inode使用率 inode 代表"文件数"。网站系统、小文件场景非常容易触发 inode 满的问题
1 - (node_filesystem_files_free / node_filesystem_files)
3.2读写次数
java
//每秒读
rate(node_disk_reads_completed_total[1m])
//每秒写
rate(node_disk_writes_completed_total[1m])
3.3读写吞吐量
java
//读字节
rate(node_disk_read_bytes_total[1m])
//写字节
rate(node_disk_written_bytes_total[1m])
3.4IO等待时间
java
rate(node_disk_read_time_seconds_total[1m])
rate(node_disk_write_time_seconds_total[1m])
3.5磁盘使用率
java
rate(node_disk_io_time_seconds_total[1m]) * 100
3.6IO队列深度
java
rate(node_disk_io_time_weighted_seconds_total[1m])
4.网络指标
网络指标是以网卡维度进行统计,常见分为四大类
| 分类 | 意义 | 示例指标 |
|---|---|---|
| 📥 流量(吞吐) | 网络是否被打满带宽 | node_network_receive_bytes_total |
| 📈 PPS(包速率) | 反映连接/请求压力 | node_network_receive_packets_total |
| 💥 丢包/错误 | 网络质量稳定性 | node_network_receive_errs_total |
| 📡 派生指标(bps、pps) | rate 算出来的重要值 | rate()、sum by() 等 |
4.1流量
java
//入站流量
rate(node_network_receive_bytes_total{device!="lo"}[1m])
//出站流量
rate(node_network_transmit_bytes_total{device!="lo"}[1m])
表示 1 分钟平均每秒收到多少字节;device!="lo" 过滤本地回环网卡;可以再 sum 变成所有网卡总流量,如:
java
sum by(instance) (rate(node_network_receive_bytes_total{device!="lo"}[1m]))
4.2PPS
java
//入站包速率
rate(node_network_receive_packets_total{device!="lo"}[1m])
//出
rate(node_network_transmit_packets_total{device!="lo"}[1m])
4.3错误
java
//入站错误
rate(node_network_receive_errs_total{device!="lo"}[1m])
//出站错误
rate(node_network_transmit_errs_total{device!="lo"}[1m])
4.4拥塞丢包
java
//入站丢包
rate(node_network_receive_drop_total[1m])
//出站丢包
rate(node_network_transmit_drop_total[1m])
4.5设备开关
java
//0为down 1为up
node_network_up