Prometheus指标入门详解

常见指标类型

类型 特点
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_total\[5m\]) #### 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.5**node_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 ```

相关推荐
时空无限21 小时前
EFK 中使用 ruby 和 javascript 脚本去掉日志中颜色字符详解
linux·javascript·elk·ruby
张火火isgudi1 天前
fedora43 安装 nvidia 驱动以及开启视频编解码硬件加速
linux·运维·视频编解码·nvidia
赋创小助手1 天前
融合与跃迁:NVIDIA、Groq 与下一代 AI 推理架构的博弈与机遇
服务器·人工智能·深度学习·神经网络·语言模型·自然语言处理·架构
电商API&Tina1 天前
跨境电商 API 对接指南:亚马逊 + 速卖通接口调用全流程
大数据·服务器·数据库·python·算法·json·图搜索算法
IT19951 天前
Qt笔记-使用SSH2进行远程连接linux服务器并上传文件
linux·服务器·笔记
XXYBMOOO1 天前
内核驱动开发与用户级驱动开发:深度对比与应用场景解析
linux·c++·驱动开发·嵌入式硬件·fpga开发·硬件工程
北京盟通科技官方账号1 天前
工业通讯底层对齐:EtherNet/IP Class 1 连接中的 32-bit Header 与内存映射逻辑
服务器·网络·网络协议·自动化·制造
lengjingzju1 天前
一网打尽Linux IPC(三):System V IPC
linux·服务器·c语言
大聪明-PLUS1 天前
如何编写你的第一个 Linux 内核模块
linux·嵌入式·arm·smarc
知识分享小能手1 天前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04文件压缩与解压缩知识点详解(12)
linux·学习·ubuntu