#!/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 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