Initial commit
This commit is contained in:
commit
9eea772713
3 changed files with 272 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
*~
|
||||||
|
.*.swp
|
36
README.md
Normal file
36
README.md
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
Nagios plugin to check cluster synchronization process
|
||||||
|
======================================================
|
||||||
|
|
||||||
|
Usage
|
||||||
|
-----
|
||||||
|
|
||||||
|
```
|
||||||
|
Usage : ./check_sync_cluster [-f files_path_format] [-wcWC]
|
||||||
|
-h Show this help message
|
||||||
|
-f [files path format] Specify files path template (default : /var/run/sync_cluster)
|
||||||
|
-w [minutes] Specify WARNING time in minutes for status file (default : 5)
|
||||||
|
-c [minutes] Specify CRITICAL time in minutes for status file (default : 10)
|
||||||
|
-W [minutes] Specify WARNING time in minutes for PID file (default : 5)
|
||||||
|
-C [minutes] Specify CRITICAL time in minutes for PID file (default : 10)
|
||||||
|
```
|
||||||
|
|
||||||
|
Copyright
|
||||||
|
---------
|
||||||
|
|
||||||
|
Copyright (c) 2018 Benjamin Renard
|
||||||
|
|
||||||
|
License
|
||||||
|
-------
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License version 3
|
||||||
|
as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
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.
|
234
check_sync_cluster
Executable file
234
check_sync_cluster
Executable file
|
@ -0,0 +1,234 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Nagios plugin to check cluster synchronization process
|
||||||
|
#
|
||||||
|
# This check plugin is based on 3 files maintain by synchronization
|
||||||
|
# process :
|
||||||
|
# - status file : Empty file updated on each successfully execution
|
||||||
|
#
|
||||||
|
# Default : /var/run/sync_cluster.stat
|
||||||
|
#
|
||||||
|
# - PID file : Present only when synchronization is running and
|
||||||
|
# contain the PID of the running process.
|
||||||
|
#
|
||||||
|
# Default : /var/run/sync_cluster.pid
|
||||||
|
#
|
||||||
|
# - Errors file : Present only when error(s) occured in previous
|
||||||
|
# synchronizations and contains details on this error(s).
|
||||||
|
#
|
||||||
|
# Default : /var/run/sync_cluster.err
|
||||||
|
#
|
||||||
|
# Author : Benjamin Renard <brenard@easter-eggs.com>
|
||||||
|
# Date : Thu, 29 Nov 2018 15:41:48 +0100
|
||||||
|
# Source : http://gogs.zionetrix.net/check_sync_cluster
|
||||||
|
#
|
||||||
|
|
||||||
|
# Default configuration
|
||||||
|
|
||||||
|
# Files path template
|
||||||
|
TPL_FILE="/var/run/sync_cluster"
|
||||||
|
|
||||||
|
# WARNING/CRITICAL time in minutes for status file
|
||||||
|
WARN_STATUS_FILE=5
|
||||||
|
CRIT_STATUS_FILE=10
|
||||||
|
|
||||||
|
# WARNING/CRITICAL time in minutes for PID file
|
||||||
|
WARN_PID_FILE=5
|
||||||
|
CRIT_PID_FILE=10
|
||||||
|
|
||||||
|
|
||||||
|
function usage() {
|
||||||
|
echo "Usage : $0 [-f files_path_format] [-wcWC]
|
||||||
|
-h Show this help message
|
||||||
|
-f [files path format] Specify files path template (default : $TPL_FILE)
|
||||||
|
-w [minutes] Specify WARNING time in minutes for status file (default : $WARN_STATUS_FILE)
|
||||||
|
-c [minutes] Specify CRITICAL time in minutes for status file (default : $CRIT_STATUS_FILE)
|
||||||
|
-W [minutes] Specify WARNING time in minutes for PID file (default : $WARN_PID_FILE)
|
||||||
|
-C [minutes] Specify CRITICAL time in minutes for PID file (default : $CRIT_PID_FILE)
|
||||||
|
"
|
||||||
|
}
|
||||||
|
|
||||||
|
while getopts "hf:w:c:W:C:" OPTION
|
||||||
|
do
|
||||||
|
case "$OPTION" in
|
||||||
|
f)
|
||||||
|
TPL_FILE="${OPTARG}"
|
||||||
|
;;
|
||||||
|
w)
|
||||||
|
WARN_STATUS_FILE="${OPTARG}"
|
||||||
|
;;
|
||||||
|
c)
|
||||||
|
CRIT_STATUS_FILE="${OPTARG}"
|
||||||
|
;;
|
||||||
|
W)
|
||||||
|
WARN_PID_FILE="${OPTARG}"
|
||||||
|
;;
|
||||||
|
C)
|
||||||
|
CRIT_PID_FILE="${OPTARG}"
|
||||||
|
;;
|
||||||
|
h)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Invalid parameter -$OPTION"
|
||||||
|
echo
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
STAT_FILE="$TPL_FILE.stat"
|
||||||
|
ERR_FILE="$TPL_FILE.err"
|
||||||
|
PID_FILE="$TPL_FILE.pid"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Prepare return
|
||||||
|
#
|
||||||
|
|
||||||
|
EXIT_CODE=0
|
||||||
|
EXIT_STATUS=OK
|
||||||
|
|
||||||
|
ERROR_MSG=()
|
||||||
|
SUCCESS_MSG=()
|
||||||
|
|
||||||
|
function add_error() {
|
||||||
|
level="$1"
|
||||||
|
if [ $EXIT_CODE -ne 2 ]
|
||||||
|
then
|
||||||
|
case "$level" in
|
||||||
|
CRITICAL)
|
||||||
|
EXIT_CODE=2
|
||||||
|
EXIT_STATUS=$level
|
||||||
|
;;
|
||||||
|
WARNING)
|
||||||
|
EXIT_CODE=1
|
||||||
|
EXIT_STATUS=$level
|
||||||
|
;;
|
||||||
|
UNKNOWN)
|
||||||
|
if [ $EXIT_CODE -ne 1 ]
|
||||||
|
then
|
||||||
|
EXIT_CODE=3
|
||||||
|
EXIT_STATUS=$level
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
ERROR_MSG+=("$2")
|
||||||
|
}
|
||||||
|
|
||||||
|
function add_success() {
|
||||||
|
SUCCESS_MSG+=("$1")
|
||||||
|
}
|
||||||
|
|
||||||
|
function join_by {
|
||||||
|
local d=$1; shift; echo -n "$1"; shift; printf "%s" "${@/#/$d}";
|
||||||
|
}
|
||||||
|
|
||||||
|
####
|
||||||
|
# Check status file
|
||||||
|
####
|
||||||
|
if [ -r $STAT_FILE ];then
|
||||||
|
|
||||||
|
T=$( ls -al --time-style=+%s $STAT_FILE|awk '{print $6}' )
|
||||||
|
CUR=$( date +%s )
|
||||||
|
let diff=CUR-T
|
||||||
|
|
||||||
|
let WARN_STATUS_FILE_TIME=WARN_STATUS_FILE*60
|
||||||
|
let CRIT_STATUS_FILE_TIME=CRIT_STATUS_FILE*60
|
||||||
|
|
||||||
|
# CRITICAL if diff > $CRIT_STATUS_FILE
|
||||||
|
if [ $diff -gt $CRIT_STATUS_FILE_TIME ]
|
||||||
|
then
|
||||||
|
add_error "CRITICAL" "status file not updated since more than ${CRIT_STATUS_FILE}min"
|
||||||
|
# WARNING if diff > $WARN_STATUS_FILE_TIME
|
||||||
|
elif [ $diff -gt $WARN_STATUS_FILE_TIME ]
|
||||||
|
then
|
||||||
|
add_error "WARNING" "status file not updated since more than ${WARN_STATUS_FILE}min"
|
||||||
|
else
|
||||||
|
add_success "status file updated since less than ${WARN_STATUS_FILE}min"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
add_error "UNKNOWN" "status file not present"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
####
|
||||||
|
# Check presence of error file
|
||||||
|
####
|
||||||
|
if [ -e "$ERR_FILE" ]
|
||||||
|
then
|
||||||
|
add_error "WARNING" "some errors occured syncing cluster"
|
||||||
|
else
|
||||||
|
add_success 'no error reported'
|
||||||
|
fi
|
||||||
|
|
||||||
|
####
|
||||||
|
# Check pid file
|
||||||
|
####
|
||||||
|
if [ -r $PID_FILE ];then
|
||||||
|
|
||||||
|
T=$( ls -al --time-style=+%s $PID_FILE|awk '{print $6}' )
|
||||||
|
CUR=$( date +%s )
|
||||||
|
let diff=CUR-T
|
||||||
|
|
||||||
|
let WARN_PID_FILE_TIME=WARN_PID_FILE*60
|
||||||
|
let CRIT_PID_FILE_TIME=CRIT_PID_FILE*60
|
||||||
|
|
||||||
|
# CRITICAL if diff > $CRIT_PID_FILE
|
||||||
|
if [ $diff -gt $CRIT_PID_FILE_TIME ]
|
||||||
|
then
|
||||||
|
add_error "CRITICAL" "PID file present since more than ${CRIT_PID_FILE}min"
|
||||||
|
# WARNING if diff > $WARN_PID_FILE
|
||||||
|
elif [ $diff -gt $WARN_PID_FILE_TIME ]
|
||||||
|
then
|
||||||
|
add_error "WARNING" "PID file present since more than ${WARN_PID_FILE}min"
|
||||||
|
else
|
||||||
|
add_success "PID file present since less than ${WARN_PID_FILE}min"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
add_success 'PID file not present'
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
####
|
||||||
|
# Display return
|
||||||
|
###
|
||||||
|
echo "$EXIT_STATUS - $( join_by ', ' "${ERROR_MSG[@]}" "${SUCCESS_MSG[@]}" )"
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo -n "Status file : $STAT_FILE"
|
||||||
|
if [ -e "$STAT_FILE" ]
|
||||||
|
then
|
||||||
|
echo " ($( find $STAT_FILE -printf "%AY/%Am/%Ad %AX"|cut -d'.' -f1 ))"
|
||||||
|
else
|
||||||
|
echo " (not present)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -n "Errors file : $ERR_FILE"
|
||||||
|
if [ -e "$ERR_FILE" ]
|
||||||
|
then
|
||||||
|
echo " ($( find $ERR_FILE -printf "%AY/%Am/%Ad %AX"|cut -d'.' -f1 ))"
|
||||||
|
echo
|
||||||
|
echo "Errors :"
|
||||||
|
cat $ERR_FILE|sed 's/^/\t/'
|
||||||
|
echo
|
||||||
|
echo " => After fixing this problem(s), please remove indicator file : $ERR_FILE"
|
||||||
|
echo
|
||||||
|
else
|
||||||
|
echo " (not present)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -n "PID file : $PID_FILE"
|
||||||
|
if [ -e "$PID_FILE" ]
|
||||||
|
then
|
||||||
|
echo " ($( find $PID_FILE -printf "%AY/%Am/%Ad %AX"|cut -d'.' -f1 ))"
|
||||||
|
else
|
||||||
|
echo " (not present)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit $EXIT_CODE
|
||||||
|
|
Loading…
Reference in a new issue