c.SYSSTAT + mrtg实现对服务器各种性能参数的监测:
一些读者可能会有这样的疑虑:既然我们已经能够通过snmp + mrtg得到网络流量的监测情况,那么如果要实时监测服务器的其它系统参数应该怎么办?这个问题的答案比较遗憾:由于MRTG是一个专门针对网络流量进行监测和绘图的工具,所以默认情况下不提供对系统其它方面信息监测的功能。因此尽管SNMP协议本身可以获得和显示被监测主机上的大量信息但是鉴于MRTG方面的限制而无法显示和显示出来。
但是好在天无绝人之路,MRTG本身实际上也是一个强大的数据采集和绘图引擎。于是我们可以利用一些SNMP以外的系统监测工具来实时获取服务器性能信息,包括CPU,内存,磁盘空间使用率以及I/O性能方面的内容,然后交给MRTG来获得我们所需要的其它类型的统计图信息。
在清楚了MRTG原理之后,这样做实际上会拥有更大的灵活性。但是由于涉及的内容需要一定脚本编程的知识,所以对一些高级用户是比较适用的。
下面我们就举例说明如何将MRTG和SYSSTAT所提供的一系列如sar,iostat以及free等性能监测命令等进行结合来获得系统其它方面的统计信息的配置方法。
由于这次网管工作站已经不可能再通过SNMP获取信息,所以我们将环境更改一下,在被监测主机直接安装和配置MRTG,并且结合sysstat一类的系统工具来绘制本机的信息图:
此时假设被监测主机的操作系统是:RHEL5u2,IP地址是192.168.1.100
Sysstat是在RHEL5u2中自带的一个综合性能监测工具包。其中包括了sar(主要用于cpu,内存方面的信息统计)和iostat(存储设备I/O统计工具)。由于sysstat是系统本身自带的包,所以在两台被监测的主机上分别挂载光盘安装sysstat即可。当然除了sysstat还有一些其它的系统性能显示方面的工具可以使用,我们会分别举例。
# rpm -ihv sysstat-7.0.2-1.el5.i386.rpm
同时还要分别在被监测的主机上安装mrtg。
# rpm -ihv mrtg-2.14.5-2.i386.rpm
在正式开始之前,需要花一点时间来介绍一下sar和iostat的基本功能:sar是一个强大的系统监测工具,默认只显示CPU的使用情况,而通过加上不同的参数sar可以显示大量的内存以及I/O使用方面的状况和信息;而iostat主要显示I/O使用方面的信息。如果执行sar不加任何参数通常会显示下面这些信息:
其中sar的命令显示内容包括了:
%system ? 系统空间的进程占用CPU时间的百分比
%nice ? 已调整优先级的进程占用CPU时间的百分比
%iowait ? 没有进程在该CPU上执行时,处理器等待I/O完成的时间
%steal ? 虚拟操作系统占用CPU时间的百分比
%idle ? 没有进程在该CPU上执行的时间(也就是CPU未使用的时间)
其中iostat命令显示内容包括了:
Blk_read/s ? 每秒从设备上读取的block数量
Blk_write/s ? 每秒写入到设备商的block数量
另外sar可以通过增加时间参数来指定执行的频率以及输出的内容量,例如命令是sar –u 5,则表示每5分钟显示一次CPU的使用情况。这样就利于我们将该命令写入到一个脚本/var/www/mrtg/mrtg.cpu中。在执行之前需要首先赋予其执行权限,然后为了监测该脚本是否有语法错误,可以执行该脚本测试。如果显示信息正确,则可以将其嵌入到自建的监测CPU的mrtg配置文件mrtg.cfg.cpu中。当然这个时候本机Apache的访问主目录也要更改为/var/www/html/mrtg并重启apache服务。之后运行命令三次以启动mrtg:
# env LANG=C /usr/bin/mrtg /var/www/mrtg/mrtg.cfg.mem
最后别忘了建立存放页面的目录,进入该目录中,将localhost.html更名为index.html以及类似上面的例子增加一个每五分钟运行一次的计划任务。此时在任何一台工作站上通过浏览器访问页面http://192.168.1.100/cpu就可以看到192.168.1.100的CPU使用情况。
按照上面的方法,对内存使用情况的监测也大同小异:
可以使用sar –r选项来显示内存使用情况。同样将该命令写入到一个脚本/var/www/mrtg/mrtg.mem中去,并给予执行权限。在测试执行正常之后即可将其嵌入到自建的监测内存的mrtg配置文件mrtg.mem.cfg中,执行命令# env LANG=C /usr/bin/mrtg /var/www/mrtg/mrtg.cfg.mem三次,并建立存放页面的目录,将localhost.html更改为index.html,并建立类似上面的计划任务。完成之后从任何一台工作站通过浏览器都可以访问页面http://192.168.1.100/mem来查看该主机的内存使用情况。
接着按照上面的例子,来建立磁盘读写情况的监测:
由于原理一致,方法接近。我就不再赘述,只是会将基本的过程和需要的脚本内容给出来:
# cd /var/www/mrtg/
建立监测脚本及其内容:
# cat mrtg.disk
#!/bin/bash
hd=sda
disk=/dev/$hd
UPtime=`/usr/bin/uptime |awk '{print $3""$4""$5}'`
KBread_sec=`iostat -x $disk|grep $hd |awk '{print $8}'`
KBwrite_sec=`iostat -x $disk|grep $hd |awk '{print $9}'`
echo $KBread_sec
echo $KBwrite_sec
echo $UPtime
hostname
赋予权限:
# chmod 755 mrtg.disk
测试执行情况:
37.51
0.16
7:25,3users,
localhost.localdomain
建立配置文件及显示其内容:
# cat mrtg.cfg.disk
WorkDir: /var/www/html/mrtg/disk
Target[disk]: `/var/www/mrtg/mrtg.disk`
Title[disk]: Disk HDA I/O Utilization Report
#Unscaled[disk]: dwym
MaxBytes[disk]: 10240000
PageTop[disk]: <H1>Disk I/O Utilization Report</H1>
kmg[disk]: KB,MB,GB
LegendI[disk]: Disk I/O KBread/sec
LegendO[disk]: Disk I/O KBwrite/sec
Legend1[disk]: Disk I/O KBread/sec
Legend2[disk]: Disk I/O KBwrite/sec
YLegend[disk]: Megabytes
ShortLegend[disk]: &
Options[disk]: growright,gauge,nopercent
建立主页面主目录:
[root@localhost mrtg]# mkdir /var/www/html/mrtg/disk
运行mrtg:
[root@localhost mrtg]# env LANG=C /usr/bin/mrtg /var/www/mrtg/mrtg.cfg.disk
[root@localhost mrtg]# env LANG=C /usr/bin/mrtg /var/www/mrtg/mrtg.cfg.disk
重命名index檔:
建立任务计划:
*/5 * * * * /usr/bin/env LANG=C /usr/bin/mrtg /var/www/mrtg/mrtg.cfg.cpu /dev/null 2>&1
crontab: installing new crontab
重启httpd服务:
[root@localhost mrtg]# chkconfig httpd on
完成之后从任何一台工作站通过浏览器都可以访问页面http://192.168.1.100/disk来查看该主机的磁盘读写效率情况。
到此为止我们基本上对mrtg在各方面的功能已经有了一个比较全面的认识。而且针对其配置和管理方法也有了一个初步的了解。相信在企业中会有更多的朋友能够藉助手工定制的方式来灵活发掘和获取mrtg在其它方面更多的功能和特性。