#!/bin/bash #------------------------------------------------------------------------------------------------------------------ # Script : ctl_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 # - ctl_host_process.sh # #------------------------------------------------------------------------------------------------------------------ # 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 # # VM monitorée par NRPE # # ATTENTION: web n'est *volontairement* pas monitorée par NRPE # TETALAB_VM[0]=sousetsuken.local.tetalab.org # TETALAB_VM[1]=jimmy.local.tetalab.org # TETALAB_VM[2]=billy.local.tetalab.org # 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 # #------------------------------------------------------------------------------------------------------------------ # Liste des erreurs: # # 2 | erreur | stop | ${ERROR} # 3 | erreur | continu | ${ERROR} # #------------------------------------------------------------------------------------------------------------------ ## ## Syntaxe : ## -------- ## ## prompt> ctl_all_nrpe.sh ## ## ex: ## ctl_all_nrpe.sh ## ## Prérequis: ## ---------- ## - Le script doit être executé par l'utilisateur asr sur sousetsuken ## ## Fonctionnement: ## --------------- ## Depuis sousetsuken, récupè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 ## ## Ce script utilise ctl_host_process.sh pour la vérification des processus. ## #------------------------------------------------------------------------------------------------------------------ # 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 if [ ${#PROCESS[*]} -eq 0 ]; then ERROR="Aucun processus défini 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 check_process { fct_message "Vérification des processus:" for PROC in ${PROCESS[@]} do HOST=$(echo ${PROC} | cut -d: -f1) PROC=$(echo ${PROC} | cut -d: -f2) ctl_host_process.sh -vm ${HOST} -process ${PROC} RET_VAL=$? if [ ! ${RET_VAL} -eq 0 ]; then fct_message "Processus ${PROC} inexistant sur ${HOST}" -color rose MESSAGE="${MESSAGE}|||${HOST}: CRITICAL: Processus ${PROC} inexistant sur ${HOST}" fi 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 check_process send_message fct_erreur 0