diff options
| author | mail_redacted_for_web | 2019-04-17 19:07:19 +0200 | 
|---|---|---|
| committer | mail_redacted_for_web | 2019-04-17 19:07:19 +0200 | 
| commit | 1e2387474a449452b78520b9ad96a8b4b5e99722 (patch) | |
| tree | 836889471eec7d2aac177405068e2a8f1e2b1978 /nagios-plugins-contrib-24.20190301~bpo9+1/percona-nagios-plugins/nagios/bin/pmp-check-mysql-deadlocks | |
| download | nagios-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-mysql-deadlocks')
| -rwxr-xr-x | nagios-plugins-contrib-24.20190301~bpo9+1/percona-nagios-plugins/nagios/bin/pmp-check-mysql-deadlocks | 189 | 
1 files changed, 189 insertions, 0 deletions
diff --git a/nagios-plugins-contrib-24.20190301~bpo9+1/percona-nagios-plugins/nagios/bin/pmp-check-mysql-deadlocks b/nagios-plugins-contrib-24.20190301~bpo9+1/percona-nagios-plugins/nagios/bin/pmp-check-mysql-deadlocks new file mode 100755 index 0000000..0545f06 --- /dev/null +++ b/nagios-plugins-contrib-24.20190301~bpo9+1/percona-nagios-plugins/nagios/bin/pmp-check-mysql-deadlocks @@ -0,0 +1,189 @@ +#!/bin/sh + +# ######################################################################## +# This program is part of $PROJECT_NAME$ +# License: GPL License (see COPYING) +# Authors: +#  Baron Schwartz +# Depends-on: pt-deadlock-logger +# ######################################################################## + +# ######################################################################## +# Redirect STDERR to STDOUT; Nagios doesn't handle STDERR. +# ######################################################################## +exec 2>&1 + +# ######################################################################## +# Set up constants, etc. +# ######################################################################## +STATE_OK=0 +STATE_OK=0 +STATE_WARNING=1 +STATE_CRITICAL=2 +STATE_UNKNOWN=3 +STATE_DEPENDENT=4 + +# ######################################################################## +# Run the program. +# ######################################################################## +main() { +   # Get options +   for o; do +      case "${o}" in +         -c)              shift; OPT_CRIT="${1}"; shift; ;; +         --defaults-file) shift; OPT_DEFT="${1}"; shift; ;; +         -H)              shift; OPT_HOST="${1}"; shift; ;; +         -i)              shift; OPT_INTERVAL="${1}"; shift; ;; +         -l)              shift; OPT_USER="${1}"; shift; ;; +         -L)              shift; OPT_LOPA="${1}"; shift; ;; +         -p)              shift; OPT_PASS="${1}"; shift; ;; +         -P)              shift; OPT_PORT="${1}"; shift; ;; +         -S)              shift; OPT_SOCK="${1}"; shift; ;; +         -T)              shift; OPT_TABLE="${1}";  shift; ;; +         -w)              shift; OPT_WARN="${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:-12} +   OPT_CRIT=${OPT_CRIT:-60} +   OPT_INTERVAL=${OPT_INTERVAL:-1} +   OPT_TABLE="${OPT_TABLE:-percona.deadlocks}" +   if [ -e '/etc/nagios/mysql.cnf' ]; then +      OPT_DEFT="${OPT_DEFT:-/etc/nagios/mysql.cnf}" +   fi +   if is_not_sourced; then +      if [ -n "$1" ]; then +         echo "WARN spurious command-line options: $@" +         exit 1 +      fi +   fi + +   LEVEL=$(mysql_exec "SELECT COUNT(*) FROM ${OPT_TABLE} WHERE server IN ('${OPT_HOST}', @@hostname) AND ts >= NOW() - INTERVAL ${OPT_INTERVAL}*60 SECOND") +   if [ $? = 0 ]; then +      NOTE="${LEVEL:-UNKNOWN} deadlocks in last ${OPT_INTERVAL} minutes" +      if [ "${LEVEL:-0}" -gt "${OPT_CRIT}" ]; then +         NOTE="CRIT $NOTE" +      elif [ "${LEVEL:-0}" -gt "${OPT_WARN}" ]; then +         NOTE="WARN $NOTE" +      else +         NOTE="OK $NOTE" +      fi + +      # Build the common perf data output for graph trending +      PERFDATA="deadlocks=${LEVEL:-0};${OPT_WARN};${OPT_CRIT};0;" +      NOTE="$NOTE | $PERFDATA" +   else +      NOTE="UNK could not count deadlocks" +   fi +   echo $NOTE +} + +# ######################################################################## +# Execute a MySQL command. +# ######################################################################## +mysql_exec() { +   mysql ${OPT_DEFT:+--defaults-file="${OPT_DEFT}"} ${OPT_HOST:+-h"${OPT_HOST}"} ${OPT_USER:+-u"${OPT_USER}"} \ +      ${OPT_PASS:+-p"${OPT_PASS}"} ${OPT_SOCK:+-S"${OPT_SOCK}"} ${OPT_PORT:+-P"${OPT_PORT}"} \ +      ${OPT_LOPA:+--login-path="${OPT_LOPA}"} -ss -e "$1" +} + +# ######################################################################## +# Determine whether this program is being executed directly, or sourced/included +# from another file. +# ######################################################################## +is_not_sourced() { +   [ "${0##*/}" = "pmp-check-mysql-deadlocks" ] || [ "${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-mysql-deadlocks - Alert when pt-deadlock-logger has recorded too many recent deadlocks. + +=head1 SYNOPSIS + +  Usage: pmp-check-mysql-deadlocks [OPTIONS] +  Options: +    -c CRIT         Critical threshold; default 60. +    --defaults-file FILE Only read mysql options from the given file. +                    Defaults to /etc/nagios/mysql.cnf if it exists. +    -H HOST         MySQL hostname. +    -i INTERVAL     Interval over which to count, in minutes; default 1. +    -l USER         MySQL username. +    -L LOGIN-PATH   Use login-path to access MySQL (with MySQL client 5.6). +    -p PASS         MySQL password. +    -P PORT         MySQL port. +    -S SOCKET       MySQL socket file. +    -T TABLE        The database.table that pt-deadlock-logger uses; default percona.deadlocks. +    -w WARN         Warning threshold; default 12. +    --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 table that pt-deadlock-logger (part of Percona +Toolkit) maintains, and when there have been too many recent deadlocks, it +alerts. + +=head1 PRIVILEGES + +This plugin executes the following commands against MySQL: + +=over + +=item * + +C<SELECT> from the C<pt-deadlock-logger> table. + +=back + +This plugin executes no UNIX commands that may need special privileges. + +=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-mysql-deadlocks $VERSION$ + +=cut + +DOCUMENTATION  | 
