#!/usr/bin/python # 2016-12-29 first version # Author: DiXingYu import sys import getopt import netsnmp import time import Queue opts, args = getopt.getopt(sys.argv[1:], 'H:C:', [ 'host=', 'community=', 'help' ] ) for option, value in opts: if option in ['--help', '-h']: print """ usage:%s -H host ip address -C snmpv2 community """ sys.exit() elif option in ['--host', '-H']: hosts = value elif option in ['--community', '-C']: communitys = value WarningNum = 0 CriticalNum = 0 start_time = time.time() #Check Disk problemDisklist = [] #Get the Disk Number diskname_raw = netsnmp.snmpgetbulk(0,16,netsnmp.Varbind('.1.3.6.1.4.1.2011.2.235.1.1.18.50.1.6'),Version = 2,DestHost=(hosts),Community=(communitys)) if len(diskname_raw) == 0: print "Critical:The Device is down or snmp no respone" sys.exit(2) diskNameList = list(diskname_raw) while '' in diskNameList: diskNameList.remove('') #Get the Disk Status diskstatus_raw = netsnmp.snmpgetbulk(0,16,netsnmp.Varbind('.1.3.6.1.4.1.2011.2.235.1.1.18.50.1.3'),Version = 2,DestHost=(hosts),Community=(communitys)) diskStatusList = list(diskstatus_raw) while '' in diskNameList: diskStatusList.remove('') #Combin DiskName and DiskStatus DiskStatus_Dict = dict(zip(diskNameList,diskStatusList)) #Check Disk Status # 1: ok # 2: minor # 3: major # 4: critical # 5: absence # 6: unknow for (k,i) in DiskStatus_Dict.items(): if i != str(1): problemDisklist.append(k) if len(problemDisklist) != 0: CriticalNum = CriticalNum + len(problemDisklist) print "Critical: The following Disk is broken" for (k,i) in DiskStatus_Dict.items(): if i != str(1): print k, #Check Temp problemTemplist = [] #Get the temp inletTemp_raw = netsnmp.snmpget(netsnmp.Varbind('.1.3.6.1.4.1.2011.2.235.1.1.13.50.1.2.17.73.110.108.101.116.32.84.101.109.112.0.0.0.0.0.0.0'),Version = 2,DestHost=(hosts),Community=(communitys)) outletTemp_raw = netsnmp.snmpget(netsnmp.Varbind('.1.3.6.1.4.1.2011.2.235.1.1.13.50.1.2.17.79.117.116.108.101.116.32.84.101.109.112.0.0.0.0.0.0'),Version = 2,DestHost=(hosts),Community=(communitys)) inletTemp = float(inletTemp_raw[0]) outletTemp = float(outletTemp_raw[0]) if inletTemp > 30: WarningNum = WarningNum + 1 problemTemplist.append("InletTemp") print "Warning: The inlet temp is too high, temp is " + str(inletTemp), '|' "inlet Temp=%.1fC"%inletTemp,"outlet Temp=%.1fC"%outletTemp elif inletTemp < 15: WarningNum = WarningNum + 1 problemTemplist.append("InletTemp") print "Warning: The inlet temp is too low, temp is " + str(inletTemp), '|' "inlet Temp=%.1fC"%inletTemp,"outlet Temp=%.1fC"%outletTemp elif outletTemp > 40: WarningNum = WarningNum + 1 problemTemplist.append("OutletTemp") print "Warning: The outlet temp is too high, temp is " + str(inletTemp), '|' "inlet Temp=%.1fC"%inletTemp,"outlet Temp=%.1fC"%outletTemp #Check Power #Get Power Status power1_raw = netsnmp.snmpget(netsnmp.Varbind('.1.3.6.1.4.1.2011.2.235.1.1.6.50.1.7.1'),Version = 2,DestHost=(hosts),Community=(communitys),Timeout=50000) power2_raw = netsnmp.snmpget(netsnmp.Varbind('.1.3.6.1.4.1.2011.2.235.1.1.6.50.1.7.1'),Version = 2,DestHost=(hosts),Community=(communitys),Timeout=50000) power1status = str(power1_raw[0]) power2status = str(power2_raw[0]) if power1status != str(1): CriticalNum = CriticalNum + 1 print "Critical: The power 1 is down" elif power2status != str(1): CriticalNum = CriticalNum + 1 print "Critical: The power 2 is down" #Check Fan problemFanlist = [] #Get the Fan name fanname_raw = netsnmp.snmpgetbulk(0,8,netsnmp.Varbind('.1.3.6.1.4.1.2011.2.235.1.1.8.50.1.7'),Version = 2,DestHost=(hosts),Community=(communitys)) fanNameList = list(fanname_raw) while '' in fanNameList: fanNameList.remove('') #Get the Fan status fanstatus_raw = netsnmp.snmpgetbulk(0,8,netsnmp.Varbind('.1.3.6.1.4.1.2011.2.235.1.1.8.50.1.4'),Version = 2,DestHost=(hosts),Community=(communitys)) fanStatusList = list(fanstatus_raw) while '' in fanStatusList: fanStatusList.remove('') #Get the Fan speed #fanspeed_raw = netsnmp.snmpgetbulk(0,8,netsnmp.Varbind('.1.3.6.1.4.1.2011.2.235.1.1.8.50.1.2'),Version = 2,DestHost=(hosts),Community=(communitys)) #fanSpeedList = list(fanspeed_raw) #while '' in fanSpeedList: # fanSpeedList.remove('') #Combin FanName and FanStatus fanStatus_Dict = dict(zip(fanNameList,fanStatusList)) #Combin FanName and FanSpeed #fanSpeed_Dict = dict(zip(fanNameList,fanSpeedList)) #Check Fan Status for (k,i) in fanStatus_Dict.items(): if i != str(1): problemFanlist.append(k) if len(problemFanlist) != 0: WarningNum = WarningNum + len(problemFanlist) print "Warning: The following Fan is broken" for (k,i) in fanStatus_Dict.items(): if i != str(1): print k, time = time.time() - start_time print time #nagios exit if CriticalNum > 0: sys.exit(2) elif WarningNum > 0: sys.exit(1) else: print "OK, All power on line, disk online " + str(len(diskNameList)) + ", Working Fan is "+ str(len(fanStatusList)),'|' "inlet Temp=%.1fC"%inletTemp,"outlet Temp=%.1fC"%outletTemp sys.exit(0)