socle_bash/bin/ctl_all_nrpe.sh

169 lines
6.0 KiB
Bash
Executable File

#!/bin/bash
#------------------------------------------------------------------------------------------------------------------
# Script : expl_check_all_nrpe.sh
# 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
#
#------------------------------------------------------------------------------------------------------------------
# Dependances : /usr/local/bin/tetalab/ircbot.py
#
#------------------------------------------------------------------------------------------------------------------
# Liste des options et arguments:
#
# Ce script n'accepte *aucune* option
#
# @OPT: f:bidon::::::
#
#------------------------------------------------------------------------------------------------------------------
# Liste des paramètres de configuration:
#
# IRC_BOT=/usr/local/bin/tetalab/ircbot.py
# NRPE_CHECK_PATH=/etc/nagios/nrpe/
# NRPE_CHECK_BIN=/usr/libexec/nagios/check_nrpe
# INFRA_SERVER=sousetsuken.local.tetalab.org
# TETALAB_VM[0]=sousetsuken.local.tetalab.org
# TETALAB_VM[1]=jimmy.local.tetalab.org
# TETALAB_VM[2]=billy.local.tetalab.org
# TETALAB_VM[3]=marian.local.tetalab.org
# TETALAB_VM[4]=sonny.local.tetalab.org
# TETALAB_VM[5]=web.local.tetalab.org
#
#------------------------------------------------------------------------------------------------------------------
# Liste des erreurs:
#
# 2 | erreur | stop | ${ERROR}
# 3 | erreur | continu | ${ERROR}
#
#------------------------------------------------------------------------------------------------------------------
##
## Syntaxe :
## --------
##
## prompt> expl_check_all_nrpe.sh
##
## ex:
## expl_check_all_nrpe.sh
##
## Prérequis:
## ----------
## - Le script doit être executé par l'utilisateur asr sur sousetsuken
##
## Fonctionnement:
## ---------------
## Depuis sousetsuken, rcupère depuis le répertoire local NRPE_CHECK_PATH la liste des checks à effectuer
## et pour ceux qui sont executables les execute sur les VM définies dans le fichier de configuration
## 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
##
#------------------------------------------------------------------------------------------------------------------
# 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
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
fct_message "Contrôle ${CHECK}:" -color jaune
for HOST in ${TETALAB_VM[@]}
do
CRITICAL=1
if [ "${HOST}" == "${INFRA_SERVER}" ]; then
fct_message " * ${HOST}"
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)
fct_message " * ${HOST}"
RESULT=$(${NRPE_CHECK_BIN} -H ${HOST} -c ${CHECK} | cut -d'|' -f1)
CRITICAL=$(echo ${RESULT} | grep OK | wc -l)
fi
if [ ! ${CRITICAL} -eq 1 ]; then
fct_message " - CRITICAL" -color orange
MESSAGE="${MESSAGE}|||${HOST}: ${CHECK}: ${RESULT}"
fi
done
done
}
function send_message
{
if [ ${#MESSAGE} -eq 0 ]; then
fct_message "Aucun message à envoyer" -color jaune
fct_erreur 0
fi
fct_message "Envoi du message ${MESSAGE}" -color jaune
${IRC_BOT} "${MESSAGE}"
}
#------------------------------------------------------------------------------------------------------------------
# Traitement
#------------------------------------------------------------------------------------------------------------------
MESSAGE=""
check_config
check_all
send_message
fct_erreur 0