当前Linux系统广泛使用了Net-SNMP作为系统监控的工具,对SNMP协议支持的很好,同时配置灵活,功能强大。官网地址:http://www.net-snmp.org/ (不明白为什么访问这个网站还要翻墙)。
公司的产品中使用apache web server同时作为反向代理服务器和系统管理的CGI服务器,配置文件互相独立,但运行时的进程名称都是httpd,如图
这样如果要使用Net-SNMP分别监控proxy服务器和CGI服务器的状态就不能用使用"proc"指令了,这时候“monitor”配合“exec”指令就派上用场了。
还是直接上代码说得方便些
在snmp.conf中增加如下配置:
exec Webproxy /bin/sh /etc/snmp/moniWebproxy.shexec NMA /bin/sh /etc/snmp/moniNMA.shmonitor -S -r 60 -o extNames -o extOutput "webproxy stopped" extResult == 101monitor -S -r 60 -o extNames -o extOutput "webproxy started" extResult == 102monitor -S -r 60 -o extNames -o extOutput "NMA stopped" extResult == 103monitor -S -r 60 -o extNames -o extOutput "NMA started" extResult == 104
在/etc/snmp/下增加两个shell脚本
moniWebproxy.sh
moniWebproxy.sh
#! /bin/sh
procnum=`ps -ef | grep -v grep | egrep -c ".*httpd$"`
if [ $procnum == 0 ]
then
echo "webproxy down!"
exit 101
else
echo "webproxy is there!"
exit 102
fi
moniNMA.sh
#! /bin/sh
procnum=`ps -ef | grep -v grep | grep -c nma`
if [ $procnum == 0 ]
then
echo "NMA down!"
exit 103
else
echo "NMA is there!"
exit 104
fi
完成后重启Net-SNMP服务
验证一下:
[root@alexli_master snmp]# snmpwalk -v2c -c public 10.208.3.110 1.3.6.1.4.1.2021.8.1
UCD-SNMP-MIB::extIndex.1 = INTEGER: 1
UCD-SNMP-MIB::extIndex.2 = INTEGER: 2
UCD-SNMP-MIB::extNames.1 = STRING: Webproxy
UCD-SNMP-MIB::extNames.2 = STRING: NMA
UCD-SNMP-MIB::extCommand.1 = STRING: /bin/sh /etc/snmp/moniWebproxy.sh
UCD-SNMP-MIB::extCommand.2 = STRING: /bin/sh /etc/snmp/moniNMA.sh
UCD-SNMP-MIB::extResult.1 = INTEGER: 102
UCD-SNMP-MIB::extResult.2 = INTEGER: 103
UCD-SNMP-MIB::extOutput.1 = STRING: webproxy is there!
UCD-SNMP-MIB::extOutput.2 = STRING: NMA down!
UCD-SNMP-MIB::extErrFix.1 = INTEGER: noError(0)
UCD-SNMP-MIB::extErrFix.2 = INTEGER: noError(0)
UCD-SNMP-MIB::extErrFixCmd.1 = STRING:
UCD-SNMP-MIB::extErrFixCmd.2 = STRING:
如果Net-SNMP上已经配好了trap接收服务器的话,可以在那台机器上看到上来的trap
简单解释一下:
Net-SNMP实际上有自己的Mib,其中之一叫做UCD-SNMP-MIB,OID是1.3.6.1.4.1.2021
Net-SNMP会把通过配置使能的各种监控的结果保存在这个Mib中,这样用户如果有Mib Browser的话就可以查看当时的系统状态数据,比如CPU、内存、进程以及硬盘信息等等。那么这些数据怎么就通过trap发送出去的呢?这是由于对Disman Event MIB的支持。
上面的“monitor”指令属于Disman Event MIB指令集中的一个,上面的配置意思就是如果extResult 等于101就会触发一个webproxy stop的trap,但这个trap实际上是在mteTriggerTable中定义的。