Created
November 27, 2012 15:59
-
-
Save enichols/4155056 to your computer and use it in GitHub Desktop.
f5_bigip_cluster modifications and new version
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
# -*- encoding: utf-8; py-indent-offset: 4 -*- | |
# +------------------------------------------------------------------+ | |
# | ____ _ _ __ __ _ __ | | |
# | / ___| |__ ___ ___| | __ | \/ | |/ / | | |
# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | | |
# | | |___| | | | __/ (__| < | | | | . \ | | |
# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | | |
# | | | |
# | Copyright Mathias Kettner 2012 mk@mathias-kettner.de | | |
# +------------------------------------------------------------------+ | |
# | |
# This file is part of Check_MK. | |
# The official homepage is at http://mathias-kettner.de/check_mk. | |
# | |
# check_mk is free software; you can redistribute it and/or modify it | |
# under the terms of the GNU General Public License as published by | |
# the Free Software Foundation in version 2. check_mk is distributed | |
# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- | |
# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A | |
# PARTICULAR PURPOSE. See the GNU General Public License for more de- | |
# ails. You should have received a copy of the GNU General Public | |
# License along with GNU Make; see the file COPYING. If not, write | |
# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, | |
# Boston, MA 02110-1301 USA. | |
# Agent / MIB output | |
# see: 1.3.6.1.4.1.3375.2.1.1.1.1.6.0 | |
# F5-BIGIP-SYSTEM-MIB::sysAttrConfigsyncState (STRING) | |
# "-1 - uninitialized or disabled config state" | |
# F5 nodes need to be ntp synced otherwise status reports might be wrong. | |
def inventory_f5_bigip_cluster(info): | |
# run inventory unless we found a device in unconfigured state | |
# don't need to loop over the input as there's only one status. | |
if len(info) == 1 and not info[0][0].startswith("-1"): | |
return [(None, None)] | |
return [] | |
def check_f5_bigip_cluster(item, _no_params, info): | |
cfgsyncstate = info[0][0] | |
# Split the snmp supplied status string to the numeric and textual status | |
statusid, statustxt = cfgsyncstate.split(" - ") | |
# Possible states: | |
# -1 unconfigured, ok only if original status | |
# otherwise this would mean something is heavily broken? | |
# 0 in sync, ok | |
# 1/2 one system outdated, warn | |
# 3 both systems outdated, crit (config split brain) | |
if statusid == "0": | |
return (0, "OK - " + statustxt) | |
elif statusid == "-1": | |
return (2, "CRIT - " + statustxt) | |
elif statusid == "1" or statusid == "2": | |
return (1, "WARN - " + statustxt) | |
elif statusid == "3": | |
return (2, "CRIT - " + statustxt) | |
else: | |
return (3, "UNKNOWN - unexpected Output from SNMP Agent") | |
snmp_info["f5_bigip_cluster"] = \ | |
( ".1.3.6.1.4.1.3375.2.1.1.1.1", [ | |
6, # sysAttrConfigsyncState | |
]) | |
check_info["f5_bigip_cluster"] = (check_f5_bigip_cluster, "Config Sync status", 0, inventory_f5_bigip_cluster ) | |
from distutils.version import LooseVersion | |
snmp_scan_functions["f5_bigip_cluster"] = \ | |
lambda oid: '.1.3.6.1.4.1.3375.2' in oid(".1.3.6.1.2.1.1.2.0") and "big-ip" in oid(".1.3.6.1.4.1.3375.2.1.4.1.0").lower() and LooseVersion(oid(".1.3.6.1.4.1.3375.2.1.4.2.0")) < LooseVersion("11.2.0") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
# -*- encoding: utf-8; py-indent-offset: 4 -*- | |
# +------------------------------------------------------------------+ | |
# | ____ _ _ __ __ _ __ | | |
# | / ___| |__ ___ ___| | __ | \/ | |/ / | | |
# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | | |
# | | |___| | | | __/ (__| < | | | | . \ | | |
# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | | |
# | | | |
# | Copyright Mathias Kettner 2012 mk@mathias-kettner.de | | |
# +------------------------------------------------------------------+ | |
# | |
# This file is part of Check_MK. | |
# The official homepage is at http://mathias-kettner.de/check_mk. | |
# | |
# check_mk is free software; you can redistribute it and/or modify it | |
# under the terms of the GNU General Public License as published by | |
# the Free Software Foundation in version 2. check_mk is distributed | |
# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- | |
# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A | |
# PARTICULAR PURPOSE. See the GNU General Public License for more de- | |
# ails. You should have received a copy of the GNU General Public | |
# License along with GNU Make; see the file COPYING. If not, write | |
# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, | |
# Boston, MA 02110-1301 USA. | |
# Contributed by Eron Nicholson - eron@37signals.com | |
# Agent / MIB output | |
# see: .1.3.6.1.4.1.3375.2.1.14.1.1 | |
# F5-BIGIP-SYSTEM-MIB::sysCmSyncStatusId (INTEGER) | |
# and: .1.3.6.1.4.1.3375.2.1.14.1.2 | |
# F5-BIGIP-SYSTEM-MIB::sysCmSyncStatusStatus (LongDisplayString) | |
# F5 nodes need to be ntp synced otherwise status reports might be wrong. | |
def inventory_f5_bigip_cluster_new(info): | |
# run inventory unless we found a device in unconfigured state | |
# don't need to loop over the input as there's only one status. | |
if len(info) == 1 and not info[0][0].startswith("-1"): | |
return [(None, None)] | |
return [] | |
def check_f5_bigip_cluster_new(item, _no_params, info): | |
statusid = info[0][0] | |
statustxt = info[0][1] | |
# Possible states: | |
# unknown(0), | |
# syncing(1), | |
# needManualSync(2), | |
# inSync(3), | |
# syncFailed(4), | |
# syncDisconnected(5), | |
# standalone(6), | |
# awaitingInitialSync(7), | |
# incompatibleVersion(8), | |
# partialSync(9) | |
if statusid == "3": | |
return (0, "OK - " + statustxt) | |
elif statusid == "0" or statusid == "1" or statusid =="2" or statusid == "7" or statusid =="8" or statusid == "9": | |
return (1, "WARN - " + statustxt) | |
elif statusid == "4" or statusid == "5" or statusid == "6": | |
return (2, "CRIT - " + statustxt) | |
else: | |
return (3, "UNKNOWN - unexpected Output from SNMP Agent") | |
snmp_info["f5_bigip_cluster_new"] = \ | |
( ".1.3.6.1.4.1.3375.2.1.14.1", [ | |
1, # sysCmSyncStatusId | |
2, # sysCmSyncStatusStatus | |
]) | |
check_info["f5_bigip_cluster_new"] = (check_f5_bigip_cluster_new, "Config Sync Status", 0, inventory_f5_bigip_cluster_new ) | |
from distutils.version import LooseVersion | |
snmp_scan_functions["f5_bigip_cluster_new"] = \ | |
lambda oid: '.1.3.6.1.4.1.3375.2' in oid(".1.3.6.1.2.1.1.2.0") and "big-ip" in oid(".1.3.6.1.4.1.3375.2.1.4.1.0").lower() and LooseVersion(oid(".1.3.6.1.4.1.3375.2.1.4.2.0")) >= LooseVersion("11.2.0") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment