L'ensemble des scripts et bibliothèques bash utilisés pour maintenir l'infrastructure du Tetalab. Ce socle Bash est une version légère et adaptée du socle Bash essentiellement développé par Emmanuel Confrère, éminent DBA Calédonien.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

218 lines
8.0 KiB

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