Zabbix中内置了很多监控参数(Key),可以获取监控对象中的系统、CPU、网络、内存、文件系统等信息。下面就详细介绍一下这些监控参数的意义。
1. 测试获取监控参数内容的方法
在Zabbix Server上使用zabbix_get
命令可以从监控对象获取监控参数的具体内容。zabbix_get
命令的具体使用方法如下:
zabbix_get -s 目标服务器IP -p 端口(10050) -k {key}
zabbix_get
命令实际的执行结果如下:
hadoop@ubuntu:~$ zabbix_get -s 192.168.0.5 -p 10050 -k system.uname
Linux ubuntu 4.2.0-16-generic #19-Ubuntu SMP Thu Oct 8 15:35:06 UTC 2015 x86_64
2. 监控参数的实际意义
2.1 操作系统信息(OS)
# 系统启动的时间点(Host boot time)
system.boottime
# 系统已运行时长(System uptime)
system.uptime
# 系统时间(Host local time)
system.localtime
# 主机名(Host name)
system.hostname
# 内核参数,可打开的最大文件数(Maximum number of opened files)
kernel.maxfiles
# 内核参数,支持的最大进程数(Maximum number of processes)
kernel.maxproc
# 目前登录到系统中的用户数量(Number of logged in users)
system.users.num
# 获取系统信息(System information)
system.uname
2.2 网卡信息(Network interfaces)
# 网卡流速,流入方向
net.if.in
获取指定网卡(br0)的流入流量的流速值(Incoming network traffic on br0)
用法:net.if.in[br0]
# 网卡流速,流出方向
net.if.out
获取指定网卡(br0)的流出流量的流速值(Outgoing network traffic on br0)
用法:net.if.out[br0]
网卡按照最高网速可以分为百兆网卡(100Mbps)和千兆网卡(1000Mbps或1Gbps)。当传输大量的数据时,可能会出现流速过大的情况。对于Webapp而言,如果出现高并发,同时请求的页面比较大时,就会出现流量过大的情况,也叫作带宽被占满了。如果试验将网速触发到顶速,可以在内网环境中,在两台主机之间传输一个大文件,如果是百兆网卡可以传输几个G的数据,如果是千兆网卡则需要传输几十个G的数据,效果才会比较明显。两个主机之间传输数据时,网速最大不会超过网速比较小的网卡的最高网速。比如百兆网卡之间传输数据,最高配可能到达90Mbps以上;千兆网卡之间传输数据,最高配速可能到达900Mbps以上;百兆网卡和千兆网卡之间传输数据,最高配速只能到达90Mbps以上。
传输大量的数据,理论上会出现高流速的情况,如果没有出现,则说明是数据传输的发送方或者接收方在处理数据上消耗了一些时间,这些时间摊平了数据的流速。此时如果需要提升传输速度,则需要减少发送发或接收方的数据处理操作。
2.3 进程信息(Processes)
# 进程数量(Number of processes)
proc.num
目前系统中的进程总数(Number of processes)
proc.num[]
目前正在运行(处于运行态)的进程总数(Number of running processes)
proc.num[,,run]
2.4 处理器信息(CPU)
Context switches per second
# CPU的进程上下文切换(Context switches)
system.cpu.switches
# CPU中断数量(Interrupts per second)
system.cpu.intr
# CPU的负载值,进程队列的平均长度(Processor load)
system.cpu.load
CPU每分钟的负载值,按照核数做平均值(Processor load (1 min average per core))
system.cpu.load[percpu,avg1]
CPU每5分钟的负载值,按照核数做平均值(Processor load (5 min average per core))
system.cpu.load[percpu,avg5]
CPU每15分钟的负载值,按照核数做平均值(Processor load (15 min average per core))
system.cpu.load[percpu,avg15]
CPU的负载值可以使用uptime
命令查看,但是Zabbix所获得到CPU负载值与uptime所显示的结果并不同,它的结果是uptime所显示的负载值除以主机的CPU核数。测试结果如下:
bigdata@bigdata:/tmp$ uptime
14:08:59 up 21 days, 19 min, 2 users, load average: 0.04, 0.05, 0.05
bigdata@bigdata:/tmp$ cat /proc/cpuinfo|grep processor|wc -l
4
--> 通过zabbix_get获取负载值
hadoop@ubuntu:~$ zabbix_get -s 192.168.0.38 -p 10050 -k system.cpu.load[percpu,avg1]
0.010000
hadoop@ubuntu:~$ zabbix_get -s 192.168.0.38 -p 10050 -k system.cpu.load[percpu,avg5]
0.012500
hadoop@ubuntu:~$ zabbix_get -s 192.168.0.38 -p 10050 -k system.cpu.load[percpu,avg15]
0.012500
# CPU的使用率
system.cpu.util
CPU的空闲时间,百分比形式(CPU idle time)
system.cpu.util[,idle]
CPU的用户态运行时间,百分比形式(CPU user time)
system.cpu.util[,user]
CPU的系统态运行时间,百分比形式(CPU system time)
system.cpu.util[,system]
CPU的io等待时间,百分比形式(CPU iowait time)
system.cpu.util[,iowait]
CPU的中断时间,百分比形式(CPU interrupt time)
system.cpu.util[,interrupt]
CPU的nice时间,百分比形式(CPU nice time)
system.cpu.util[,nice]
CPU的软中断时间,百分比形式(CPU softirq time)
system.cpu.util[,softirq]
CPU的偷盗的时间,百分比形式(CPU steal time)
system.cpu.util[,steal]
合理的控制用户态、系统态、io等待时间可以保证进程高效率的运行。
系统态运行时间较高说明进程进行系统调用的次数比较多。一般的程序,如果系统态运行时间占用过高,就需要优化程序,减少系统调用。
io等待时间的比例过高,则表明硬盘的IO性能差,如果是读写文件比较频繁,读写效率要求比较高,可以考虑更换硬盘,或者使用多磁盘做Raid的方案。
2.5 内存信息(Memory)
# 系统中swap分区的使用情况
system.swap.size
swap分区的总容量(Total swap space)
system.swap.size[,total]
swap分区尚可使用的容量(Free swap space)
system.swap.size[,free]
swap分区尚可使用的容量,百分比形式(Free swap space in %)
system.swap.size[,pfree]
# 获取物理内存的使用情况
vm.memory.size
物理内存总量(Total memory)
vm.memory.size[total]
物理内存目前可用的容量(Available memory)
vm.memory.size[available]
虚拟内存是由物理内存(即购买的内存条)和swap分区组成。物理内存占用过高之后,会将部分很久不用的数据转储到swap分区中。由此可见,在正常情况下,物理内存使用量并不高的情况下,不会占用swap分区。如果出现物理内存使用量过高,开始使用swap分区,或者swap分区使用过高的情况,就需要考虑购买并添加物理内存了。
内存的信息可以使用free
命令查看,其中<物理内存目前可用的容量>的值约等于free
和cached
的数值之和。
bigdata@bigdata:/tmp$ free -b
total used free shared buffers cached
Mem: 16784355328 16692240384 92114944 108625920 15360000 14823591936
-/+ buffers/cache: 1853288448 14931066880
Swap: 10691276800 9728000 10681548800
---> 通过zabbix_get获取内存使用信息
hadoop@ubuntu:~$ zabbix_get -s 192.168.0.38 -p 10050 -k vm.memory.size[available]
14989234176
hadoop@ubuntu:~$ zabbix_get -s 192.168.0.38 -p 10050 -k system.swap.size[,free]
10681548800
2.6 文件系统信息(Filesystems)
# 文件系统中的inode的使用情况
vfs.fs.inode
文件系统的指定分区中尚未使用的inode数量,百分比形式(Free inodes on / (percentage))
vfs.fs.inode[/,pfree]
文件系统的inode表示可以创建的文件的最大数量。在需要创建很多文件的系统中需要密切关注这个值。如果文件系统的容量没有用完,但是inode的数量已经消耗完了,也再也不能创建文件了。
# 文件系统中的使用容量详情
vfs.fs.size
文件系统中指定分区(目录)中未使用的容量数值(Free disk space on /)
vfs.fs.size[/,free]
文件系统中指定分区(目录)中未使用的容量,百分比形式(Free disk space on / (percentage))
vfs.fs.size[/,pfree]
文件系统中指定分区(目录)中已使用的容量(Used disk space on /)
vfs.fs.size[/,used]
文件系统中指定分区(目录)的总容量(Total disk space on /)
vfs.fs.size[/,total]
2.7 Web应用信息(WebApp)
Web应用信息的参数,默认没有配置在任何模板中,需要设置了web scenario之后才能够看到。
# Web页面下载速度
web.test.in
指定方案中所有步骤的页面平均下载速度(Download speed for scenario "baidu.test".)
web.test.in[baidu.test,,bps]
指定方案中指定步骤的页面下载速度(Download speed for step "baidu" of scenario "baidu.test".)
web.test.in[baidu.test,baidu,bps]
# Web应用测试是否失败(Failed step of scenario)
web.test.fail
指定方案是否测试失败(Failed step of scenario "baidu.test".)
web.test.fail[baidu.test]
# Web应用测试错误详情(Last error message of scenario)
web.test.error
指定方案中各个步骤中最后出现的错误详情(Last error message of scenario "baidu.test".)
web.test.error[baidu.test]
# Web应用响应状态码(Last error message of scenario)
web.test.rspcode
指定方案中指定步骤的页面响应状态码(Response code for step "baidu" of scenario "baidu.test".)
web.test.rspcode[baidu.test,baidu]
# Web应用响应时间(Response time.)
web.test.time
指定方案中指定步骤的页面响应时间(Response time for step "baidu" of scenario "baidu.test".)
web.test.time[baidu.test,baidu,resp]
检测Webapp的性能,页面测试是否出现错误,测试错误详情,页面的响应时间,通过页面大小和响应时间计算页面的下载速度等。
2.8 安全信息(Security)
# 求指定文件的校验和(Checksum)
vfs.file.cksum
求/etc/passwd的校验和(Checksum of /etc/passwd)
vfs.file.cksum[/etc/passwd]
2.9 Agent信息(Agent ping)
# Agent的在线状态(Agent ping)
agent.ping
# Zabbix Agent的hostname(Host name of zabbix_agentd running)
agent.hostname
# Agent的软件版本号(Version of zabbix_agent(d) running)
agent.version
以上介绍了Zabbix中与系统相关的监控参数,基本覆盖了获取系统信息、影响系统稳定的各种参数,各个参数之间的相互影响需要在使用过程中细细体会。