一、说明

node-exporter 是 Prometherus 平台下 Linux 主机的监控客户端,有关 Prometheus 监控系统的安装配置请参考“prometheus 配置指南”。常见的内存监控指标和 CPU 监控指标如下所示:

(1 - (node_memory_MemAvailable_bytes{instance=~"$node"} / (node_memory_MemTotal_bytes{instance=~"$node"})))* 100
100 - (avg(irate(node_cpu_seconds_total{instance=~"$node",mode="idle"}[30m])) * 100)

二、基本概念

2.1 时间序列

时间序列是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列。

2.2 表达式

  • =:选择正好相等的字符串标签
  • !=:选择不相等的字符串标签
  • =~:选择匹配正则表达式的标签(或子标签)
  • !~:选择不匹配正则表达式的标签(或子标签)

2.3 时间定义

  • s:seconds
  • m:minutes
  • h:hours
  • d:days
  • w:weeks
  • y:years

注: [5m]指过去的5分钟内

2.4 操作符

  • bool
  • and
  • or
  • unless
  • on
  • without : without(label)在结果中移除括号内的标签和值
  • by : by(label)在结果中只保留括号内的标签和值

2.5 查询检验

Prometheus 最大的特点是支持查询语法,通过对采集指标的自定义查询实现多个监控指标的自定义组合。具体的方式可以通过 Prometheus 的 WEB 端的界面执行。例如查询 Linux 节点的 CPU 指标。

1、在查询栏中输入“node_cpu_seconds_total” 查询 CPU 的资源利用情况(8核CPU),Linux 系统中 CPU 有几种状态:user、system、steal、softirq、nice、irq、iowaid、idle。

查询语句:“node_cpu_seconds_total”。查询的结果如下图所示。

instance:实例名称对应于 Prometheus 中定义的 Label 名称;

job : 对应 Prometheus 配置文件中定义的 job 内容

mode: Linux 环境下空闲 CPU 的情况

2、查询 CPU 空闲状态的情况“node_cpu_seconds_total{ instance="192.168.13.243",mode="idle"}”,如下图所示

3、查询 5 分钟范围内 CPU 的空闲值。“irate(node_cpu_seconds_total{ instance="192.168.13.243",mode="idle"} [5m])”

irate用于计算某个指标在一定时间间隔内的变化速率。取的是在指定时间范围内的最近两个数据点来算速率。

[5m] 用于表示 5 分钟的取值范围。

4、 查询 5 分钟范围内所有  CPU 的空闲值。“avg(irate(node_cpu_seconds_total{ instance="192.168.13.243",mode="idle"} [5m]))”

sum 用于计算平均值

5、查询 5 分钟范围内 CPU 空闲率 。“avg(irate(node_cpu_seconds_total{ instance="192.168.13.243",mode="idle"} [5m])) * 100”

6、 查询 5 分钟范围内 CPU 的利用率。 “ (1 - avg(irate(node_cpu_seconds_total{ instance="192.168.13.243",mode="idle"} [5m])) ) * 100”

三、常用监控指标

3.1 CPU负载率

node_load1{instance="134node"} / count by(job, instance)(count by(job, instance, cpu)(node_cpu{instance="134node"})) 

## node_load1 : 指1分钟内cpu平均负载,同样cpu_load5指5分钟内cpu平均负载,cpu_load15指15分钟内cpu平均负载

## count : 指聚合向量中的每个元素(即计数)

3.2 可用内存

node_memory_MemAvailable{instance="88node"}

## node_memory_MemAvailable :Memory information field MemAvailable, node-exporter已经抓取出来,只需查询展示即可

3.3 空闲文件系统空间

sum(node_filesystem_free{fstype="xfs",instance="88node"})
sum(node_filesystem_free{fstype="ext4",instance="134node"})

## node_filesystem_free: Filesystem free space in bytes

## fstype 有如下种类:

## aufs : 指联合文件系统,用来把原本分离的两个文件系统联合在一起

## cgroup : Cgroups(控制组)是Linux内核的一个功能,用来限制、统计和分离一个进程组的资源 (CPU、内存、磁盘输入输出等)。

## tmpfs : tmpfs是一种虚拟内存文件系统,而不是块设备。

## overlay : 一个 overlay 文件系统包含两个文件系统,一个 upper 文件系统和一个 lower 文件系统,是一种新型的联合文件系统

### proc、xfs、mqueue等等。

3.4 swap硬盘交换区

从硬盘到内存或从内存到硬盘,虚拟内存交换Swap free :

node_memory_SwapFree{instance="134node"}

## node_memory_SwapTotal: Memory information field SwapTotal。

## swap :类似于可以把硬盘当内存用,那么这一部分内存一般就叫做swap

Swap Usage :

node_memory_SwapTotal{instance="134node"} - node_memory_SwapFree{instance="134node"}

## node_memory_SwapFree: Memory information field SwapFree

Swap I/O(in):

irate(node_vmstat_pswpin{instance="88node"}[1m]) * 4096 or irate(node_vmstat_pswpin{instance="88node"}[5m]) * 4096

Swap I/O(out):

irate(node_vmstat_pswpout{instance="88node"}[1m]) * 4096 or irate(node_vmstat_pswpout{instance="88node"}[5m]) * 4096

## vmstat :vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值, 包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。

## pswpin/s:每秒从硬盘交换区传送进入内存的次数。

## pswpout/s:每秒从内存传送到硬盘交换区的次数。

## pswpin/s、 pswpout/s描述的是与硬盘交换区相关的交换活动。交换关系到系统的效率。交换区在硬盘上对硬盘的读写操作比内存读写慢得多,因此为了提高系统效率就应该设法减少交换。 通常的作法就是加大内存,使交换区中进行的交换活动为零,或接近为零。如果swpot/s的值大于 1,预示可能需要增加内存或减少缓冲区(减少缓冲区能够释放一部分自由内存空间)。

Swap free 率(百分百)

(node_memory_SwapFree{instance=~"$server"} /node_memory_SwapTotal{instance=~"$server"}) * 100

3.5 CPU使用率

avg without (cpu) (irate(node_cpu{instance="88node", mode!="idle"}[5m]))

3.6 网路使用情况

上传速率:

irate(node_network_transmit_bytes{device!="lo",instance="88node"}[1m])

下载速率:

irate(node_network_receive_bytes{device!="lo",instance="88node"}[1m])

## eth0: ethernet的简写,一般用于以太网接口。

## wifi0:wifi是无线局域网,因此wifi0一般指无线网络接口。

## ath0: Atheros的简写,一般指Atheros芯片所包含的无线网络接口。

## tunl0:tunl0是隧道接口,封装数据的时候使用

## lo: local的简写,一般指本地环回接口。

3.7 内存使用率

已用内存:(总内存-空闲内存-缓存=已使用内存)

node_memory_MemTotal{instance="88node"} - node_memory_MemFree{instance="88node"} - node_memory_Cached{instance="88node"} - node_memory_Buffers{instance="88node"} - node_memory_Slab{instance="88node"}

Buffer缓存:

node_memory_Buffers{instance="88node"}

Cached缓存:

node_memory_Cached{instance="88node"} + node_memory_Slab{instance="88node"}

Free空闲内存:

node_memory_MemFree{instance="88node"}

可用内存占比:

(node_memory_MemAvailable{instance="88node"} / node_memory_MemTotal{instance="88node"}) * 100

## total:总计物理内存的大小。

## Free:空闲内存有多少。

## Shared:多个进程共享的内存总额。

## Buffers:表示buffers cache的内存数量,一般对块设备的读写才需要缓冲。

## Cached:表示page cached的内存数量,一般作文件系统的cached,频繁访问的文件都会被 cached。如果cached值较大,就说明cached文件数较多。如果此时IO中的bi比较小,就 说明文件系统效率比较好。

## Slab:slab分配器不仅可以提供动态内存的管理功能,而且可以作为经常分配并释放的内存的缓存。

## MemAvailable: Free + Buffers + Cached - 不可回收的部分。不可回收部分包括:共享内存段,tmpfs,ramfs等

3.8 磁盘读写(IOPs)

磁盘每秒读取(5分钟内)

sum by (instance) (irate(node_disk_reads_completed{instance="88node"}[5m]))

##node_disk_reads_completed: The total number of reads completed successfully

磁盘每秒写入(5分钟内)

sum by (instance)(irate(node_disk_writes_completed{instance="88node"}[5m]))

##node_disk_writes_completed :The total number of writes completed successfully

使用I/O的毫秒数(5分钟内)

sum by (instance) (irate(node_disk_io_time_ms{instance="88node"}[5m]))

##node_disk_io_time_ms: Total Milliseconds spent doing I/Os

磁盘每秒读写总数(5分钟内)

sum by (instance) (irate(node_disk_reads_completed{instance="88node"}[5m])) + sum by (instance) (irate(node_disk_writes_completed{instance="88node"}[5m]))

3.9 I/O Usage

磁盘读取总数(1分钟内)

sum(irate(node_disk_bytes_read{instance="88node"}[1m]))

##node_disk_bytes_read : The total number of bytes read successfully(成功读取的字节数)

磁盘写入总数(1分钟内)

sum(irate(node_disk_bytes_written{instance="88node"}[1m]))

##node_disk_bytes_written :The total number of bytes written successfully(成功写入的字节数)

使用I/O的毫秒数(1分钟内)

sum(irate(node_disk_io_time_ms{instance="88node"}[1m]))

##node_disk_io_time_ms :Total Milliseconds spent doing I/Os.(使用IO的总毫秒数)

3.10 文件系统空闲空间

最低值:

min(node_filesystem_free{fstype=~"xfs|ext4",instance="88node"} / node_filesystem_size{fstype=~"xfs|ext4",instance="88node"})

最高值:

max(node_filesystem_free{fstype=~"xfs|ext4",instance="88node"} / node_filesystem_size{fstype=~"xfs|ext4",instance="88node"})

## ext4是第四代扩展文件系统(英语:Fourth EXtended filesystem,缩写为ext4)是linux下的日志文件系统,ext4的文件系统容量达到1EB,而文件容量则达到16TB

## XFS是一个64位文件系统,最大支持8EB减1字节的单个文件系统,实际部署时取决于宿主操作系 统的最大块限制。对于一个32位linux系统,文件和文件系统的大小会被限制在16TB。


  • 无标签
写评论...