Prometheus监控运维实战十: 主机监控指标
1、CPU指标
CPU负载
node_load1 node_load5 node_load15
CPU使用率
node_cpu_seconds_total
该指标包括了多个标签,分别标记每种处理模式使用的CPU时间,该指标为counter类型。这个指标不适合直接拿来使用,可通过前面学习的PromQL,将其转化成CPU使用率的指标 。 mode="idle"代表CPU 的空闲时间,所以我们只需要算出空闲的时间占比,再以总数减去该值 ,便可知道CPU的使用率,此处使用irate方法。由于现有的服务器一般为多核,所以加上avg求出所有cpu的平均值,便是CPU的使用率情况 ,如下 :
100 -avg(irate(node_cpu_seconds_total{ mode="idle"}[5m])) by (instance)* 100
2、内存监控
物理内存使用率
需要用到的内存指标有下列几个:
node_memory_MemTotal_bytes #总内存大小 node_memory_MemFree_bytes #空闲内存大小 node_memory_Buffers_bytes #缓冲缓存大小 node_memory_Cached_bytes #页面缓存大小
计算的公式为:(总内存 -(空闲内存 + 缓冲缓存 + 页面缓存))/ 总内存 * 100
(node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes+node_memory_Cached_bytes ))/node_memory_MemTotal_bytes * 100
swap内存使用率
Swap为交换内存分区,它使用磁盘上的部分空间来充当服务器内存,当系统物理内存吃紧时,Linux 会将内存中不常访问的数据保存到 swap 上,这样系统就有更多的物理内存为各个进程服务。而当系统需要访问 swap 上存储的内容时,再将 swap 上的数据加载到内存中,这就是常说的换出和换入。交换空间可以在一定程度上缓解内存不足的情况,但是它需要读写磁盘数据,所以性能不是很高。
swap内存用到的指标如下:
node_memory_SwapTotal_bytes #swap内存总大小 node_memory_SwapFree_bytes #swap空闲内存大小
计算的公式如下:
(node_memory_SwapTotal_bytes - node_memory_SwapFree_bytes)/node_memory_SwapTotal_bytes * 100
3、磁盘使用率
分区使用率
分区使用率的指标可以通过分区空间总容器和分区空闲容量计算出来
node_filesystem_size_bytes #分区空间总容量 node_filesystem_free_bytes # 分区空闲容量
磁盘吞吐量
node_disk_read_bytes_total #分区读总字节数 node_disk_written_bytes_total #分区写总字节数
上面两个指标分别对应了分区读写的总字节数,指标为counter类型。前面文章讲过,counter类型会不断的累加,该指标直接使用对于监控没有意义,但可通过下面公式转化为磁盘的每秒读写速率。device代表对应的磁盘分区。
irate(node_disk_read_bytes_total{ device="sda"}[5m]) irate(node_disk_written_bytes_total{ device="sda"}[5m])
磁盘IOPS
IOPS表示每秒对磁盘的读写次数,它与吞吐量都是衡量磁盘的重要指标。对于IOPS的监控,可通过下面两个指标算得出
node_disk_reads_completed_total #分区读总次数 node_disk_writes_completed_total #分区写总次数
计算公式与上面相似,使用我们熟悉的irate或rate函数来处理
irate(node_disk_reads_completed_total{ device="sda"}[5m]) irate(node_disk_writes_completed_total{ device="sda"}[5m])
4、网络监控
网卡流量
网卡流量一般分为上传和下载流量,下面两个指标分别为总的字节数,可通过这两个指标计算出来网卡每秒流量
node_network_receive_bytes_total #下载流量总字节数 node_network_transmit_bytes_total #上传流量总字节数
计算公式如下,此处排除Loopback 网卡
irate(node_network_receive_bytes_total{ device != "lo"}[1m])
请求百度页面查看网卡流量
for i in { 1..20}; do curl http://www.baidu.com; done
5、可用性监控
up{ job="agent1"}