Dépendances de services

Présentation

Les dépendances de services permettent de hiérarchiser les différents services entre eux.

But

Les dépendances de services ont plusieurs Utilités :

  • Permettre de cibler la route cause d’une défaillance technique ou fonctionnelle
  • Limiter le nombre d’alarmes présentées dans l’interface (Effet « Sapin de Noël »)
  • Limiter le nombre de tickets ouverts dans le cas d’ouverture automatique de ticket d’incidents
  • Notifier les bonnes personnes dans le cas d’un disfonctionnement :
    • Technique
    • Fonctionnel
  • Soulager la plate forme de supervision et les équipements supervisés en évitant de lancer des check inutiles :
    • Perte du ping on demande à centreon d’attendre la disponibilité de l’équipement avant de lancer les 50 check rattachés qui seront en erreur
    • Perte d’un vecteur de supervision :
      • Si le service SNMP n’est pas démarré on arrête de lancer les check via SNMP
      • Si le moteur d’une base de données n’est pas démarré Centreon arrête de lancer des requetes SQL qui ne répondront pas
      • Si le moteur Web ne réponds la supervision Web (Temps de réponse, Certificats, Parcours Client dans l’IHM,…), on attend la rétablissement du service pour relancer la supervision du site Web.

Cet article présentera plusieurs aspects de la mise en place des dépendances de services :

  • Cinématique
  • Mise en place depuis l’interface
  • Automatisation :
    • Determlnation des services maitres/dépendants
    • Utilisation de Clapi
    • Requêtes SQL
    • Configuration des crédenciales
    • Script d’extraction
    • Script d’import
  • Contrôles de bon fonctionnement

Glossaire

  • NRPE : Nagios Remote Protocol Executor : Service permettant de lancer des commandes sur un serveur distant via le port 5666 (Par Défaut)
  • NSCLIENT : Nagios Service Client : Service Windows permettant de lancer des commande depuis un poller. Le service intègre une interface Web de configuration.
  • Vecteur de supervision : C’est le protocole ou un service présent sur l’équipement à superviser permettant à Centreon d’exécuter un service de check.

Fonctionnement de Centreon par défaut

Par défaut lors de la mise en place de la supervision tous les services sont gérés par l’ordonnanceur de Centreon sans sans priorité mise à par l’intervalle entre chaque check de chaque service.

Dans le meilleur des mondes tous les voyants sont au vert

Voyons maintenant ce qu’il se passe si l’équipement ne répond plus au ping

Tous nos services passent au rouge. C’est le si célèbre effet « sapin de noël » 😂.

Résultat :

  1. Un mail pour le ping est envoyé à tous les utilisateurs en fonction des ACL’s pour indiquer que l’équipement n’est plus en réseau.
  2. 13 mails supplémentaires 😱 sont envoyés parce que Centreon n’arrive pas communiquer avec son équipement, donc a lancer les checks sur un équipement qui n’est plus en réseau

Cette démonstration montre comment démobiliser les équipes à utiliser une supervision centralisée et commune à l’entreprise.

Apport des dépendances de services

Dans les paragraphes suivants nous allons voir ce que nous attendons des dépendances de services.

J’ai pris l’exemple simple d’un serveur avec différents services applicatif.

Cinématique

Pour que le worflow ci-dessous fonctionne il est important que les alarmes soient prises en compte rapidement. Chez mes clients les SLA ou les OLA sont a 15 min pour la prise en compte des alarmes et 30mn pour la résolution des alarmes système.

Il est également important de souligner :

  • qu’il faut acquitter les alarmes pour arrêter les notifications vers les utilisateurs et/ou l’ouverture de ticket en automatique.
  • Les outils de supervision de chaque service (PgAdmin,OEM,HP Openview, …) doivent rester actif.
    • Chaque équipe a son outil de supervision qu’il maitrise et qui est adapté à son domaine, Centreon est un outil pour l’exploitation et la continuité de service.

Dépendances à mettre en place

  1. Notre service maitre sera le ping
  2. Les vecteurs de supervision dépendrons du service SNMP
  3. Chaque service sera dépendant de son propre vecteur de supervision
  4. La supervision applicative ou ressenti client dépendrons du bon démarrage des services applicatif

Perte du ping

Voyons maintenant ce qu’il se passe si on perd le ping :

  • Comme dans le cas précédent notre équipement n’est plus en réseau
    • La supervision des vecteurs de supervision est donc interrompue (Flèche numéro 1)
  • Dans ce cas de figure une seule alarme remonte :
    • Centreon attend que le ping réponde pour lancer les autres checks
    • Dans le cadre d’ouverture de ticket automatique un seul ticket sera ouvert
    • Par le jeu des ACL’s seuls les équipes responsables du bon fonctionnement de l’équipement recevrons un mail
  • Il y a des inconvénients indéniables :
    • Le flux ICMP peut être bloqué pas la mise en place d’un nouveau par feu. L’équipement fonctionne mais ne répond plus au ping. Les services sont surement démarrés mais le jeu des dépendances rend la supervision aveugle
    • La supervision ne reflète pas la réalité
      • Cela ne veut pas dire que l’application ne fonctionne pas
      • On se concentre sur le problème identifié

Perte du SNMP

Le ping est bien disponible mais le service SNMP ne répond pas sur notre serveur.

Voyons qui va recevoir un mail :

  • Le ping étant disponible ce n’est donc pas un problème réseau.
  • Notre alarme peut avoir 2 causes :
    • Le service SNMP n’est pas démarré
    • Le service est démarré mais ne répond pas (souvent le cas sous windows)
  • on peut donc en déduire les notifications :
    • Le mail va donc être envoyé aux admins système pour action
    • Un mail va être envoyé aux autres admins (DBA, Web, admin Web, …) pour information

L’impact reste donc minime en terme d’alerting :

  • Dans le cas d’ouverture de ticket automatique un ticket sera ouvert sur le dysfonctionnement du service SNMP
  • Les services dépendant du protocole SNMP ne seront donc pas superviser. pas besoin d’alerter la terre entière pour un service non démarré.

Une fois de plus il faut garder à l’esprit que Centreon nous montre un vision depuis les serveurs de supervision.

Perte d’un des autres vecteur de supervision

Dans l’un des 3 cas ci dessus nous pouvons faire une première analyse :

  1. Le service NRPE ou NsClient Ne répond plus. Le poller n’est plus en capacité d’examiner les logs
  2. Un process applicatif ( Base de données, Serveur Web, …) Ne semble pas démarré. Il faudra donc contrôler et relancer les services en alarme pour relancer les check applicatif.
  3. Le service SSH n’est plus disponible. Celà a plusieurs conséquences :
    • Il faudra passer par terminal de l’hyperviseur ( HyperV, VmWare, … ) pour reprendre la main sur le serveur.
    • Les check via SSH ne sont plus lancés.

Mise en place depuis l’interface

dépendances du ping

.Dans notre schéma des dépendances Le SNMP dépendra su service Ping

Vecteurs de supervision

L’analyse des logs dépendra du service SNMP

Services applicatifs

Tous les check dépendant du bon démarrage des service applicatif y seront rattachés

Industrialisation

Pre-requis

Pour que les requêtes suivantes fonctionne il es important que les règles de nommage soient respectées :

  • Le vecteur de supervision doit être indiqué à la fin du nom du Template de service :
    • SNMP
    • NRPE
    • SSH
    • NsClient
    • NSCA
  • Le vecteur de supervision doit être supervisé

Créer un répertoire /var/log/centreon/Indus/

Nous utiliserons l’objet DEP de Clapi pour implémenté les dépendances de services. Comme décrit ici

Les scripts a mettre en oeuvre :

  • conf.sh : Contient les variables utilisées par le script principal. C’est le fichier à modifier en fonction du contexte de la plateforme en place.
  • DBFonction.sh : Contient les requêtes SQL utilisées par le script principal
  • Server.sh : Gestion des dépendances serveurs
  • Network.sh : Gestion des dépendances de la supervision Hardware Réseau
  • Infra.sh : Gestion des dépendances de la supervision hardware Infra ( Baies de disque, serveurs,…)
  • indusdependencies.sh ; script principal

Configuration des crédenciales

  • Un compte de service doit être créé pour industrialiser. Dans le cadre de cette article nous utiliserons un compte Nommé « CS_clapi« . Il doit avoir les droits admin et accéder aux API de centreon.
  • Création de l’alias clapi dans le fichier .bashrc du compte root pour ne pas faire apparaitre en clair dans l’historique le mot de passe pour accéder à l’API de centreon :
    • alias clapi= »/usr/share/centreon/bin/centreon -u ‘CS_clapi’ -p ‘MDP Clapi' »
    • clapi -e pour faire un export
    • clapi -i <Fichier Clapi> pour importer les éléments de configuration

Recherche des services dépendants du Ping

Comme indiqué dans les schémas des paragraphes précédents, les vecteurs de supervision dépendront du bon fonctionnement du ping :

SELECT 
-- La fonction concat permet de générer le fichier CSV pour le Clapi de centreon
-- Liste des champs nécessaires :
-- * DEP pour dépendance
-- * ADDCHILD pour ajouter un service dépendant
-- * Nom de la dépendance suffixé du service Maitre ici le ping
-- * Nom de l'équipement
-- * séparateur Equipement Service
-- * Nom du service
concat('DEP;ADDCHILD;DEP_',HST.host_name,'_PING;',HST.host_name,',',SVC.service_description)
-- On recherche dans la ta  bles des hôtes
FROM centreon.host AS HST
-- Table de relation entre l'équipement et les services
LEFT JOIN centreon.host_service_relation AS HSR on HSR.host_host_id=HST.host_id
-- On liste les vecteurs de supervision
LEFT JOIN centreon.service as SVC ON SVC.service_id=HSR.service_service_id
-- On contrôle que l'équipement est biena actif
where HST.host_activate='1'
-- On co,ntôle que ce n'est pas un template
AND HST.host_Register='1'
-- On vérifie que le service est actif
AND SVC.service_activate='1'
-- On exclus les Templates de service
AND SVC.service_register='1'
-- ON liste les noms de vecteurs de services supervisés ( Liste non exhaustive ) 
AND (SVC.service_description like '%snmpd%' 
     OR SVC.service_description like '%nrpe%' 
     OR SVC.service_description like '%nsclient%' 
     OR SVC.service_description like '%sshd%' 
     OR SVC.service_description like '%nsca%'
     OR SVC.service_description like "%SerialNumber%")
-- On exclus les services passifs
AND SVC.service_description not like '%mib%'
-- ON ne recherche que les services maitre de l'équipement supervisé
AND HST.host_name='"$Host"'

Le résultat de la requête retourne tous les services supervisant les vecteurs et devront être stockés dans un fichier temporaire qui sera utilisé ultérieurement :

  • Pour l’import et la création de la dépendance sur le ping
  • Pour rechercher tous les services dépendants de son vecteur de supervision

Liste des services en fonction du vecteur de supervision

Pour rappel les Templates de service doivent respecter les règles de nommage suivants a minima :

  • Commencer par le préfixe « TS_ »
  • Se terminer par le suffixe indiquant le vecteur de supervision :
    • _SNMP
    • _NRPE
    • _SSH

La recherche des services maitres ont permis de déterminer les services dépendants du ping dans le fichier <Host>_<Vecteur>_Dependencies.clapi

Les variables :

  • Vecteur de supervision
  • Nom d’hôte
  • Service maitre
-- Concaténation CLAPI pour les services dépendants 
SELECT concat('DEP;ADDCHILD;DEP_',HST.host_name ,'_"$Vecteur";',HST.host_name,',',SVC.service_description) 
-- On recherche l'équipement supervisé
FROM centreon.host AS HST
-- Relation entre l'équipement et les services
LEFT JOIN centreon.host_service_relation AS HSR on HSR.host_host_id=HST.host_id 
-- Liste les services dépendants
LEFT JOIN centreon.service as SVC ON SVC.service_id=HSR.service_service_id
-- Relation entre le service et le template
LEFT JOIN centreon.service AS TPL_DEP ON TPL_DEP.service_id=SVC.service_template_model_stm_id
-- Controle que la supervision de l'équipement est active
where HST.host_activate='1'
-- Ce n'est pas un template
AND HST.host_Register='1'
-- Le service est actif
AND SVC.service_activate='1'
-- Ce nest pas un template
AND SVC.service_register='1'
-- Recherche le template du service en fonction du vecteur de supervision
AND TPL_DEP.service_description like 'TS%"$Vecteur"'
-- on exclus le service maitre pour éviter les boucles
AND SVC.service_description not like '"$Maitre"'
-- on recherche uiquement les services de l'équipement supervisé
AND HST.host_name='"$Host"' 

Script

Le script fonctionnera en 2 étapes :

  1. Export des données directement en base dans un fichier compatible Clapi
  2. Import di fichier via Clapi

Les variables globales

export HOST_NAME=""
export LANG=C
export CLAPI='/usr/share/centreon/bin/centreon -u <Compte Clapi> -p <MDP Clapi> '
export REP_LOG=/var/log/centreon/
export REP_TEMP=/tmp
export FIC_LOG=""
export FG_FORCE=1
export APPLICATION=""
export FG_SNMP=1
export RC=0
########################################################
### On parse le fichier de configuration de centreon ###
########################################################
export CONF_CENTREON='/etc/centreon/conf.pm'
export CENTREON_DB="centreon"
export DB_HOST=$(grep "db_host" $CONF_CENTREON | cut -d"=" -f2 | cut -d">" -f2 | cut -d"," -f1 | sed "s/\"//g" | sed "s/'//g"| cut -d":" -f1)
export DB_PORT=$(grep "db_host" $CONF_CENTREON | cut -d"=" -f2 | cut -d">" -f2 | cut -d"," -f1 | sed "s/\"//g" | sed "s/'//g"| cut -d":" -f2)
export DB_USER=$(grep "db_user" $CONF_CENTREON | cut -d"=" -f2 | cut -d">" -f2 | cut -d"," -f1 | sed "s/\"//g"| sed "s/'//g"| sed "s/ //g")
export DB_PASSWD=$(grep "db_passwd" $CONF_CENTREON | cut -d"=" -f2 | cut -d">" -f2 | cut -d"," -f1 | sed "s/\"//g"| sed "s/'//g"| cut -d":" -f2 | sed "s/ //g")
export POLLER=""
export OK=0
export WARNING=1
export CRITICAL=2
export UNKNOWN=3
#export REP_TEMP=/home/legrand-p

Usage

#####################################
#--- Create dependencies Usage : ---#
#####################################


usage: $0 [options]

$0 [-h]  [-H|-host_name <Hostname>] -A [-I|--input <Input File>}] [-D| -debug]

OPTIONS:
   -h| -help		  Affiche ce message
   -H| -host_name	Ajout dépendance de service
   -A| -all		    Recherche tous les hôtes et créé les dependances de service
   -I| -input		  Import depuis un fichier liste d'hôte
   -D| -debug     Activation du mode debug

exit code 1 = Equipement non supervisé
exit code 2 = Equipement desactive
exit code 3 = Erreur lors de la creation des dependances

Gestion des arguments

##############################
### Gestion des arguments ####
##############################
SHORT=h,H:,A,I:,D
LONG=help,host_name:,all,input:,debug
OPTS=$(getopt -a -n Erreur --options $SHORT --longoptions $LONG -- "$@")

if [ $? != 0 ] 
then 
	echo "option(s) non reconnue(s)" ;
	echo "";
	usage;
fi
if [ $# -eq 0 ]
then
	echo "Arguments Absents"
	echo
	usage;
fi
if [ $# -gt 3 ]
then
	echo "Trop d'arguments"
	echo
	usage;
fi



eval set -- "$OPTS"

while :
do
  case "$1" in
    -H | --host_name )
		HOST="$2";
		Fonction=HostDependencies;
		shift 2;
      ;;
    -I | --input )
		INPUT_FILE="$2";
		Fonction=InputDependencies;
		shift 2;
      ;;
    -A | --all)
		FG_ALL=1
		Fonction=AllDependencies;
		shift;
      ;;
    -D | --debug)
		FG_DEBUG=1
		shift;

		#AllDependencies;
      ;;
    -h | --help)
		usage;
      ;;
    --)
		shift;
		break;
      ;;
    *)
		echo "Argument non reconnu : $1";
		usage;
      ;;
  esac
done

echo HOST=$HOST
echo INPUT_FILE=$INPUT_FILE
echo FG_ALL=$FG_ALL
$Fonction

Script d’extraction depuis la base de données centreron

….

Script principal

….

Contrôles de bon fonctionnement

Le script importe le fichier générer pour chaque vecteur de supervision.

Depuis les logs

Nous pouvons contrôler la conformité du fichier importé depuis le répertoire de logs dans mon cas /var/log/centreon/clapi

DEP;ADD;DEP_centreon-web_PING;DEP_centreon-web_PING;SERVICE;centreon,Ping
DEP;SETPARAM;DEP_centreon-web_PING;inherits_parent;1
DEP;SETPARAM;DEP_centreon-web_PING;execution_failure_criteria;w,u,c,p
DEP;SETPARAM;DEP_centreon-web_PING;notification_failure_criteria;w,u,c,p
DEP;SETPARAM;DEP_centreon-web_PING;dep_comment;Dependance sur le service PING.
DEP;ADDCHILD;DEP_centreon-web_PING;centreon,OS-Sys-Linux-Process-snmpd-Status
DEP;ADDCHILD;DEP_centreon-web_PING;centreon,OS-Sys-Linux-Process-snmptrapd-Status
DEP;ADDCHILD;DEP_centreon-web_PING;centreon,OS-Sys-Linux-Process-sshd-Status

Nous pouvons également contrôler les fichiers des requêtes SQL qui on été lancées :

SELECT concat('DEP;ADDCHILD;DEP_',HST.host_name,'_PING;',HST.host_name,',',SVC.service_description) FROM centreon.host AS HST 
LEFT JOIN centreon.host_service_relation AS HSR on HSR.host_host_id=HST.host_id 
LEFT JOIN centreon.service as SVC ON SVC.service_id=HSR.service_service_id 
where HST.host_activate='1' 
AND HST.host_Register='1' 
AND SVC.service_activate='1' 
AND SVC.service_register='1' 
AND (SVC.service_description like '%snmpd%' 
     OR SVC.service_description like '%nrpe%' 
     OR SVC.service_description like '%nsclient%' 
     OR SVC.service_description like '%sshd%' 
     OR SVC.service_description like '%snmptrapd%' 
     OR SVC.service_description like '%nsca%' 
     OR SVC.service_description like '%SerialNumber%' ) 
AND SVC.service_description not like '%mib%' 
AND HST.host_name='CENTREON-Web' ;

Depuis l’interface

La capture ci-dessous montre les champs renseignés par le script pour les dépendances sur ping.

  1. Nom de la dépendance sous le format DEP_<Hostname>_<Service maitre>
  2. Nom de la dépendance sous le format DEP_<Hostname>_<Service maitre>
  3. Si un service maitre est en erreur la dépendance est activée
  4. On n’exécute pas les checks des services dépendants si le service maitre est en erreur
  5. On n’envoie pas de mail pour les services dépendants si le service maitre est en erreur
  6. Nom du service maitre
  7. Nom des services dépendants
  8. Description de la dépendance

VABF

Liste des dépendances générées :

N’ayant pas de service supervisé en NRPE le script génère les autres dépendances.

Les services se mettent en attente de bon check des services maitre.

Il est important de ne pas forcer les checks et laisser Centreon gérer l’ordonnancement des services en fonction des dépendances implémentées.

Une fois tous les check lancées les dépendances sont en place :

Conclusion

D’expérience, il est préférable de faire un export des configurations une fois par jours du fait que recharger les configurations trop souvent peut entrainer de la latence sur les pollers.

Cependant les exports peuvent être plus fréquents dans le cadre de la mise en place d’une nouvelle plateforme Centreon.

Le script prendra donc en compte tous les soirs les nouveaux services implémentés dans la supervision manuellement ou via les règles de découverte pour mettre en place les dépendances de services adéquates.

Table des matières
WordPress Appliance - Powered by TurnKey Linux