3 - Les dépendances

Dans cette page :

Haut de page

Introduction

Comme nous l’avons vu précédemment, les dépendances permettent de limiter le nombre d’alertes reçues en cas de panne venant d’un système dont dépendent un ou plusieurs autres. Ainsi, par exemple, lors de la panne d’une switch, des alertes seront émises uniquement concernant la switch mais pas concernant tous les hôtes connectés à cette switch.

Nagios permet de mettre en place deux types de dépendances :

Les dépendances de services : un service sur un hôte dépend d’un autre service.

Les dépendances d’hôtes : un hôte dépend d’un autre hôte.

Les dépendances de service

Un service peut dépendre d’un ou plusieurs services sur le même hôte ou non.

HTTP

define servicedependency{
	host_name			Host B
	service_description		Service D
	dependent_host_name		Host C
	dependent_service_description	Service F
	execution_failure_criteria	o
	notification_failure_criteria	w,u
}

define servicedependency{
	host_name			Host B
	service_description		Service E
	dependent_host_name		Host C
	dependent_service_description	Service F
	execution_failure_criteria	n
	notification_failure_criteria	w,u,c
}

define servicedependency{
	host_name			Host B
	service_description		Service C
	dependent_host_name		Host C
	dependent_service_description	Service F
	execution_failure_criteria	w
	notification_failure_criteria	c
}

Description des variables

dependent_host : Cette variable est utilisée pour identifier le(s) nom(s) court(s) d’hôte sur lequel tourne le service dépendant ou avec lequel il est associé. Plusieurs hôtes peuvent être séparés par des virgules. Laissez cette variable vide peut être utilisé pour créer des dépendances sur le même hôte.

dependent_service_description : Cette variable est utilisée pour identifier la description d’un service dépendant.

host_name : Cette variable est utilisée pour identifier le(s) nom(s) court(s) d’hôte(s) sur lequel tourne le service dont on dépend (aussi appelé service maître) ou avec lequel il est associé. Plusieurs hôtes peuvent être séparés par des virgules.

service_description : Cette variable est utilisée pour identifier la description du service dont on dépend (aussi appelé service maître).

execution_failure_criteria : Cette variable est utilisée pour préciser les critères qui déterminent quand le service dépendant ne doit pas être contrôlé activement. Si le service maître est dans un état d’erreur que nous précisons, le service dépendant ne sera pas contrôlé activement. Les options valides sont une combinaison d’un ou de plusieurs des état suivants (les options multiples sont séparées par des virgules).

  • o = erreur sur état OK

  • w = erreur sur état WARNING

  • u = erreur sur état UNKNOWN

  • c = erreur sur état CRITICAL

  • p = erreur sur état d’attente (par exemple le service n’a pas encore été vérifié).

  • n (none) : la dépendance d’exécution n’échouera jamais et les contrôles du service dépendant seront toujours faits activement (si d’autres conditions permettent de le faire). Si vous précisez o,c,u dans ce champ, le service dépendant ne sera pas contrôlé activement si le service maître est dans un des états OK, CRITICAL ou UNKNOWN.

notification_failure_criteria : Cette variable est utilisée pour définir les critères qui déterminent quand les notifications pour le service dépendant ne doivent pas être envoyées. Si le service maître est dans un des états d’erreur que nous précisons, les notifications pour le service dépendants ne seront pas envoyées aux contacts. Les options valides sont une combinaison d’un ou de plusieurs des état suivants :

  • o = erreur sur état OK

  • w = erreur sur état WARNING

  • u = erreur sur état UNKNOWN

  • c = erreur sur état CRITICAL

  • p = erreur sur état d’attente (par exemple le service n’a pas encore été vérifié).

  • n (none) : la dépendance de notification n’échouera jamais et les notifications du service dépendant seront toujours envoyées.

Si vous précisez w dans ce champ, les notifications pour le service dépendant ne seront pas envoyées si le service maître est dans un état WARNING. dependency_period : Cette variable est utilisée pour préciser le nom court d’une période de temps pendant laquelle les dépendances sont valides. Si cette variable est vide, les dépendances seront considérées comme valides tout le temps.

Les dépendances d’hôtes

Deux solutions existent pour mettre en place les dépendances d’hôte :

Utiliser l’objet hostdependency

Utiliser la directive parents dans un objet host

L’objet hostdependency s’utilise de la même façon que les dépendances de service mais seules les notifications peuvent être supprimées, il n’y a pas d’équivalent aux vérifications d’exécution.

HTTP

define hostdependency{
	host_name			Host A
	dependent_host_name		Host C
	notification_failure_criteria	d
}
 
define hostdependency{
	host_name			Host B
	dependent_host_name		Host C
	notification_failure_criteria	d,u
}

Comme pour les services, si une des dépendances de l’hôte échoue, Icinga suspend temporairement les notifications concernant cet hôte.

La directive parent

La directive parents doit contenir le ou les hôte(s) dont dépend l’hôte configuré comme les switch, routeurs, firewall… Il s’agit d’une liste de noms courts (ils doivent avoir été définis comme hôtes dans d’autres objets).

define host{
	host_name		SWITCH01
	alias			Une switch
	address			10.20.30.254
	check_command		check_ping
	check_interval		5
	retry_interval		1
	max_check_attempts	5
	check_period		24x7
	contact_groups		admin@bigshot.com
	notification_interval	30
	notification_period	24x7
} 

define host{
	host_name	                 DNSSRV01
	alias			Le serveur DNS 
	address			10.20.30.40
	check_command		check_ping
	parents			SWITCH01
	check_interval		5
	retry_interval		1
	max_check_attempts	5
	check_period		24x7
	contact_groups		admin@bigshot.com
	notification_interval	30
	notification_period		24x7
} 

Lab 1

Pour configurer la dépendance des services, nous allons considérer que la console Icinga dépend du service DNS.

Vous aurez donc besoin d’une machine Linux avec Bind. La configuration par défaut sera suffisante, vous pouvez aussi utiliser une machine Windows avec le service DNS.

define host {
        host_name               	nagios
        alias                   	L'hôte local Icinga
        address                 	127.0.0.1
        max_check_attempts			10
        contacts                	admin
        check_interval          	1
        notification_interval   	10
        notification_period     	24x7
        check_command           	check-host-alive
}

define host {
        host_name				DNS01
        alias					AD
        address					192.168.230.230
        max_check_attempts		10
        contacts				admin
        check_interval			1
        notification_interval	10
        notification_period		24x7
        check_command			check-host-alive
} 

define service{
        host_name				nagios
        service_description		icinga
        check_command			console-icinga
        check_interval			1
        retry_interval			1
        max_check_attempts		5
        check_period			24x7
        contacts				admin
        notification_interval	1
        notification_period		24x7
} 

define service{
        host_name               	ad
        service_description     	dns
        check_command           	requete-dns
        check_interval          	1
        retry_interval          	1
        max_check_attempts      	5
        check_period            	24x7
        contacts                	admin
        notification_interval   	1
        notification_period     	24x7
}

define servicedependency{
        host_name                      		ad
        service_description            		dns
        dependent_host_name            		nagios
        dependent_service_description   	icinga
        execution_failure_criteria     		w,c,u
        notification_failure_criteria  		w,c,u
} 

Lab 2

Pour configurer les dépendances d’hôtes :

Vous pouvez installer un routeur en utilisant une machine Windows 2008 R2 (voir procédure ci-dessous).

Créez un hôte dans Icinga pour cette machine.

Déplacez le serveur DNS sur l’autre patte du routeur (attention à changer l’adresse IP du serveur DNS dans la configuration icinga). Dans la configuration icinga du routeur, ajoutez une instruction « parents » contenant le nom de l’hôte routeur.

Configuration d’un routeur Windows 2008 R2 :

Créez une machine virtuelle avec deux cartes réseau chacune dans un réseau virtuel différent et suivez la procédure ci-dessous.

HTTP

HTTP

HTTP

HTTP

HTTP

HTTP

HTTP

HTTP

HTTP

HTTP

HTTP

HTTP

HTTP

HTTP

HTTP

HTTP

HTTP

HTTP

HTTP

Répétez l’opération pour l’autre interface réseau.