git.lirion.de

Of git, get, and gud

summaryrefslogtreecommitdiffstats
path: root/nagios-plugins-contrib-24.20190301~bpo9+1/percona-nagios-plugins/nagios/bin/pmp-check-lvm-snapshots
diff options
context:
space:
mode:
authormail_redacted_for_web 2019-04-17 19:07:19 +0200
committermail_redacted_for_web 2019-04-17 19:07:19 +0200
commit1e2387474a449452b78520b9ad96a8b4b5e99722 (patch)
tree836889471eec7d2aac177405068e2a8f1e2b1978 /nagios-plugins-contrib-24.20190301~bpo9+1/percona-nagios-plugins/nagios/bin/pmp-check-lvm-snapshots
downloadnagios-plugins-contrib-1e2387474a449452b78520b9ad96a8b4b5e99722.tar.bz2
initial commit of source fetch
Diffstat (limited to 'nagios-plugins-contrib-24.20190301~bpo9+1/percona-nagios-plugins/nagios/bin/pmp-check-lvm-snapshots')
-rwxr-xr-xnagios-plugins-contrib-24.20190301~bpo9+1/percona-nagios-plugins/nagios/bin/pmp-check-lvm-snapshots187
1 files changed, 187 insertions, 0 deletions
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/percona-nagios-plugins/nagios/bin/pmp-check-lvm-snapshots b/nagios-plugins-contrib-24.20190301~bpo9+1/percona-nagios-plugins/nagios/bin/pmp-check-lvm-snapshots
new file mode 100755
index 0000000..6aa4d11
--- /dev/null
+++ b/nagios-plugins-contrib-24.20190301~bpo9+1/percona-nagios-plugins/nagios/bin/pmp-check-lvm-snapshots
@@ -0,0 +1,187 @@
+#!/bin/sh
+
+# ########################################################################
+# This program is part of $PROJECT_NAME$
+# License: GPL License (see COPYING)
+# Authors:
+# Baron Schwartz
+# ########################################################################
+
+# ########################################################################
+# Redirect STDERR to STDOUT; Nagios doesn't handle STDERR.
+# ########################################################################
+exec 2>&1
+
+# ########################################################################
+# Set up constants, etc.
+# ########################################################################
+STATE_OK=0
+STATE_WARNING=1
+STATE_CRITICAL=2
+STATE_UNKNOWN=3
+STATE_DEPENDENT=4
+
+# ########################################################################
+# Print the name and fullness of every LVM snapshot that is open and
+# nearly full. The input is the file with 'lvs', and the allowable fullness.
+# In many cases lvs will report "File descriptor %d (...) leaked" and we ignore
+# this, as it's only a warning that usually happens from a shell.
+# ########################################################################
+check_lvm_snapshot_fullness() {
+ local FILE="$1"
+ local FULL="$2"
+ awk -v full="$FULL" '
+ $1 != "LV" && $1 != "File" && $6 !~ /[^0-9.]/ && $6 > full {
+ print $2 "/" $1 "[" $5 "]=" $6 "%"
+ }' "${FILE}"
+}
+
+# ########################################################################
+# Run the program.
+# ########################################################################
+main() {
+
+ # Get options
+ for o; do
+ case "${o}" in
+ -w) shift; OPT_WARN="${1}"; shift; ;;
+ -c) shift; OPT_CRIT="${1}"; shift; ;;
+ --version) grep -A2 '^=head1 VERSION' "$0" | tail -n1; exit 0 ;;
+ --help) perl -00 -ne 'm/^ Usage:/ && print' "$0"; exit 0 ;;
+ -*) echo "Unknown option ${o}. Try --help."; exit 1; ;;
+ esac
+ done
+ OPT_WARN=${OPT_WARN:-90}
+ OPT_CRIT=${OPT_CRIT:-95}
+ if is_not_sourced; then
+ if [ -n "$1" ]; then
+ echo "WARN spurious command-line options: $@"
+ exit 1
+ fi
+ fi
+
+ local NOTE="OK no full LVM snapshot volumes"
+ local TEMP=$(mktemp -t "${0##*/}.XXXXXX") || exit $?
+ trap "rm -f '${TEMP}' >/dev/null 2>&1" EXIT
+
+ # The lvs command is usually in /usr/sbin. But if it's run as a non-root
+ # user, it will print out "WARNING: Running as a non-root user. Functionality
+ # may be unavailable." and exit with success anyway. So we have to detect
+ # this and make the plugin exit UNKNOWN in that case. If there is a $1 it's
+ # the output of lvs.
+ PATH="$PATH:/usr/sbin:/sbin"
+ if [ -z "$1" ]; then
+ lvs > "${TEMP}" 2>&1
+ else
+ cat "$1" > "${TEMP}" 2>/dev/null # For testing only
+ fi
+
+ if grep 'command not found' "${TEMP}" > /dev/null 2>&1; then
+ NOTE="OK $(cat "${TEMP}")"
+ elif grep 'WARNING: Running as a non-root user' "${TEMP}" >/dev/null 2>&1; then
+ NOTE="UNK You must execute lvs with root privileges"
+ else
+ local VOLS=$(check_lvm_snapshot_fullness "${TEMP}" "${OPT_CRIT}")
+ if [ "${VOLS}" ]; then
+ NOTE="CRIT LVM snapshot volumes over ${OPT_CRIT}% full: ${VOLS}"
+ else
+ VOLS=$(check_lvm_snapshot_fullness "${TEMP}" "${OPT_WARN}")
+ if [ "${VOLS}" ]; then
+ NOTE="WARN LVM snapshot volumes over ${OPT_WARN}% full: ${VOLS}"
+ fi
+ fi
+ fi
+
+ echo $NOTE
+}
+
+# ########################################################################
+# Determine whether this program is being executed directly, or sourced/included
+# from another file.
+# ########################################################################
+is_not_sourced() {
+ [ "${0##*/}" = "pmp-check-lvm-snapshots" ] || [ "${0##*/}" = "bash" -a "$_" = "$0" ]
+}
+
+# ########################################################################
+# Execute the program if it was not included from another file.
+# This makes it possible to include without executing, and thus test.
+# ########################################################################
+if is_not_sourced; then
+ OUTPUT=$(main "$@")
+ EXITSTATUS=$STATE_UNKNOWN
+ case "${OUTPUT}" in
+ UNK*) EXITSTATUS=$STATE_UNKNOWN; ;;
+ OK*) EXITSTATUS=$STATE_OK; ;;
+ WARN*) EXITSTATUS=$STATE_WARNING; ;;
+ CRIT*) EXITSTATUS=$STATE_CRITICAL; ;;
+ esac
+ echo "${OUTPUT}"
+ exit $EXITSTATUS
+fi
+
+# ############################################################################
+# Documentation
+# ############################################################################
+: <<'DOCUMENTATION'
+=pod
+
+=head1 NAME
+
+pmp-check-lvm-snapshots - Alert when LVM snapshots are running out of copy-on-write space.
+
+=head1 SYNOPSIS
+
+ Usage: pmp-check-lvm-snapshots [OPTIONS]
+ Options:
+ -c CRIT Critical threshold; default 95%.
+ -w WARN Warning threshold; default 90%.
+ --help Print help and exit.
+ --version Print version and exit.
+ Options must be given as --option value, not --option=value or -Ovalue.
+ Use perldoc to read embedded documentation with more details.
+
+=head1 DESCRIPTION
+
+This Nagios plugin looks at the output of the 'lvs' command to find LVM snapshot volumes
+that are beginning to run out of copy-on-write space. If a snapshot fills up its
+copy-on-write space, it will fail. This is also a useful way to detect whether
+some process, such as a backup, failed to release a snapshot volume after
+finishing with it.
+
+=head1 PRIVILEGES
+
+This plugin does not access MySQL.
+
+This plugin executes the following UNIX commands that may need special privileges:
+
+=over
+
+=item *
+
+lvs
+
+=back
+
+=head1 COPYRIGHT, LICENSE, AND WARRANTY
+
+This program is copyright 2012-$CURRENT_YEAR$ Baron Schwartz, 2012-$CURRENT_YEAR$ Percona Inc.
+Feedback and improvements are welcome.
+
+THIS PROGRAM IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+This program 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, version 2. You should have received a copy of the GNU General
+Public License along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+=head1 VERSION
+
+$PROJECT_NAME$ pmp-check-lvm-snapshots $VERSION$
+
+=cut
+
+DOCUMENTATION