Skip to content

Instantly share code, notes, and snippets.

@enichols
Created November 27, 2012 15:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save enichols/4155056 to your computer and use it in GitHub Desktop.
Save enichols/4155056 to your computer and use it in GitHub Desktop.
f5_bigip_cluster modifications and new version
#!/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")
#!/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