使用SNMP发送自定义内容
 
    我们在日常工作中需要监控的大多数服务或者应用都能够通过CACTI或者Nagios自带的模块和扩展模块来实现,但是仍然有一些自己需要监控的服务不能从那里找到,那么我们可以采用自定义OID的形式来进行监控! snmp提供了发送自定义信息的功能。查看snmpd.conf会看到有一个小节是关于外部 脚本的,Executables/scripts。
 
    比如你需要用 CACTI 来进行监控一个游戏服务器的在线人数,那么你就可以通过自定义脚本的办法来进行部署。下面举一个很简单的例子:
 
首先,我们需要写一个自定义的脚本来获取在线人数:
 
[root@server02 ~]# cat /usr/local/bin/online.sh

#!/bin/sh
echo .1.3.6.1.4.1.102.8
GW01=`ssh GW01 "netstat -antp|grep ESTABLISHED|grep 8888|wc -l"`
GW02=`ssh GW02 "netstat -antp|grep ESTABLISHED|grep 8888|wc -l"`
GW03=`ssh GW03 "netstat -antp|grep ESTABLISHED|grep 8888|wc -l"`
ALL=$(($(($GW01+$GW02))+$GW03))
echo integer
echo $ALL
或者你需要监控apache的连接数:
#!/bin/sh
num=$(ps -e |grep http|grep -v grep|grep -v jkhttp|wc -l)
echo $num

然后在snmp的配置文件里加入自定义信息:
vi /etc/snmp/snmp.conf (注意,你完全可以删掉你原配置文件中的所有信息,用下面两行替代即可)
rocommunity public
exec .1.3.6.1.4.1.2021.50 online_monitor /bin/sh /usr/local/bin/online.sh
 
重新启动snmp服务:
service snmpd restart
 
测试数据(注意snmp的版本号):
snmpwalk -v1 -c public 192.168.0.1 .1.3.6.1.4.1.2021.50
snmpwalk -v2c -c public 192.168.0.1 .1.3.6.1.4.1.2021.50
 
然后你就可以用这个OID来做图,对人数进行监控了!
 
 
 
排错:
 
1、[root@JR-ZR01-TEST ~]# snmpwalk -v1 -c public 192.168.76.250 .1.3.6.1.4.1.4413.4.1
End of MIB
参考:这个错误一般是在 snmp.conf 里view 里面没有允许该OID ,甚至做了显式拒绝,解决办法是允许该 OID.
加入: view    systemview    included   .1
 
2、[root@JR-ZR01-TEST ~]# snmpwalk -v1 -c public 192.168.76.250 .1.3.6.1.4.1.4413.4.1
Error: OID not increasing: SNMPv2-SMI::enterprises.102.8
>= SNMPv2-SMI::enterprises.102.8
参考:出现上面问题,一般是由于使用了MIB库里不存在的OID,可以定义新的已存在OID来解决上面问题. 但还是建议使用自定义信息的专用OID : .1.3.6.1.4.1.2021.50 最后一位可以是 51 52 53...
 
3、[root@JR-ZR01-TEST ~]# snmpwalk   -v   1   localhost   -c   public   .1.3.6.1.4.1.2021.53  
UCD-SNMP-MIB::ucdavis.53.1.1   =   INTEGER:   1
UCD-SNMP-MIB::ucdavis.53.2.1   =   STRING:   "mem "
UCD-SNMP-MIB::ucdavis.53.3.1   =   STRING:   "/bin/sh   /etc/snmp/mem.sh "
UCD-SNMP-MIB::ucdavis.53.100.1   =   INTEGER:   1
UCD-SNMP-MIB::ucdavis.53.101.1   =   STRING:   "/bin/sh:   Permission   denied "
UCD-SNMP-MIB::ucdavis.53.102.1   =   INTEGER:   0

参考:首先需要确保 /etc/snmp/mem.sh 文件具有可执行权限,且手工执行必须可以运行,如果在权限设置777的情况下仍然提示该错误的话,请检查您的selinux 是否开启,如果开启关闭即可.
办法:修改/etc/selinux/config文件中的SELINUX= 为 disabled ,然后重启系统,或在不重启系统的情况下使用命令setenforce 0 命令.