naf: Added "cluster" check
Signed-off-by: Sven Velt <sven@velt.de>
This commit is contained in:
parent
137670d986
commit
01251ba4e3
39
check_naf.py
39
check_naf.py
|
@ -25,6 +25,11 @@ from monitoringplugin import SNMPMonitoringPlugin
|
||||||
|
|
||||||
class CheckNAF(SNMPMonitoringPlugin):
|
class CheckNAF(SNMPMonitoringPlugin):
|
||||||
OID = {
|
OID = {
|
||||||
|
'Cluster_Settings': '.1.3.6.1.4.1.789.1.2.3.1.0',
|
||||||
|
'Cluster_State': '.1.3.6.1.4.1.789.1.2.3.2.0',
|
||||||
|
'Cluster_InterconnectStatus': '.1.3.6.1.4.1.789.1.2.3.8.0',
|
||||||
|
'Cluster_CannotTakeOverCause': '.1.3.6.1.4.1.789.1.2.3.3.0',
|
||||||
|
|
||||||
'CPU_Arch': '.1.3.6.1.4.1.789.1.1.11.0',
|
'CPU_Arch': '.1.3.6.1.4.1.789.1.1.11.0',
|
||||||
'CPU_Time_Busy': '.1.3.6.1.4.1.789.1.2.1.3.0',
|
'CPU_Time_Busy': '.1.3.6.1.4.1.789.1.2.1.3.0',
|
||||||
'CPU_Time_Idle': '.1.3.6.1.4.1.789.1.2.1.5.0',
|
'CPU_Time_Idle': '.1.3.6.1.4.1.789.1.2.1.5.0',
|
||||||
|
@ -79,11 +84,18 @@ class CheckNAF(SNMPMonitoringPlugin):
|
||||||
}
|
}
|
||||||
|
|
||||||
OWC = {
|
OWC = {
|
||||||
|
'Cluster_InterconnectStatus': ( (4,), (3,), (1,2,), ),
|
||||||
|
'Cluster_Settings': ( (2,), (1,3,4,), (5,), ),
|
||||||
|
'Cluster_State': ( (2,4,), (), (1,3,), ),
|
||||||
'Global_Status': ( (3,), (4,), (5,6), ),
|
'Global_Status': ( (3,), (4,), (5,6), ),
|
||||||
'NVRAM_Status': ( (1,9), (2,5,8), (3,4,6), ),
|
'NVRAM_Status': ( (1,9), (2,5,8), (3,4,6), ),
|
||||||
}
|
}
|
||||||
|
|
||||||
Status2String = {
|
Status2String = {
|
||||||
|
'Cluster_CannotTakeOverCause': { '1' : 'ok', '2' : 'unknownReason', '3' : 'disabledByOperator', '4' : 'interconnectOffline', '5' : 'disabledByPartner', '6' : 'takeoverFailed', },
|
||||||
|
'Cluster_InterconnectStatus': { '1' : 'notPresent', '2' : 'down', '3' : 'partialFailure', '4' : 'up', },
|
||||||
|
'Cluster_Settings': { '1' : 'notConfigured', '2' : 'enabled', '3' : 'disabled', '4' : 'takeoverByPartnerDisabled', '5' : 'thisNodeDead', },
|
||||||
|
'Cluster_State': { '1' : 'dead', '2' : 'canTakeover', '3' : 'cannotTakeover', '4' : 'takeover', },
|
||||||
'CPU_Arch' : { '1' : 'x86', '2' : 'alpha', '3' : 'mips', '4' : 'sparc', '5' : 'amd64', },
|
'CPU_Arch' : { '1' : 'x86', '2' : 'alpha', '3' : 'mips', '4' : 'sparc', '5' : 'amd64', },
|
||||||
'NVRAM_Status' : { '1' : 'ok', '2' : 'partiallyDischarged', '3' : 'fullyDischarged', '4' : 'notPresent', '5' : 'nearEndOfLife', '6' : 'atEndOfLife', '7' : 'unknown', '8' : 'overCharged', '9' : 'fullyCharged', },
|
'NVRAM_Status' : { '1' : 'ok', '2' : 'partiallyDischarged', '3' : 'fullyDischarged', '4' : 'notPresent', '5' : 'nearEndOfLife', '6' : 'atEndOfLife', '7' : 'unknown', '8' : 'overCharged', '9' : 'fullyCharged', },
|
||||||
'df_FS_Status' : { '1' : 'unmounted', '2' : 'mounted', '3' : 'frozen', '4' : 'destroying', '5' : 'creating', '6' : 'mounting', '7' : 'unmounting', '8' : 'nofsinfo', '9' : 'replaying', '10': 'replayed', },
|
'df_FS_Status' : { '1' : 'unmounted', '2' : 'mounted', '3' : 'frozen', '4' : 'destroying', '5' : 'creating', '6' : 'mounting', '7' : 'unmounting', '8' : 'nofsinfo', '9' : 'replaying', '10': 'replayed', },
|
||||||
|
@ -123,6 +135,31 @@ class CheckNAF(SNMPMonitoringPlugin):
|
||||||
return self.remember_check('cpu', returncode, output, perfdata=perfdata)
|
return self.remember_check('cpu', returncode, output, perfdata=perfdata)
|
||||||
|
|
||||||
|
|
||||||
|
def check_cluster(self):
|
||||||
|
cl_settings = int(self.SNMPGET(self.OID['Cluster_Settings']))
|
||||||
|
if cl_settings == 1: # notConfigured
|
||||||
|
return self.remember_check('cluster', self.RETURNCODE['WARNING'], 'No cluster configured!')
|
||||||
|
|
||||||
|
cl_state = int(self.SNMPGET(self.OID['Cluster_State']))
|
||||||
|
cl_interconnectstatus = int(self.SNMPGET(self.OID['Cluster_InterconnectStatus']))
|
||||||
|
|
||||||
|
returncode = []
|
||||||
|
returncode.append(self.map_status_to_returncode(cl_settings, self.OWC['Cluster_Settings']))
|
||||||
|
returncode.append(self.map_status_to_returncode(cl_state, self.OWC['Cluster_State']))
|
||||||
|
returncode.append(self.map_status_to_returncode(cl_interconnectstatus, self.OWC['Cluster_InterconnectStatus']))
|
||||||
|
returncode = max(returncode)
|
||||||
|
|
||||||
|
output = 'Settings: ' + self.Status2String['Cluster_Settings'][str(cl_settings)] + ', '
|
||||||
|
output += 'state: ' + self.Status2String['Cluster_State'][str(cl_state)] + ', '
|
||||||
|
output += 'interconnect state: ' + self.Status2String['Cluster_InterconnectStatus'][str(cl_interconnectstatus)]
|
||||||
|
|
||||||
|
if cl_state == 4: # cannotTakeover
|
||||||
|
cl_cannottakeovercause = self.SNMPGET(self.OID['Cluster_CannotTakeOverCause'])
|
||||||
|
output = 'Cannot takeover, reason: ' + self.Status2String['Cluster_CannotTakeOverCause'][cl_cannottakeovercause] + '! ' + output
|
||||||
|
|
||||||
|
return self.remember_check('cluster', returncode, output)
|
||||||
|
|
||||||
|
|
||||||
def check_disk(self, target='failed', warn='', crit=''):
|
def check_disk(self, target='failed', warn='', crit=''):
|
||||||
di_total = int(self.SNMPGET(self.OID['Disks_Total']))
|
di_total = int(self.SNMPGET(self.OID['Disks_Total']))
|
||||||
di_active = int(self.SNMPGET(self.OID['Disks_Active']))
|
di_active = int(self.SNMPGET(self.OID['Disks_Active']))
|
||||||
|
@ -407,6 +444,8 @@ def main():
|
||||||
|
|
||||||
if check == 'global' or check == 'environment':
|
if check == 'global' or check == 'environment':
|
||||||
result = plugin.check_global()
|
result = plugin.check_global()
|
||||||
|
elif check == 'cluster':
|
||||||
|
result = plugin.check_cluster()
|
||||||
elif check == 'cpu':
|
elif check == 'cpu':
|
||||||
result = plugin.check_cpu(warn=warn, crit=crit)
|
result = plugin.check_cpu(warn=warn, crit=crit)
|
||||||
elif check == 'disk':
|
elif check == 'disk':
|
||||||
|
|
Loading…
Reference in a new issue