ansible-roles/nagios/files/check_system_pp

163 lines
4.8 KiB
Bash

#!/bin/bash
#
# https://www.monitoringexchange.org/inventory/Check-Plugins/Operating-Systems/Linux/Check-Processes-and-Ports
# Usage: .//check_system_pp
#
# Description:
# This plugin determines whether the server
# is running properly. It will check the following:
# * Are all required processes running?
# * Are all the required TCP/IP ports open?
#
# Created: 27.01.2006 (FBA)
#
# Changes: 28.01.2006 added yellow check (FBA)
# 29.01.2006 change "px -ef" to "ps -ax" (FBA). Problems with long arguments
# 31.01.2006 added all OK Status with all procs and ports (FBA)
# 15.07.2006 change "ps -ax" to "ps ax" (FBA). Also problems with long arguments under RedHat 3/4
# 17.07.2006 Plugin rewrite and bugfixes (Magnus Glantz)
# 19.07.2006 Removed utils.sh dependency.
#
#
#
COMMON_SH_LIB=/usr/lib/nagios/plugins/isti-cnr/check_library.sh
if [ -f $COMMON_SH_LIB ] ; then
. $COMMON_SH_LIB
else
PLUGIN_DIR=/usr/lib/nagios/plugins
ISTI_PLUGDIR=$PLUGIN_DIR/isti-cnr
fi
# We want the list of processes and ports to be customizable without editing this script
PP_CONF=$ISTI_PLUGDIR/check_system_pp.conf
if [ -f $PP_CONF ] ; then
. $PP_CONF
else
##################################################################################
#
# Processes to check
PROCLIST_RED="sshd"
PROCLIST_YELLOW="syslogd cron"
# Ports to check
PORTLIST="22"
##################################################################################
fi
PATH="/usr/bin:/usr/sbin:/bin:/sbin"
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
STATE_DEPENDENT=4
print_gpl() {
echo "This program is free software; you can redistribute it and/or modify"
echo "it under the terms of the GNU General Public License as published by"
echo "the Free Software Foundation; either version 2 of the License, or"
echo "(at your option) any later version."
echo ""
echo "This program is distributed in the hope that it will be useful,"
echo "but WITHOUT ANY WARRANTY; without even the implied warranty of"
echo "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the"
echo "GNU General Public License for more details."
echo ""
echo "You should have received a copy of the GNU General Public License"
echo "along with this program; if not, write to the Free Software"
echo "Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA"
}
print_help(){
echo ""
echo "System process and port check script for Nagios."
echo ""
echo "Usage: ./check_system_pp"
echo "Website: http://www.nagiosexchange.org"
echo "https://www.monitoringexchange.org/inventory/Check-Plugins/Operating-Systems/Linux/Check-Processes-and-Ports"
echo ""
print_gpl
}
while test -n "$1"
do
case "$1" in
*) print_help; exit $STATE_OK;;
esac
done
check_processes_red()
{
PROCESS="0"
ERROR_PROCS=""
for PROC in `echo $PROCLIST_RED`; do
if [ `ps -ef | grep -w $PROC | grep -v grep | wc -l` -lt 1 ]; then
PROCESS=1
ERROR_PROCS="$ERROR_PROCS""$PROC ";
fi
done
if [ $PROCESS -eq "1" ]; then
exit_red=$STATE_CRITICAL
elif [ $PROCESS -eq "0" ]; then
exit_red=$STATE_OK
fi
}
check_processes_yellow()
{
PROCESS="0"
WARNING_PROCS=""
for PROC in `echo $PROCLIST_YELLOW`; do
if [ `ps -ef | grep $PROC | grep -v grep | wc -l` -lt 1 ]; then
PROCESS=1
WARNING_PROCS="$WARNING_PROCS""$PROC ";
fi
done
if [ $PROCESS -eq "1" ]; then
exit_yellow=$STATE_WARNING
elif [ $PROCESS -eq "0" ]; then
exit_yellow=$STATE_OK
fi
}
check_ports()
{
PORTS="0"
ERROR_PORTS=""
for NUM in `echo $PORTLIST`; do
if [ `netstat -an | grep LISTEN | grep -w $NUM | grep -v grep | wc -l` -lt 1 ]; then
PORTS=1
ERROR_PORTS="$ERROR_PORTS""$NUM ";
fi
done
if [ $PORTS -eq "1" ]; then
exit_ports=$STATE_CRITICAL
elif [ $PORTS -eq "0" ]; then
exit_ports=$STATE_OK
fi
}
check_processes_red
check_ports
check_processes_yellow
final_exit=`expr $exit_ports + $exit_red + $exit_yellow`
if [ $final_exit -eq "0" ]; then
echo "SYSTEM OK - All monitored resources OK. Processes: $PROCLIST_RED $PROCLIST_YELLOW. Ports: $PORTLIST."
exitstatus=$STATE_OK
elif [ $final_exit -eq "1" ]; then
echo "SYSTEM WARNING - Processes DOWN. ($WARNING_PROCS)."
exitstatus=$STATE_WARNING
elif [ $final_exit -ge "1" ]; then
echo "SYSTEM CRITICAL - Resources DOWN! Processes: $ERROR_PROCS $WARNING_PROCS. Ports: $ERROR_PORTS"
exitstatus=$STATE_CRITICAL
fi
exit $exitstatus