文章目录

操作系统的监控是性能监控的基础,Linux是目前的主流的服务器端操作系统。下面先从Zabbix对Linux 的监控入手。

Zabbix对Linux的监控项,从性能测试的角度看可分为 CPU、Memory(含Swap)、Network、Filesystems、Processes 几大类。

一、CPU
CPU资源监控的KEY包含:

KEY 说明
system.cpu.intr 设备的中断数。返回整数
system.cpu.load[,] CPU 负载。返回浮点数
system.cpu.num[] CPU 数量,返回整数
system.cpu.switches 上下文的数量进行切换。返回整数
system.cpu.util[,,] CPU 使用率。返回浮点数

阅读源码(3.2.2版本)可以发现以上数据来自/proc 文件系统 和系统函数:

KEY 说明 来源
system.cpu.intr 设备的中断数,返回整数 /proc/stat intr 行
system.cpu.load[,] CPU 负载,返回浮点数 系统函数 getloadavg
system.cpu.num[] CPU 数量,返回整数 /proc/cpuinfo 统计processor出现数量
system.cpu.switches 上下文的数量进行切换,返回整数 /proc/stat ctxt 行
system.cpu.util[,,] CPU 使用率,返回浮点数 /proc/stat cpu开头的相关行

磨刀不误砍柴工,想搞清楚每个KEY的含义,先得弄明白数据来源是啥会事儿。
/proc/stat 是最重要的CPU信息
cat /proc/stat
以上图为例,包含:
1、前三行为CPU 花费在不同场景下的时间,包含总的时间和每个CPU内核的时间。比如主机有2个内核,会显示cpu、cpu0、cpu1三行,其中cpu行为下面两行的合并数据。数据列分为:user、nice、system、idle、iowait、irq、softirq、steal、guest。
需要特别说明的以上数据的时间单位为 0.01秒。
2、intr行,中断的信息,第1个为自系统启动以来发生的所有的中断的次数,后面每个数对应一个特定中断自系统启动以来所发生的次数。从/proc/interrupts 可以看到具体的数据。
存疑:
1)、为什么 /proc/stat 比 /proc/interrupts 显示的特定中断多的多
2)、 /proc/interrupts 中 irq 号非 数字的是啥
3、ctxt行,给出了自系统启动以来CPU发生的上下文交换的次数。
4、btimet行,从系统启动到现在为止的时间,单位为秒。
5、processest行, 自系统启动以来所创建的任务数目。
6、procs_runningt行,当前运行队列的任务数目。
7、procs_blockedt行,当前被阻塞的任务的数目(等待I/O完成)。
以上具体的含义,可以从linux源码(2.6.32.65版本)/fs/proc/stat.c 中略窥一二,以做印证。

/proc/cpuinfo中的信息较为简单,包含CPU每个核的基本物理参数,不做详述。

getloadavg() 函数,返回系统运行队列中的进程在不同时间段的平均数目。分为1、5、15分钟三种。(The getloadavg() function returns the number of processes in the system run queue averaged over various periods of time. Up to nelem samples are retrieved and assigned to successive elements of loadavg[]. The system imposes a maximum of 3 samples, representing averages over the last 1, 5, and 15 minutes, respectively.)

通过上面的基础信息,system.cpu.intr、system.cpu.switches 连个Key的值已经很明确。
system.cpu.load[,] 数据来自系统函数:getloadavg。通过 cat /proc/loadavg 或者uptime命令,可以获取到1分钟、5分钟、15分钟的,这是全部CPU的数据,而Zabbix 在对这块数据的处理有所不同,返回的值默认是每CPU的平均值,具体可根据参数理解。
参数解释:

全部或按CPU平均,可选参数:不填、all,percpu,不填==all,all 表示按全部CPU取值,percpu为每CPU的平均值(all的值 除 CPU数量)

可选参数:不填、avg1、avg5、avg15,不填==avg1,avg1 表示 1分钟,其他类推

system.cpu.util[,,]涉及的数据最多,数据来自/proc/stat。前文已经说明/proc/stat 相关行记录的为百分之一毫秒数,并无我们通常看到的比例关系,Zabbix 为了反映这部分数据的百分比,做了特殊处理,在zabbix_agent 启动时,启动了一个 collector 线程(\zabbix_agent\stats.c,除去跟Linux 不相关的代码):
\zabbix_agent\stats.c
该线程每秒获取一次CPU状态,磁盘状态
\zabbix_agent\stats.c
记录到 ZBX_COLLECTOR_DATA 结构的全局变量里
\zabbix_agent\stats.c
在我们需要获取各CPU类型参数的时候,根据时间范围,获取两个时间点的差值,并计算百分比(\zabbix_agent\cpustat.c)。
\zabbix_agent\cpustat.c
参数解释:

cpu 编号,可选参数:不填、all,0-N,不填==all

可选参数:不填、user、nice、system、idle、iowait、interrupt、softirq、steal、guest、guest_nice,不填写==user

可选参数:不填、avg1、avg5、avg15,不填写=avg1,avg1 表示 1分钟,其他类推

文章目录