Nagios 监控 SNMP 温度计
老板给机房新买了个温度,湿度的感应器,问我能不能整合到Nagios里面。我的回答是No Problem.
首先看看他自带的界面
监控SNMP,首先得知道他的OID是啥,这个界面我可以直接下载MIB文件和对应的EXCEL文档。
下载以后,重命名MIB为txt文件,然后拷贝到我的nagios服务器的/usr/share/snmp/mibs 目录下,然后记得添加到配置文件中
[root@sydnagiosmibs]#pwd/usr/share/snmp/mibs[root@sydnagiosmibs]#lsg*txtgeist_mib.txt[root@sydnagiosmibs]#more/usr/share/snmp/snmp.confmibfile/usr/share/snmp/mibs/geist_mib.txt
这样子,我就可以直接通过名字或者OID来查询状态了。
比如说我根据他的OID查询湿度和温度
snmpwalk-v2c-cpublic10.3.1.1421.3.6.1.4.1.21239.5.1.2.1.6GEIST-V4-MIB::internalHumidity.1=INTEGER:29%[root@sydnagiosmibs]#snmpwalk-v2c-cpublic10.3.1.1421.3.6.1.4.1.21239.5.1.2.1.5GEIST-V4-MIB::internalTemp.1=INTEGER:2910.1Degrees
等等,湿度是正确的,温度的Interger 是291,他还需要乘以0.1才是正确的温度。
用Nagios自带的check_snmp试试看,结果也是这样,这可不是我想要的,在输到Nagios之前,我必须把数据处理一下
[root@sydnagiosmibs]#/usr/local/nagios/libexec/check_snmp-H10.3.1.142-o1.3.6.1.4.1.21239.5.1.2.1.5.1-Cpublic-P2cSNMPOK-2920.1Degrees|GEIST-V4-MIB::internalTemp.1=292
写个简单的脚本,记得执行chomd +x。注意返回值,0表示正常,1表示warning,2表示critical,3表示未知异常
#!/bin/shsnmp=$(/usr/local/nagios/libexec/check_snmp-H10.3.1.142-o1.3.6.1.4.1.21239.5.1.2.1.5.1-Cpublic-P2c|cut-b11-14)temp=$(($snmp/10))#echo$temp#echo$tempiftest$temp-lt30;thenecho"TEMPOK-$tempDegree"exit0eliftest$temp-lt35;thenecho"TEMPWARNING-$tempDegree"exit1elseecho"TEMPCRITICAL-$tempDegree"exit2fi
前段时间在学习python,试了试python的脚本也是工作的
#!/usr/bin/envpythonimportosresult=os.popen("/usr/local/nagios/libexec/check_snmp-H10.3.1.142-o1.3.6.1.4.1.21239.5.1.2.1.5.1-Cpublic-P2c|cut-b11-14").read()result=float(result)value=result/10ifvalue<30:print("TemperatureisOK-%0.1fDegrees"%value)exit(0)elifvalue<35:print("TemperatureisWarning-%0.1fDegrees"%value)exit(1)else:print("TemperatureisCritical-%0.1fDegrees"%value)exit(2)
command.cfg添加一条命令
definecommand{command_namecheck_snmp_tempcommand_line/usr/local/nagios/libexec/test.sh}
network.cfg里面添加一个host和service的定义
definehost{usegeneric-ap;Inheritdefaultvaluesfromatemplatehost_nameMELSENSOR;Thenamewe'regivingtothisswitchaliasMELSENSOR;Alongernameassociatedwiththeswitchaddress10.3.1.142;IPaddressoftheswitchparentsMEL3750WIFI}defineservice{usegeneric-service;Inheritvaluesfromatemplatehost_nameMELSENSORservicegroupsnetwork-servicesservice_descriptionTempcheck_commandcheck_snmp_temp#2d_coords100,100}
这样就行了。
用类似的方式处理一下湿度,因为湿度直接获取的结果就是正确的,所以我就直接用现成的check_snmp了
最后Nagios 的界面
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。