Zabbix 中内置了很多监控参数(Key),我们可以通过在客户端配置文件中定义key,获取监控对象中的系统、CPU、网络、内存、文件系统等信息。下面就详细介绍一下这些监控参数的意义。
1. 举例
假如我的需求是:监控某台Web服务器的80端口的并发连接数,并设置图形。
先分析该需求,可以分为两步。第一步是要创建自定义监控项,第二步是要针对该监控项设置成图形。监控项目有一个核心元素就是数据源,有了数据源才可以创建监控项。
- 首先在zabbix-agent端上编辑自定义脚本:
[root@localhost ~]# vim /usr/local/sbin/estab.sh #写入下面内容 #!/bin/bash ## 获取80端口并发连接数 netstat -ant |grep ':80 ' |grep -c ESTABLISHED # netstat -an 可查看系统TCP连接数;ESTABLISHED表示正在连接中的状态,另外80后面多个空格是为了精确,避免包含8080端口
- 保存后,需要修改脚本权限(让zabbix用户也能执行):
[root@localhost ~]# chmod 777 /usr/local/sbin/estab.sh
- 还需要编辑zabbix-agent的配置文件,定义监控项的key:
[root@localhost ~]# vim /etc/zabbix/zabbix_agentd.conf #增加下面两行 UnsafeUserParameters=1 #表示使用自定义脚本 UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh #自定义监控项的key为my.estab.count,后面的[*]里面写脚本参数,没有可以省略,脚本为 /usr/local/sbin/estab.sh
- 保存配置文件后重启zabbix-agent服务:
[root@localhost ~]# systemctl restart zabbix-agent
- 然后到服务端做个验证,查看刚刚配置是否正确,在服务端执行命令:
[root@localhost fonts]# zabbix_get -s 192.168.33.129 -p 10050 -k 'my.estab.count' 0 #因为129服务器上没有任何80端口的访问,所以为0,只要能够获取到客户端的数据,就说明刚刚配置没有问题
- 然后第二步就是在zabbix 的web界面去创建监控项并设置成图形,这里不是重点,不做过多赘述(参考:https://blog.csdn.net/miss1181248983/article/details/81220983 )
2. 测试获取监控参数内容的方法
上面例子中,我们就自定义了key——my.estab.count,通过设置key来获得我们想要监控的信息。
在Zabbix Server上使用zabbix_get命令可以从监控对象获取监控参数的具体内容。
- zabbix_get命令的具体使用方法:
zabbix_get -s 目标服务器IP -p 端口(10050) -k {key}
- 示例:
hadoop@ubuntu:~$ zabbix_get -s 192.168.0.5 -p 10050 -k system.uname # key为 system.uname Linux ubuntu 4.2.0-16-generic #19-Ubuntu SMP Thu Oct 8 15:35:06 UTC 2015 x86_64
3. 监控参数的实际意义
3.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
3.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]
3.3 进程信息(Processes)
# 进程数量(Number of processes) proc.num # 目前系统中的进程总数(Number of processes) proc.num[] #目前正在运行(处于运行态)的进程总数(Number of running processes) proc.num[run]
3.4 处理器信息(CPU)
# 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性能差,如果是读写文件比较频繁,读写效率要求比较高,可以考虑更换硬盘,或者使用多磁盘做Raid的方案。
3.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命令查看,其中
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
3.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]
3.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的性能,页面测试是否出现错误,测试错误详情,页面的响应时间,通过页面大小和响应时间计算页面的下载速度等。
3.8 安全信息(Security)
# 求指定文件的校验和(Checksum) vfs.file.cksum # 求/etc/passwd的校验和(Checksum of /etc/passwd) vfs.file.cksum[/etc/passwd]
3.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中与系统相关的监控参数,基本覆盖了获取系统信息、影响系统稳定的各种参数,各个参数之间的相互影响需要在使用过程中细细体会。