socle_bash/bin/ctl_all_nrpe.sh

219 lines
8.0 KiB
Bash
Raw Normal View History

2017-07-23 07:11:39 +02:00
#!/bin/bash
#------------------------------------------------------------------------------------------------------------------
# Script : ctl_all_nrpe.sh
2017-07-23 07:11:39 +02:00
# Auteur : Doug Le Tough
# Date : 23-07-2017
# Version : 1.0.0
# Objet : Fait tous les contrôles NRPE standars sur l'ensemble des VM listées
# dans le fichier de configuration et notifie les incidents sur freenode.net#tetalab
#
#------------------------------------------------------------------------------------------------------------------
# Mise a jour :
#
# 1.0.0 22/07/2017 - Doug Le Tough - Cre : Mise en production
#
#------------------------------------------------------------------------------------------------------------------
2017-07-23 09:08:06 +02:00
# Dependances :
# - /usr/local/bin/tetalab/ircbot.py
# - ctl_host_process.sh
2017-07-23 07:11:39 +02:00
#
#------------------------------------------------------------------------------------------------------------------
# Liste des options et arguments:
#
# Ce script n'accepte *aucune* option
#
# @OPT: f:bidon::::::
#
#------------------------------------------------------------------------------------------------------------------
# Liste des paramètres de configuration:
#
2017-07-23 07:13:49 +02:00
# IRC_BOT=/usr/local/bin/tetalab/ircbot.py
2017-07-23 07:11:39 +02:00
# NRPE_CHECK_PATH=/etc/nagios/nrpe/
# NRPE_CHECK_BIN=/usr/libexec/nagios/check_nrpe
# INFRA_SERVER=sousetsuken.local.tetalab.org
2017-07-23 09:08:06 +02:00
# # VM monitorée par NRPE
# # ATTENTION: web n'est *volontairement* pas monitorée par NRPE
2017-07-23 07:11:39 +02:00
# TETALAB_VM[0]=sousetsuken.local.tetalab.org
# TETALAB_VM[1]=jimmy.local.tetalab.org
# TETALAB_VM[2]=billy.local.tetalab.org
2017-07-23 09:08:06 +02:00
# TETALAB_VM[3]=sonny.local.tetalab.org
# TETALAB_VM[4]=marian.local.tetalab.org
# # Processus monitorés indépendemment de NRPE
# PROCESS[0]=sousetsuken.local.tetalab.org:/usr/sbin/httpd
# PROCESS[1]=sousetsuken.local.tetalab.org:/usr/sbin/named
# PROCESS[2]=sousetsuken.local.tetalab.org:/usr/sbin/ntpd
# PROCESS[3]=sousetsuken.local.tetalab.org:/usr/sbin/crond
# PROCESS[4]=sousetsuken.local.tetalab.org:/usr/bin/nrpe
# PROCESS[5]=marian.local.tetalab.org:/usr/sbin/httpd
# PROCESS[6]=marian.local.tetalab.org:/usr/sbin/ntpd
# PROCESS[7]=marian.local.tetalab.org:/usr/sbin/crond
# PROCESS[8]=marian.local.tetalab.org:/usr/bin/nrpe
# PROCESS[9]=web.local.tetalab.org:/usr/lib/postfix/sbin/master
# PROCESS[10]=sonny.local.tetalab.org:/usr/lib64/postgresql/9.6/bin/postgres
# PROCESS[11]=sonny.local.tetalab.org:/usr/sbin/ntpd
# PROCESS[12]=sonny.local.tetalab.org:/usr/sbin/crond
# PROCESS[13]=sonny.local.tetalab.org:/usr/bin/nrpe
# PROCESS[14]=jimmy.local.tetalab.org:/usr/sbin/httpd
# PROCESS[15]=jimmy.local.tetalab.org:/usr/sbin/node
# PROCESS[16]=jimmy.local.tetalab.org:/usr/sbin/ntpd
# PROCESS[17]=jimmy.local.tetalab.org:/usr/sbin/crond
# PROCESS[18]=jimmy.local.tetalab.org:/usr/bin/nrpe
# PROCESS[19]=billy.local.tetalab.org:/usr/sbin/ntpd
# PROCESS[20]=billy.local.tetalab.org:/usr/sbin/crond
# PROCESS[21]=billy.local.tetalab.org:/usr/bin/nrpe
# PROCESS[22]=billy.local.tetalab.org:/usr/sbin/httpd
2017-07-23 07:11:39 +02:00
#
#------------------------------------------------------------------------------------------------------------------
# Liste des erreurs:
#
# 2 | erreur | stop | ${ERROR}
# 3 | erreur | continu | ${ERROR}
#
#------------------------------------------------------------------------------------------------------------------
##
## Syntaxe :
## --------
##
## prompt> ctl_all_nrpe.sh
2017-07-23 07:11:39 +02:00
##
## ex:
## ctl_all_nrpe.sh
2017-07-23 07:11:39 +02:00
##
## Prérequis:
## ----------
## - Le script doit être executé par l'utilisateur asr sur sousetsuken
##
## Fonctionnement:
## ---------------
2017-07-23 08:27:32 +02:00
## Depuis sousetsuken, récupère depuis le répertoire local NRPE_CHECK_PATH la liste des checks à effectuer
2017-07-23 09:08:06 +02:00
## et pour ceux qui sont executables les execute sur les VM définies dans le fichier de configuration.
2017-07-23 07:11:39 +02:00
## puis relève les incidents et les notifie sur le chan freenode.net#tetalab en utilisant le script python
## /usr/local/bin/tetalab/ircbot.py
##
2017-07-23 09:08:06 +02:00
## Ce script utilise ctl_host_process.sh pour la vérification des processus.
##
2017-07-23 07:11:39 +02:00
#------------------------------------------------------------------------------------------------------------------
# Initialisation de l'environement
#------------------------------------------------------------------------------------------------------------------
if [ "${USER}" != "asr" ]; then
ERROR="Seul l'utilisateur asr peut utiliser ce script"
echo -e "\033[91m${ERROR}\033[0m"
exit 1
fi
source /etc/profile.d/tetalab.sh
if [ ! -f ${NC_EXPL_CFG}/init.conf ]; then
echo "Le fichier d'initialisation du socle \${NC_EXPL_CFG}/init.conf n'éxiste pas !"
echo "Arrêt du script par sécurité"
exit 250
fi
source ${NC_EXPL_CFG}/init.conf
#------------------------------------------------------------------------------------------------------------------
# Fonctions
#------------------------------------------------------------------------------------------------------------------
function check_config
{
fct_message "Vérification de la configuration:" -color jaune
if [ ! -r ${SH_FICCFG} ]; then
ERROR="Fichier de configuration ${SH_FICCFG} absent ou illisible"
fct_erreur 2
fi
if [ ${#IRC_BOT} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: IRC_BOT"
fct_erreur 2
fi
if [ ${#NRPE_CHECK_PATH} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: NRPE_CHECK_PATH"
fct_erreur 2
fi
if [ ${#NRPE_CHECK_BIN} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: NRPE_CHECK_BIN"
fct_erreur 2
fi
if [ ${#TETALAB_VM[*]} -eq 0 ]; then
ERROR="Aucune VM définie dans le fichier de configuration"
fct_erreur 2
fi
2017-07-23 09:08:06 +02:00
if [ ${#PROCESS[*]} -eq 0 ]; then
ERROR="Aucun processus défini dans le fichier de configuration"
fct_erreur 2
fi
2017-07-23 07:11:39 +02:00
fct_message " * IRC_BOT: ${IRC_BOT}"
fct_message " * NRPE_CHECK_PATH: ${NRPE_CHECK_PATH}"
fct_message " * NRPE_CHECK_BIN: ${NRPE_CHECK_BIN}"
INDEX=0
for VM in ${TETALAB_VM[@]}
do
fct_message " * VM[${INDEX}]: ${VM}"
INDEX=$(( INDEX+1 ))
done
}
function check_all
{
for CHECK in $(find ${NRPE_CHECK_PATH} -type f -executable -exec basename {} .cfg \; | sort )
do
2017-07-23 07:24:45 +02:00
fct_message "Contrôle ${CHECK}:" -color jaune
2017-07-23 07:11:39 +02:00
for HOST in ${TETALAB_VM[@]}
do
CRITICAL=1
if [ "${HOST}" == "${INFRA_SERVER}" ]; then
2017-07-23 07:24:45 +02:00
fct_message " * ${HOST}"
2017-07-23 07:11:39 +02:00
RESULT=$(${NRPE_CHECK_BIN} -H ${HOST} -c ${CHECK} | cut -d'|' -f1)
CRITICAL=$(echo ${RESULT} | grep OK | wc -l)
elif [ $(echo ${CHECK} | grep "check_http_" | wc -l) -eq 0 ]; then
# On ne fait pas les checks HTTP sur les autres VM que le serveur d'infra (sousetsuken)
2017-07-23 07:24:45 +02:00
fct_message " * ${HOST}"
2017-07-23 07:11:39 +02:00
RESULT=$(${NRPE_CHECK_BIN} -H ${HOST} -c ${CHECK} | cut -d'|' -f1)
CRITICAL=$(echo ${RESULT} | grep OK | wc -l)
fi
if [ ! ${CRITICAL} -eq 1 ]; then
2017-07-23 07:31:49 +02:00
fct_message " - CRITICAL" -color orange
2017-07-23 07:11:39 +02:00
MESSAGE="${MESSAGE}|||${HOST}: ${CHECK}: ${RESULT}"
fi
done
done
}
2017-07-23 09:08:06 +02:00
function check_process
{
2017-07-23 09:16:08 +02:00
fct_message "Vérification des processus:"
2017-07-23 09:08:06 +02:00
for PROC in ${PROCESS[@]}
do
HOST=$(echo ${PROC} | cut -d: -f1)
PROC=$(echo ${PROC} | cut -d: -f2)
2017-07-23 09:10:39 +02:00
ctl_host_process.sh -vm ${HOST} -process ${PROC}
2017-07-23 09:08:06 +02:00
RET_VAL=$?
if [ ! ${RET_VAL} -eq 0 ]; then
2017-07-23 09:16:08 +02:00
fct_message "Processus ${PROC} inexistant sur ${HOST}" -color rose
2017-07-23 09:08:06 +02:00
MESSAGE="${MESSAGE}|||${HOST}: CRITICAL: Processus ${PROC} inexistant sur ${HOST}"
fi
done
}
2017-07-23 07:11:39 +02:00
function send_message
{
2017-07-23 07:21:23 +02:00
if [ ${#MESSAGE} -eq 0 ]; then
fct_message "Aucun message à envoyer" -color jaune
fct_erreur 0
2017-07-23 07:11:39 +02:00
fi
2017-07-23 07:21:23 +02:00
fct_message "Envoi du message ${MESSAGE}" -color jaune
${IRC_BOT} "${MESSAGE}"
2017-07-23 07:11:39 +02:00
}
#------------------------------------------------------------------------------------------------------------------
# Traitement
#------------------------------------------------------------------------------------------------------------------
MESSAGE=""
check_config
check_all
2017-07-23 09:08:06 +02:00
check_process
2017-07-23 07:11:39 +02:00
send_message
fct_erreur 0