Module: check_mk
Branch: master
Commit: fb94cb953b7f0b555ed97c6fb103b1138c37dea1
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=fb94cb953b7f0b…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Fri Mar 13 11:52:27 2015 +0100
#2138 df: Filesystem check now outputs performance data for inodes (and shows a graph)
---
.werks/2138 | 9 +++++++++
ChangeLog | 4 +++-
checkman/df | 5 ++++-
checks/df.include | 18 +++++++++++++++--
pnp-templates/check_mk-df.php | 16 ++++++++++++++++
web/plugins/wato/check_parameters.py | 35 +++++++++++++++++-----------------
6 files changed, 66 insertions(+), 21 deletions(-)
diff --git a/.werks/2138 b/.werks/2138
new file mode 100644
index 0000000..aa99a8f
--- /dev/null
+++ b/.werks/2138
@@ -0,0 +1,9 @@
+Title: df: Filesystem check now outputs performance data for inodes (and shows a graph)
+Level: 1
+Component: checks
+Compatible: compat
+Version: 1.2.7i1
+Date: 1426243919
+Class: feature
+
+
diff --git a/ChangeLog b/ChangeLog
index 937507f..ab4a302 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -122,10 +122,12 @@
* 1227 mysql_ping: New Check to detect misconfiguration of the mk_mysql plugin
* 2134 winperf_phydisk: allow device to appear more than one time in agent output...
* 2102 mbg_lantime_ng_fan, mbg_lantime_ng_state, mbg_lantime_state: new checks for
Meinberg LANTIME Clocks supporting the new MBG-LANTIME-NG-MIB
- * 1229 MySQL: The MySQL Plugin now supports multiple instances...
* 2057 New checks for postgreSQL monitoring...
* 2137 diskstat: new implementation of Linux Disk IO check...
NOTE: Please refer to the migration notes!
+ * 1229 MySQL: The MySQL Plugin now supports multiple instances...
+ NOTE: Please refer to the migration notes!
+ * 2138 df: Filesystem check now outputs performance data for inodes (and shows a
graph)
* 1457 FIX: logins: new check renamed from "users" check...
NOTE: Please refer to the migration notes!
* 1762 FIX: lnx_thermal: Now ignoring trip points with level 0...
diff --git a/checkman/df b/checkman/df
index e449d6e..308332b 100644
--- a/checkman/df
+++ b/checkman/df
@@ -118,7 +118,7 @@ examples:
perfdata:
- One or three values: The first value is the used space of the filesystem
+ Two or four values: The first value is the used space of the filesystem
in MB. Also the minimum (0 MB), maximum (size of the filesystem) and the warning and
critical
levels in MB are provided. If you set the parameter {"trend_perfdata" : True},
then
two additional values are output: the change of the usage in MB per range
@@ -127,6 +127,9 @@ perfdata:
trends is enabled per default. You can globally disable that in {main.mk}
with {filesystem_default_levels["trend_perfdata"] = False}.
+ The last value is the number of used inodes - for filesystems that have
+ inodes.
+
Please note that - until you use the storage type {MULTIPLE} in PNP4Nagios -
changing the parameter {"trend_perfdata"} will stop all updates to
your existing filesystem RRDs. You need either to delete or convert your RRDs
diff --git a/checks/df.include b/checks/df.include
index 8491393..2af24cf 100644
--- a/checks/df.include
+++ b/checks/df.include
@@ -492,20 +492,32 @@ def df_check_filesystem_single(hostname, mountpoint, size_mb,
avail_mb, reserved
inodes_avail_perc = 100.0 * inodes_avail / inodes_total
inodes_warn, inodes_crit = levels["inodes_levels"]
if inodes_warn != None:
- if type(inodes_warn) == int: # Absolute levels
+ # Levels in absolute numbers
+ if type(inodes_warn) == int:
if inodes_crit > inodes_avail:
inode_status = 2
problems.append("less than %dk inodes available(!!)" %
(crit_inode / 1000))
elif inodes_warn > inodes_avail:
inode_status = 1
problems.append("less than %dk inodes available(!)" %
(warn_inode / 1000))
- else: # Percentage levels
+ inodes_warn_abs = inodes_warn
+ inodes_crit_abs = inodes_crit
+
+ # Levels in percent
+ else:
if inodes_crit > inodes_avail_perc:
inode_status = 2
problems.append("less than %0.2f%% inodes available(!!)" %
inodes_crit)
elif inodes_warn > inodes_avail_perc:
inode_status = 1
problems.append("less than %.02f%% inodes available(!)" %
inodes_warn)
+ inodes_warn_abs = (100 - inodes_warn) / 100.0 * inodes_total
+ inodes_crit_abs = (100 - inodes_crit) / 100.0 * inodes_total
+
+ else:
+ inodes_warn_abs = None
+ inodes_crit_abs = None
+
# Only show inodes if they are at less then 50%
status = max(status, inode_status)
show_inodes = levels["show_inodes"]
@@ -514,6 +526,8 @@ def df_check_filesystem_single(hostname, mountpoint, size_mb,
avail_mb, reserved
(show_inodes == "onproblem" and inode_status):
infotext += ", inodes available: %dk/%0.2f%%" % (inodes_avail /
1000, inodes_avail_perc)
+ perfdata += [ ("inodes_used", inodes_total - inodes_avail,
inodes_warn_abs, inodes_crit_abs, 0, inodes_total) ]
+
if problems:
infotext += " - %s" % ", ".join(problems)
problems = []
diff --git a/pnp-templates/check_mk-df.php b/pnp-templates/check_mk-df.php
index 1e4126a..5eff5ee 100644
--- a/pnp-templates/check_mk-df.php
+++ b/pnp-templates/check_mk-df.php
@@ -180,4 +180,20 @@ if (isset($RRD['trend_hoursleft'])) {
$def[4] .= "GPRINT:days_left:LAST:\"%7.2lf days\" ";
}
}
+
+if (isset($RRD['inodes_used'])) {
+ $opt[5] = "--vertical-label 'Inode usage' -l 0 -u $MAX[inodes_used]
--title '$hostname: Inodes usage for $fstitle' ";
+ $def[5] = "DEF:inodes_used=${RRD['inodes_used']} ";
+ $def[5] .= "AREA:inodes_used#a0608f:\"Inodes used\:\" ";
+ $def[5] .= "GPRINT:inodes_used:LAST:\"%2.0lf\" ";
+ $def[5] .= "LINE1:inodes_used#c00080:\"\" ";
+ $def[5] .= "GPRINT:inodes_used:MAX:\"Max\: %2.0lf\" ";
+ $def[5] .= "GPRINT:inodes_used:AVERAGE:\"Average\: %2.0lf\\n\"
";
+ $def[5] .= "HRULE:$MAX[inodes_used]#000000:\"Total Inodes \" ";
+ if (isset($WARN['inodes_used'])) {
+ $def[5] .= "HRULE:$WARN[inodes_used]#ffff00:\"Warning at
$WARN[inodes_used] \" ";
+ $def[5] .= "HRULE:$CRIT[inodes_used]#ff0000:\"Critical at
$CRIT[inodes_used]\\n\" ";
+ }
+}
+
?>
diff --git a/web/plugins/wato/check_parameters.py b/web/plugins/wato/check_parameters.py
index 2cc59bc..fd6f34f 100644
--- a/web/plugins/wato/check_parameters.py
+++ b/web/plugins/wato/check_parameters.py
@@ -2199,23 +2199,24 @@ filesystem_elements = [
)),
( "inodes_levels",
Alternative(
- title = _("Levels for Inodes"),
- help = _("The number of remaining inodes on the filesystem.
"
- "Please note that this setting has no effect on some
filesystem checks."),
- elements = [
- Tuple( title = _("Percentage free"),
- elements = [
- Percentage(title = _("Warning if less
than") , unit = "%", minvalue = 0.0),
- Percentage(title = _("Critical if less
than"), unit = "%", minvalue = 0.0),
- ]
- ),
- Tuple( title = _("Absolute free"),
- elements = [
- Integer(title = _("Warning if less
than"), size = 10, unit = _("inodes"), minvalue = 0),
- Integer(title = _("Critical if less
than"), size = 10, unit = _("inodes"), minvalue = 0),
- ]
- )
- ]
+ title = _("Levels for Inodes"),
+ help = _("The number of remaining inodes on the filesystem. "
+ "Please note that this setting has no effect on some
filesystem checks."),
+ elements = [
+ Tuple(title = _("Percentage free"),
+ elements = [
+ Percentage(title = _("Warning if less than")),
+ Percentage(title = _("Critical if less than")),
+ ]
+ ),
+ Tuple(title = _("Absolute free"),
+ elements = [
+ Integer(title = _("Warning if less than"), size
= 10, unit = _("inodes"), minvalue = 0, default_value = 10000),
+ Integer(title = _("Critical if less than"), size
= 10, unit = _("inodes"), minvalue = 0, default_value = 5000),
+ ]
+ )
+ ],
+ default_value = (10.0, 5.0),
)
),
( "show_inodes",