Module: check_mk
Branch: master
Commit: 882209fb5c596b406068e6478ebcea1b516838cb
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=882209fb5c596b…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Tue Apr 12 08:28:49 2011 +0200
ipmi: allow to ignore certain sensors
This is done via ipmi_ignored_sensors. See man page
of ipmi for details.
---
ChangeLog | 1 +
checkman/ipmi | 24 +++++++++++++++++-------
checks/ipmi | 45 +++++++++++++++++++++++++++++++++++++++++----
3 files changed, 59 insertions(+), 11 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index b524bc2..66d3f27 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -67,6 +67,7 @@
* if/if64: also show perf-o-meter if speed is unknown
* f5_bigip_pool: status of F5 BIP/ip load balancing pools
* f5_bigip_vserver: status of F5 BIP/ip virtual servers
+ * ipmi: new configuration variable ipmi_ignored_sensors (see man page)
1.1.10:
diff --git a/checkman/ipmi b/checkman/ipmi
index 9ca3b46..1c9c249 100644
--- a/checkman/ipmi
+++ b/checkman/ipmi
@@ -7,16 +7,19 @@ description:
This check makes use of the output of a working {ipmitool} on
a Linux system. If the kernel properly supports IPMI and {ipmitool}
is installed, then the agent will output the current state of
- power supplies, cooling devices and temperatures. This check makes
+ power supplies, cooling devices, temperatures and other devices
+ avaiable via IPMI. This check makes
sure that all those devices are working properly.
- Fortunately, IPMI provides not only the current sensor values
- but also their state, so no levels need to be configured for
- this checks.
+ Fortunately, IPMI provides not only the current sensor values but also
+ their state, so no levels need to be configured for this checks.
- This check provides a summarized mode, where all sensors
- appear as one summary check per host and a detailed mode
- with one check per sensor.
+ This check provides a summarized mode, where all sensors appear as one
+ summary check per host and a detailed mode with one check per sensor.
+
+ Please note: on some systems IPMI reports sensors in a non-ok state wheras
+ actually no problem exists. As of version 1.1.11i1 these sensors can be
+ ignored with the configuration variable {ipmi_ignored_sensors}.
item:
{"Summary"} for summary mode, the name of the IPMI item
@@ -44,9 +47,16 @@ examples:
# Make inventory produce detailed IPMI checks
ipmi_summarize = False
+ # Ignore certain types of sensors
+ ipmi_ignored_sensors = [ "Power_Meter", "Virtual_Fan" ]
+
[configuration]
ipmi_ignore_nr (boolean): If set to {True}, sensors
with the state {nr} will be ignored. Default is {False}.
ipmi_summarize (boolean): If set to {False}, the inventory
will create a separate service for each IPMI device. Default
is {True}.
+ipmi_ignored_sensors(list): A list of sensors names that should
+ be ignored when doing inventory (for non-summarized mode) or
+ during check for summarized mode). The check does a {prefix}
+ match on the names.
diff --git a/checks/ipmi b/checks/ipmi
index 3b12ac8..b5c5d08 100644
--- a/checks/ipmi
+++ b/checks/ipmi
@@ -26,6 +26,7 @@
# Example of output from ipmi:
+# <<<ipmi>>>
# ambienttemp 25.800 degrees_C ok na na na 34.800 40.200 na
# bulk.v12-0-s0 11.940 Volts ok na 10.200 na na 13.800 na
# bulk.v3_3-s0 3.360 Volts ok na 3.000 na na 3.600 na
@@ -47,6 +48,7 @@
# p0.v_vdd 1.332 Volts ok 0.792 0.900 0.996 1.596 1.692 1.800
# Yet another host (HP DL 360G5)
+# <<<ipmi>>>
# UID_Light 0.000 unspecified ok na na 0.000 na na na
# Int._Health_LED 0.000 unspecified ok na na 0.000 na na na
# Ext._Health_LED 0.000 unspecified ok na na 0.000 na na na
@@ -68,6 +70,21 @@
# Temp_7 30.000 degrees_C ok na na -64.000 na na na
# Power_Meter 180.000 Watts cr na na 384.000 na na na
+# And this host has some false-criticals (PowerMeter, VirtualFan)
+# <<<ipmi>>>
+# Temp_1 17.000 degrees_C ok 0.000 0.000 0.000 40.000 42.000 46.000
+# Temp_2 40.000 degrees_C ok 0.000 0.000 0.000 0.000 82.000 83.000
+# Temp_3 44.000 degrees_C ok 0.000 0.000 0.000 0.000 82.000 83.000
+# Temp_4 52.000 degrees_C ok 0.000 0.000 0.000 0.000 87.000 92.000
+# Temp_5 46.000 degrees_C ok 0.000 0.000 0.000 0.000 85.000 90.000
+# Temp_6 55.000 degrees_C ok 0.000 0.000 0.000 0.000 85.000 90.000
+# Temp_7 51.000 degrees_C ok 0.000 0.000 0.000 0.000 85.000 90.000
+# Temp_8 58.000 degrees_C ok 0.000 0.000 0.000 0.000 78.000 83.000
+# Temp_9 74.000 degrees_C ok 0.000 0.000 0.000 0.000 110.000 115.000
+# Temp_10 31.000 degrees_C ok 0.000 0.000 0.000 0.000 60.000 65.000
+# Virtual_Fan 19.600 unspecified nc na na na na na na
+# Power_Meter 236.000 Watts cr na na na na na na
+
# IPMI has two operation modes:
# 1. detailed
@@ -79,12 +96,23 @@
ipmi_summarize = True
ipmi_ignore_nr = False # set to True in order to ignore entries with state 'nr'
+ipmi_ignored_sensors = [] # example: [ "Power_Meter", "Virtual_Fan" ]
+
+def ipmi_ignore_entry(name, state):
+ if ipmi_ignore_nr and state == 'nr':
+ return True
+ for e in ipmi_ignored_sensors:
+ if name.startswith(e):
+ return True
+ return False
def inventory_ipmi(checkname, info):
if ipmi_summarize and len(info) > 0:
- return [ ( "Summary", None, None ) ]
+ return [ ( "Summary", None ) ]
else:
- return [ ( line[0], line[1], None ) for line in info if not ipmi_ignore_nr or line[3] != 'nr' ]
+ return [ ( line[0], None )
+ for line in info
+ if not ipmi_ignore_entry(line[0], line[3]) ]
def check_ipmi(item, params, info):
if item == "Summary":
@@ -94,7 +122,8 @@ def check_ipmi(item, params, info):
def check_ipmi_detailed(item, info):
try:
- for name,val,unit,status,unrec_low,crit_low,warn_low,warn_high,crit_high,unrec_high in info:
+ for name, val, unit, status, unrec_low, crit_low, \
+ warn_low, warn_high, crit_high, unrec_high in info:
if name == item:
perfdata = [ (name, val + unit) ] # TODO: add warn and crit levels
if status == 'ok':
@@ -115,7 +144,11 @@ def check_ipmi_summarized(info):
ambient_count = 0
ambient_sum = 0.0
try:
- for name,val,unit,status,unrec_low,crit_low,warn_low,warn_high,crit_high,unrec_high in info:
+ for name, val, unit, status, unrec_low, crit_low, \
+ warn_low, warn_high, crit_high, unrec_high in info:
+ if ipmi_ignore_entry(name, status):
+ continue
+
text = "%s is %s %s" % (name, val, unit)
count += 1
if status == 'nc':
@@ -155,4 +188,8 @@ def check_ipmi_summarized(info):
return (worst_status, "%s - %s" % (statname, infotext), perfdata)
check_info['ipmi'] = (check_ipmi, "IPMI Sensor %s", 1, inventory_ipmi)
+
+# Make sure, configuration variables needed during check time are present
+# in precompiled code
check_config_variables.append("ipmi_ignore_nr")
+check_config_variables.append("ipmi_ignored_sensors")
Module: check_mk
Branch: master
Commit: 1a19cef045f432dbddba985a308eb59625a3aecf
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=1a19cef045f432…
Author: Florian Heigl <fh(a)mathias-kettner.de>
Date: Fri Apr 8 17:39:49 2011 +0200
added f5 basic checks
---
ChangeLog | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 6bd976f..3be9e57 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -39,6 +39,7 @@
* FIX: bluecoat_sensors: Using scale parameter provided by the host for reported values
* FIX: fjdarye60_devencs, fjdarye60_disks.summary: added snmp scan functions
* FIX: decru_*: added snmp scan functions
+ * FIX: heartbeat_rscstatus handles empty agent output correctly
* printer_supply: Changed order of tests. When a printer reports -3 this
is used before the check if maxlevel is -2.
* printer_supply: Skipping inventory of supplies which have current value
@@ -63,7 +64,8 @@
* if/if64: also output performance data if operstate not as expected
* if/if64: scan function now also detects devices where the first port
* if/if64: also show perf-o-meter if speed is unknown
- * FIX: heartbeat_rscstatus handles empty agent output correctly
+ * f5_bigip_pool: status of F5 BIP/ip load balancing pools
+ * f5_bigip_vserver: status of F5 BIP/ip virtual servers
1.1.10:
Module: check_mk
Branch: master
Commit: ec97df2f6ffa858ba7e3df625490c155fb272c95
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=ec97df2f6ffa85…
Author: Florian Heigl <fh(a)mathias-kettner.de>
Date: Fri Apr 8 17:01:29 2011 +0200
add support for f5 loadbalancers
---
checkman/f5_bigip_pool | 15 ++++++++
checkman/f5_bigip_vserver | 14 ++++++++
checks/f5_bigip_pool | 74 ++++++++++++++++++++++++++++++++++++++++
checks/f5_bigip_vserver | 82 +++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 185 insertions(+), 0 deletions(-)
diff --git a/checkman/f5_bigip_pool b/checkman/f5_bigip_pool
new file mode 100644
index 0000000..769251a
--- /dev/null
+++ b/checkman/f5_bigip_pool
@@ -0,0 +1,15 @@
+title: Check status of load balancing pools on F5 Big-IP
+agents: snmp
+author: Florian Heigl <fh(a)mathias-kettner.de>
+license: GPL
+distribution: check_mk
+description:
+ The check queries the MIB tables of F5 BIG-IP loadbalancers (local traffic managers) for the status of any load balancing pools. It gathers the number of loadbalancers backing the pool and how many of those are working. It doesn't currently honor the 'MinUpMembers' parameter that can be set to trigger actions for the pool if too many members fail.
+It supports devices running the 9.0 and above releases of the F5 OS. It's tested against 9.3 devices.
+
+inventory:
+ The check gather a list of the pools defined on a system. It will include non-enabled ones, as this is considered a temporary state.
+
+
+perfdata:
+ the check does not (yet) generate performance data.
diff --git a/checkman/f5_bigip_vserver b/checkman/f5_bigip_vserver
new file mode 100644
index 0000000..03dd8a0
--- /dev/null
+++ b/checkman/f5_bigip_vserver
@@ -0,0 +1,14 @@
+title: Check status of virtual servers on a F5 load balancer
+agents: snmp
+author: Florian Heigl <fh(a)mathias-kettner.de>
+license: GPL
+distribution: check_mk
+description:
+ The check queries the MIB tables of F5 BIG-IP loadbalancers (local traffic managers) for the status of any virtual server defined on them. It supports devices running the 9.0 and above releases of the F5 OS. It's tested against 9.3 devices.
+
+inventory:
+ Any virtual server that is found online will be added during inventoryy and checked for it's status. Virtual servers in the various "Warning" states will not be inventorized.
+
+
+perfdata:
+ the check does not (yet) generate performance data.
diff --git a/checks/f5_bigip_pool b/checks/f5_bigip_pool
new file mode 100644
index 0000000..7e61daa
--- /dev/null
+++ b/checks/f5_bigip_pool
@@ -0,0 +1,74 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2010 mk(a)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.2.5.1.2.1
+# F5-BIGIP-LOCAL-MIB::ltmPoolName. 8.80.111.111.108.asci_encoded_str = Pool_NMA
+# F5-BIGIP-LOCAL-MIB::ltmPoolMemberCnt. 8.80.111.111.108.95.78.77.65 = 2
+# F5-BIGIP-LOCAL-MIB::ltmPoolActiveMemberCnt. 8.80.111.111.108.95.78.77.65 = 0
+
+
+def inventory_f5_bigip_pool(checkname,info):
+# inventorize all pools and their member count
+ inventory = []
+ for line in info:
+ if line[0] != "":
+ inventory.append((line[0],None))
+ return inventory
+
+
+def check_f5_bigip_pool(item, _no_params, info):
+ for line in info:
+ if line[0] == item:
+ pool_act_members = int(line[1])
+ pool_def_members = int(line[2])
+ if pool_act_members == pool_def_members:
+ return (0, "OK - all members online")
+ elif pool_act_members > 1:
+ return (1, "WARN - only %i of %i pool members are up" % (pool_act_members, pool_def_members))
+ elif pool_members == 1:
+ return (2, "CRIT - only 1 pool member left")
+ elif pool_members == 0:
+ return (2, "CRIT - no pool members left")
+ else:
+ return (3, "UNKNOWN output for pool %s" % item)
+ return (3, "UNKNOWN - unexpected Output from SNMP Agent")
+
+
+snmp_info["f5_bigip_pool"] = \
+ ( ".1.3.6.1.4.1.3375.2.2.5.1.2.1", [
+ 1, # ltmPoolEntry
+ 8, # ltmPoolActiveMemberCnt
+ 23, # ltmPoolMemberCnt
+ ])
+
+
+check_info["f5_bigip_pool"] = (check_f5_bigip_pool, "Load Balancing Pool %s", 0, inventory_f5_bigip_pool )
+
+
+snmp_scan_functions["f5_bigip_pool"] = \
+ 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()
diff --git a/checks/f5_bigip_vserver b/checks/f5_bigip_vserver
new file mode 100644
index 0000000..43f3ea4
--- /dev/null
+++ b/checks/f5_bigip_vserver
@@ -0,0 +1,82 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2010 mk(a)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.
+
+
+# Example output
+# Name of a Virt. Server:
+# 1.3.6.1.4.1.3375.2.2.10.2.3.1.1.ascii_encoded_string. "VS_XX"
+# Textual Status (only supported in F5 OS 9.3+
+# 1.3.6.1.4.1.3375.2.2.10.1.2.1.25.5.12.34.56.78.90 "The virtual server is available"
+# Table with name and status
+# 1.3.6.1.4.1.3375.2.2.10.13.2.1. 1 .5.12.34.56.78.90 "VS_XX"
+# 1.3.6.1.4.1.3375.2.2.10.13.2.1. 2 .5.12.34.56.78.90 1
+
+
+def inventory_f5_bigip_vserver(checkname,info):
+ inventory = []
+ for line in info:
+# snmp info will return some empty lines here, filter them and
+# only inventorize OK status.
+ if line[0] != "":
+ if int(line[1]) == 1:
+ inventory.append((line[0], None))
+ return inventory
+
+
+def check_f5_bigip_vserver(item, _no_params, info):
+ for line in info:
+ if line[0] != "":
+ if line[0] == item:
+ status = int(line[1])
+ if status == 0:
+ return (1, "WARN - Virtual Server is disabled")
+ elif status == 1:
+ return (0, "OK - Virtual Server is up and available")
+ elif status == 2:
+ return (2, "CRIT - Virtual Server is currently not available")
+ elif status == 3:
+ return (2, "CRIT - Virtual Server is not available")
+ elif status == 4:
+ return (1, "WARN - Virtual Server status is unknown")
+ else:
+ return (3, "UNKNOWN")
+ return (3, "UNKNOWN - Virtual Server %s not found in SNMP output" % item)
+
+
+
+snmp_info["f5_bigip_vserver"] = \
+ ( ".1.3.6.1.4.1.3375.2.2.10.1.2.1", [
+ 1, # Name
+ 2, # Status
+ ])
+
+
+
+check_info["f5_bigip_vserver"] = (check_f5_bigip_vserver, "Virtual Server %s", 0, inventory_f5_bigip_vserver )
+
+
+snmp_scan_functions["f5_bigip_vserver"] = \
+ 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()
Module: check_mk
Branch: master
Commit: 3083fb5c6ada588c92850624ff163d6c6d0c565a
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=3083fb5c6ada58…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Thu Apr 7 17:12:52 2011 +0200
Updated bug entries
---
.bugs/241 | 10 ++++++++++
1 files changed, 10 insertions(+), 0 deletions(-)
diff --git a/.bugs/241 b/.bugs/241
new file mode 100644
index 0000000..680efbb
--- /dev/null
+++ b/.bugs/241
@@ -0,0 +1,10 @@
+Title: BI filter for aggregation group does not work
+Component: bi
+Benefit: 2
+State: open
+Cost: 2
+Date: 2011-04-07 17:12:11
+Class: bug
+
+In the table single host aggregations the filter for the
+BI group is not effective. It is simply ignored.