Nagios et la Supervision

Nagios

Historique de Nagios

Nagios est entièrement basé sur le moteur de NetSaint , ancien outil de supervision réseau.


historique de Nagios




Fonctionnalités de Nagios

Nagios intègre l'ensemble des modules dérivés de la supervision

On y retrouve :




Architecture de Nagios

Nagios repose sur un serveur web et des CGI. Il peut intégrer une base de données de type MySQL ou PostgreSQL pour y stocker des informations de supervision. Bien que conseillée, la base de donnée n'est pas essentielle dans le fontionnement de Nagios et peut être remplacée par de simples fichiers tournants, mais cette architecture doit être limitée à de petites installations avec un nombre de machines supervisées restreint.

L'architecture standard de Nagios peut donc être représentée de la manière suivante :

schéma : Architecture de Nagios


Le choix de mettre en place une base de données dépend de l'utilisation qui sera faite de Nagios et des données collectées.
Il faut cependant noter que pour Nagios 2.0 Ethan Galstad, l'auteur de Nagios, dans sa clairvoyance, a décidé de retirer les fonctionnalités permettant la mise en base de données des informations concernant les services, les serveurs, les performances, les commentaires, les états, les heures d'arrêt de service, etc... Ces extensions seront remplacées par l'event broker.
Voir ./configure -help | grep -E "mysql|pgsql" pour plus d'informations.

Les plugins

Les plugin sont des programmes exécutables ou des scripts (perl, shell, etc..) qui peuvent être lancés depuis une ligne de commande pour tester un hôte ou un service.
Le résultat de l'exécution d'un plugin est utilisé par Nagios pour déterminer le statut des hôtes ou des services sur le réseau.

Le développement des plugins pour Nagios est fait sur SourceForge. La page du projet de développement de plugins pour Nagios (où vous trouverez toujours la dernière version des plugins) se trouve à http://sourceforge.net/projects/nagiosplug/

Les plugins développés pour Nagios doivent respecter un certain format d'affichage de retour afin de garantir leur intégration. Tous les plugins qui respectent les consignes minimales de développement pour ce projet contiennent une documentation interne. Cette documentation peut être affichée en exécutant le plugin avec le paramétre "-h" ("--help" si les paramétres longs sont activés).

Par exemple, si vous voulez savoir comment fonctionne le plugin check_http ou quels paramétres il accepte, vous devez saisir :

./check_httpd --help
ou
./check_httpd --h

Créer vos propres plugin pour les adpater à des services ou hôtes particuliers est possible. Vous pouvez trouver des informations à ce sujet sur http://sourceforge.net/projects/nagiosplug/

Les agents

Il est possible d'utiliser des agents de supervision permettant de récupérer des informations à distances. Ils offrent la possibilité de profiter de la puissance offerte par les plugins. Il existe 2 types d'agents :

Le principe de fonctionnement des agents nrpe (pour Nagios Remote Plugin Executor) est simple : les plugins sont installés sur l'équipement à superviser, compilés en fonction de son architecture car c'est elle qui va les exécuter, ainsi que le démon nrpe faisant office de serveur. Sur la plateforme de supervision Nagios, le plugin check_nrpe fera alors office de client nrpe, récupérant les informations en interrogeant le démon nrpe sur l'équipement concerné.

Le plugin check_nrpe sur le serveur Nagios initiera une connexion vers l'agent nrpe de la machine cible et lui demandera alors l'exécution d'une vérification. L'agent nrpe lancera alors le plugin configuré en local pour obtenir l'information et retournera le code retour de l'exécution ainsi que sa sortie standard.

Les agents ncsa (pour Nagios Service Check Acceptor) diffèrent des agents nrpe car la vérification est plannifiée en local sur l'équipement supervisé, exécutée, puis le résultat est envoyé au serveur Nagios. De même que pour nrpe, l'architecture ncsa demande la présence du plugin check_ncsa sur la plateforme Nagios.

schéma : Agents NRPE et NCSA




Installation de Nagios

L'installation et la configuration de Nagios ne sont pas aisées et peuvent nécessiter plusieurs jours avant d'être réalisées comme souhaité.
Il faut avoir une certaine expérience dans l'exploitation du système Linux et de ses composants ainsi que dans le fonctionnement de Nagios en général.
Ne pas hésiter à se référer à la documentation officielle

Pré-requis

Nagios a, en plus des plugins, besoin de satisfaire un certain nombre de dépendances.

Les pré-requis à l'installation sont les suivants :

Création d'un utilisateur nagios

Avant même d'installer Nagios, la première chose à faire est de créer un utilisateur pour Nagios, ainsi que son groupe

# groupadd nagios
# useradd -g nagios -m -d /home/nagios -G apache nagios

L'utilisateur nagios fait également partie du groupe apache pour des raisons pratiques .

Compilation et installation

Une fois les prérequis installés, et les sources récupérées sur le site officiel, la phase d'installation suit les étapes suivantes

Il faut commencer par la phase de compilation, avec les options choisies

# ./configure --options
# make all

Quand la compilation est terminée sans erreur, on peut passer à l'installation

# make install

Pour rendre Nagios complètement opérationnel, il reste quelques commandes à passer :

Installer le script de démarrage de Nagios /etc/init.d/nagios

# make install-init

Créer et mettre les droits sur le répertoire qui va contenir les fichiers de communication entre le serveur Nagios et les CGI de présentation

# make install-commandmode

Installer un exemple de configuration de Nagios. Les fichiers de configuration ainsi créés verront leur nom se terminer par -sample, pour éviter ainsi d'écraser la configuration actuelle en cas d'upgrade

# make install-config

L'installation de Nagios est alors terminée. Il faut maintenant passer à la phase de configuration.




Configuration de Nagios

Serveur web

L'accès à Nagios doit être restreint car il peut montrer des informations sensibles voire confidentielles concernant le système d'information.

Par ailleurs, des actions peuvent être entreprises via l'interface web, allant de l'acquiescement des alarmes jusqu'au redémarrage de machines.

Pour cette raison, il faut protéger l'accès aux CGI de Nagios, au travers le mécanisme d'authentification de votre serveur web (ex : mécanisme htpasswd pour Apache)

Nagios

La configuration de Nagios demande beaucoup de temps et n'est pas chose aisée. En effet, l'ensemble de la configuration du logiciel se fait dans des fichiers textes d'extension .cfg

L'ensemble des fichiers de configuration sont définis selon le format suivant

define type{
	attribut1	valeurs
	attribut2	valeurs
	...		valeurs
	}


Ce mécanisme de définition implique qu'aucun espace ne pourra être inséré dans les paramètres et leurs valeurs

La cohérence des fichiers de configuration peut être testée en exécutant Nagios avec l'option -v et en lui fournissant le fichier de configuration principal

# /etc/init.d/nagios -v [chemin d'accès au fichier nagios.cfg]

Nagios supervise les équipements à travers le réseau. Ils peuvent être des serveurs, des équipements réseaux, ou tout autre type de machine reliée au réseau.

Ces hosts peuvent être regroupés dans un ou plusieurs groups, permettant ainsi d'agir sur un ensemble de machines plutôt que sur chacune, une par une.

Viennent ensuite les services. Ils correspondent aux services testés par les plugins. Définis dans un fichier de configuration, les services font appel aux plugin via des commands elles-même définies dans un fichier checkcommands.cfg

L'ordonnancement de la vérification des services se fait elle selon des périodes de temps définis par les clauses timeperiod dans le fichier timeperiods.cfg

Le rôle de Nagios est donc de prévenir lorsqu'un problème survient. Les contacts à prévenir sont définis dans le fichier contacts.cfg et peuvent eux aussi être groupés dans le fichier contactgroups.cfg

L'escalade des alertes entre les groupes, en cas de non réponse, peut être définie dans le fichier escalations.cfg

Il reste alors le fichier misccommands.cfg dans lequel sont déclarées les commandes non-destinées au lancement de plugin. On y trouvera par exemple les commandes nécessaires à l'envoi de mail, de SMS, etc..

Enfin, d'autres fichiers peuvent également être utilisés tels que dependencies.cfg pour définir des dépendances entre services, cgi.cfg pour la configuration des CGI, hostextinfo.cfg pour les infos supplémentaires sur les hôtes (icône, coordonnées graphiques sur la statusmap, ...) et serviceextinfo.cfg idem que hostextinfo.cfg mais pour les services.

Les principaux fichiers de configuration sont donc les suivants :

nagios.cfg

Il s'agit du fichier principal de configuration de Nagios. Il contient notamment la liste des autres fichiers de configuration utilisés, ainsi que l'ensemble des directives globales de fonctionnement de Nagios, comme le nom et le groupe de l'utilisateur nagios.

ressource.cfg

Il s'agit d'un fichier de déclaration utilisé par les autres fichiers de configuration de Nagios. Il permet de définir des variables globales pour une utilisation simplifiée dans les autres fichiers de configuration (ex : $USER1$=/usr/local/nagios/libexec).

hosts.cfg

Fichier de configuration des équipements supervisés. Une définition d'hôte s'applique à un serveur "physique", une station de travail, un périphérique, un équipement, qui se trouve sur votre réseau. Chaque hôte saisi nécessite une structure particulière, incluant notamment son nom, son adresse IP, le type de test à effectuer pour caractériser l'état de l'hôte (généralement ping)...

Exemple de définition d'un host

define host{
	host_name			bogus-router
	alias				Bogus Router #1
	address				192.168.1.254
	parents				server-backbone
	check_command			check-host-alive
	max_check_attempts		5
	process_perf_data		0
	retain_nonstatus_information	0
	notification_interval		30
	notification_period		24x7
	notification_options		d,u,r
	}

hostgroups.cfg

Il contient les groupes d'hôtes permettant ensuite d'agir sur un ensemble de machines.

define hostgroup{
	hostgroup_name		novell-servers
	alias			Novell Servers
	contact_groups		novell-admins
	members			netware1,netware2,netware3,netware4
	}

services.cfg

Fichier de configuration des services supervisés. La définition d'un service identifie un service tournant sur un hôte. Le terme "service" est très générique. Il peut s'appliquer à un service ( tel que POP, SMTP, HTTP, etc.) ou bien tout autre type de mesure associée à l'hôte (temps de réponse à un ping, nombre d'utilisateurs connectés, usage des disques).

Exemple de définition d'un service supervisé

define service{
	host_name		linux-server
	service_description	check-disk-sda1
	check_command		check-disk!/dev/sda1
	max_check_attempts	5
	normal_check_interval	5
	retry_check_interval	3
	check_period		24x7
	notification_interval	30
	notification_period	24x7
	notification_options	w,c,r
	contact_groups		linux-admins
	}

servicegroups.cfg

Il contient les groupes de services permettant ensuite d'agir sur des ensembles de services.

checkcommands.cfg

Fichier de configuration des commandes de supervision

define command{
	command_name	check_pop
	command_line	/usr/local/nagios/libexec/check_pop -H $HOSTADDRESS$	
	}

misccommands.cfg

Fichier de configuration des commandes de notification

timeperiods.cfg

Fichier de configuration des calendriers

define timeperiod{
	timeperiod_name		nonworkhours
	alias			Non-Work Hours
	sunday			00:00-24:00
	monday			00:00-09:00,17:00-24:00
	tuesday			00:00-09:00,17:00-24:00
	wednesday		00:00-09:00,17:00-24:00
	thursday		00:00-09:00,17:00-24:00
	friday			00:00-09:00,17:00-24:00
	saturday		00:00-24:00
	}

contacts.cfg

Fichier de définition des contacts à notifier. Une définition de contact s'applique à la personne physique qui doit être contactée en cas de problèmes sur le réseau.

Exemple de définition d'un contact à notifier

define contact{
	contact_name                    jdoe
	alias                           John Doe
	service_notification_period     24x7
	host_notification_period        24x7
	service_notification_options    w,u,c,r
	host_notification_options       d,u,r
	service_notification_commands   notify-by-email
	host_notification_commands      host-notify-by-email
	email				jdoe@localhost.localdomain
	pager				555-5555@pagergateway.localhost.localdomain
	}

contactgroups.cfg

Il contient les groupes de contacts permettant ainsi de regrouper les contacts à notifier en cas d'alerte.

define contactgroup{
	contactgroup_name		novell-admins
	alias			Novell Administrators
	members			jdoe,rtobert,tzach
	}

escalations.cfg

Il défini l'escalade des alertes entre les différents groupes de contacts.

define serviceescalation{
	host_name		nt-3
	service_description	Processor Load
	first_notification	4
	last_notification	0
	notification_interval	30
	contact_groups		all-nt-admins,themanagers
	}

define hostescalation{
	host_name		router-34
	first_notification	5
	last_notification	8
	notification_interval	60
	contact_groups		all-router-admins
	}

define hostgroupescalation{
	hostgroup_name		netware-servers
	first_notification	5
	last_notification	0
	notification_interval	30
	contact_groups		netware-admins,themanagers
	}

dependencies.cfg

Il définit les dépendances entre les différents services, qu'ils soient sur le même serveur ou non. On peut ainsi par exemple faire dépendre le serveur web virtuel de la présence d'un processus Apache.

define hostdependency{
	host_name			WWW1
	dependent_host_name		DBASE1
	notification_failure_criteria	d,u
	}

cgi.cfg

Il définit la configuration des CGI de Nagios utilisés dans l'interface graphique web.

hosttextinfo.cfg

Il permet d'ajouter des propriétés graphiques aux hôtes définis dans hosts.cfg comme par exemple une icône ou des coordonnées à utiliser dans la statusmap de l'interface web.

define hostextinfo{
	host_name	netware1
	notes_url	http://webserver.localhost.localdomain/hostinfo.pl?host=netware1
	icon_image	novell40.png 
	icon_image_alt	IntranetWare 4.11
	vrml_image	novell40.png
	statusmap_image	novell40.gd2
	2d_coords	100,250
	3d_coords	100.0,50.0,75.0
	}

serviceextinfo.cfg

Idem que hostextinfos mais pour les services.

define serviceextinfo{
	host_name		linux2
	service_description	Log Anomalies
	notes_url		http://webserver.localhost.localdomain/serviceinfo.pl?host=linux2&service=Log+Anomalies
	icon_image		security.png 
	icon_image_alt		Security-Related Alerts
	}




L'interface de Nagios

L'interface de Nagios est accessible via un simple navigateur web. Elle permet à l'administrateur d'avoir accès à l'ensemble des informations de supervision.
Basée sur des CGI, cette interface peut donc être sécurisée par les mécanismes associés au serveur web et aux CGI afin de restreindre les accès aux informations en fonction des profils utilisateurs.

Elle est composée de deux grands types de vues :

Il est également possible d'accéder à la configuration du logiciel via cette interface, mais uniquement en lecture :-(

Les vue de Monitoring

Les vues de monitoring permettent de connaître l'état des équipements et des services supervisés, et éventuellement d'effectuer des actions sur ces derniers.

Les vues principales disponibles sont les suivantes :

Tactical Overview : vue générale résumant l'ensemble des informations

tactical view screenshot

Host Detail : vue des hôtes supervisés

host view screenshot

Service Detail : vue des services supervisés

service view screenshot

Status Map : cartographie du système d'informations supervisé

status map view screenshot

Les vue de Reporting

Les vues de reporting permettent de créer, à la volée, des rapports sur l'activité du système d'information, en fonction des données collectées par Nagios.
Couplé avec MRTG, les rapports pourront alors intégrer des graphiques.

Les vues principales disponibles sont les suivantes :

Availability : permet de créer des rapports de disponibilité des équipements

availability view screenshot

Alert History : permet d'avoir un historique des alertes

alert view screenshot

Trends : permet de grapher des données mesurables en fonction du temps

alert view screenshot

Valid XHTML 1.0!