Superviser la consommation des serveurs VMware ESX(i) avec Nagios

Dans un article précédent, je vous présentais une solution pour superviser un serveur VMware ESX(i). Elle reposait sur l’utilisation du plugin Nagios check_esx3.pl de la société OP5.
A l’aide du client vSphere, il est possible d’obtenir la consommation d’un serveur VMware ESX(i) (test effectué avec un serveur Dell PowerEdge R710).

Cette donnée de performance ne pouvait pas être mesurer avec le plugin Nagios check_esx3.pl. J’ai donc décidé d’implémenter cette fonctionnalité.

– Placez-vous dans le répertoire suivant : cd /usr/local/src/
– Téléchargez le plugin Nagios : wget "http://git.op5.org/git/?p=nagios/op5plugins.git;a=blob_plain;f=check_esx3.pl" -O check_esx3.pl
– Téléchargez le patch pour prendre en compte la consommation des serveurs VMWare ESX(i) : wget http://www.be-root.com/downloads/nagios/check_esx3/0001-check_esx3.pl-Added-power-consumption.patch
– Appliquez le patch sur le plugin check_esx3.pl : patch < 0001-check_esx3.pl-Added-power-consumption.patch

Ce patch a été récemment soumis à la liste de diffusion des utilisateurs OP5 pour intégrer le plugin check_esx3.pl. Je n’ai pas encore eu de réponse pour le moment.

– Copiez ce script dans le répertoire contenant les plugins Nagios : cp check_esx3.pl /usr/local/nagios/libexec/
– Rendez le script exécutable : chmod +x /usr/local/nagios/libexec/check_esx3.pl
– Modifiez le propriétaire pour ce script : chown nagios:nagios /usr/local/nagios/libexec/check_esx3.pl

– Vérifiez la consommation d’un serveur VMware ESX(i) : /usr/local/nagios/libexec/check_esx3.pl -H xxx.xxx.xxx.xxx -u supervision -p MotDePasse -l power -w 500 -c 600

CHECK_ESX3.PL OK - power=216.22 Watts | power=216.22W;500;600

– Ajoutez la définition de l’objet command : vi /etc/nagios/objects/commands.cfg

define command {
command_name check_esx_power
command_line $USER1$/check_esx3.pl -H $HOSTADDRESS$ -u $USER2$ -p $USER3$ -l power -w $ARG1$ -c $ARG2$
}

– Ajoutez la définition de l’objet host pour le serveur : vi /etc/nagios/objects/hosts.cfg

define host {
host_name server01
use generic_host
alias VMware ESXi
address xxx.xxx.xxx.xxx
contact_groups +admin
}

– Ajoutez la définition de l’objet service pour le serveur : vi /etc/nagios/objects/services.cfg

define service {
host_name server01
use generic_service
service_description Puissance
check_command check_esx_power!917!966
contact_groups +admin
}

– Rechargez la configuration de Nagios : service nagios reload

La configuration de Nagios dépend bien entendu de la structure que vous avez adopté.

Supervision de VMware ESX(i) avec Nagios

Pour superviser le serveur VMware ESX(i), nous allons utiliser le plugin Nagios check_esx3.pl de la société OP5. En pré-requis à son utilisation, il est nécessaire d’installer VMware vSphere SDK for PERL et le module PERL Nagios::Plugin sur le serveur de supervision.

Apercu de la supervision d'un serveur VMWare ESX(i)
Nous installerons VMware vSphere SDK for PERL dans le répertoire /opt/vmware-vsphere-perl-sdk/.

– Depuis le serveur de supervision, créez le répertoire suivant : mkdir /opt/vmware-vsphere-perl-sdk/

Depuis le site de VMware vous devez télécharger VMware vSphere SDK for Perl. Le téléchargement de ce composant nécessite un compte VMware.

– Installez la bibliothèque de développement d’OpenSSL : yum install openssl-devel
– Placez-vous dans le répertoire suivant : cd /usr/local/src/
– Décompressez l’archive : tar -xzvf VMware-vSphere-Perl-SDK-4.1.0-254719.x86_64.tar.gz
– Placez-vous dans le répertoire suivant : cd vmware-vsphere-cli-distrib
– Lancez l’installation de VMware vSphere SDK for Perl : ./vmware-install.pl

Avant de procéder à l’installation, vous devez  accepter la licence d’utilisation.

Indiquez l’emplacement des fichiers exécutables (/opt/vmware-vsphere-perl-sdk/bin/).

Installation de VMware

Pour désinstaller VMware vSphere SDK for Perl, il vous suffira de lancer la commande suivante : /opt/vmware-vsphere-perl-sdk/bin/vmware-uninstall-vSphere-CLI.pl.

Nous allons installer le module PERL Nagios::Plugin.

perl -MCPAN -e ‘shell’
cpan > install Nagios::Plugin
cpan > quit

Ensuite, nous allons récupérer le plugin Nagios check_esx3.pl depuis le site d’OP5.

– Placez-vous dans le répertoire suivant : cd /usr/local/src/
– Téléchargez le plugin Nagios : wget "http://git.op5.org/git/?p=nagios/op5plugins.git;a=blob_plain;f=check_esx3.pl" -O check_esx3.pl
– Copiez ce script dans le répertoire contenant les plugins Nagios : cp check_esx3.pl /usr/local/nagios/libexec/
– Rendez le script exécutable : chmod +x /usr/local/nagios/libexec/check_esx3.pl
– Modifiez le propriétaire pour ce script : chown nagios:nagios /usr/local/nagios/libexec/check_esx3.pl

Le plugin Nagios check_esx3.pl récupère les informations d’un serveur VMware ESX(i) en s’y connectant à l’aide d’un compte utilisateur. Nous allons créer un compte utilisateur supervision possédant les droits de lecture.

Connectez-vous au serveur VMware ESX(i) avec le client VMware vSphere.

Dans l’onglet Local Users & Groups, cliquez sur l’option Add du menu surgissant pour créer un nouvel utilisateur supervision avec un mot de passe associé.

Dans l’onglet Permissions, cliquez sur l’option Add Permission…. Dans la partie Users and Groups, cliquez sur le bouton Add pour ajouter l’utilisation supervision. Dans la partie Assigned Role, sélectionnez le rôle Read-only pour cet utilisateur.

L’installation est terminée. Voici quelques exemple d’utilisation du plugin Nagios check_esx3.pl.

– Placez-vous dans le répertoire suivant : cd /usr/local/nagios/libexec/
– Vérifiez l’utilisation du CPU de l’hyperviseur en pourcentage : ./check_esx3.pl -H xxx.xxx.xxx.xxx -u supervision -p MotDePasse -l cpu -s usage -w 80 -c 90

CHECK_ESX3.PL OK - cpu usage=1.24 % | cpu_usage=1.24%;80;90

– Vérifiez l’utilisation de la mémoire vive de l’hyperviseur  en Mo : ./check_esx3.pl -H xxx.xxx.xxx.xxx -u supervision -p MotDePasse -l mem -s usagemb -w 14336 -c 16384

CHECK_ESX3.PL OK - mem usage=6022.40 MB | mem_usagemb=6022.40MB;14336;16384

– Vérifiez l’état de l’hyperviseur : ./check_esx3.pl -H xxx.xxx.xxx.xxx -u supervision -p MotDePasse -l runtime -s status

CHECK_ESX3.PL OK - overall status=green

– Vérifiez que toutes les cartes réseaux de l’hyperviseur sont connectées : ./check_esx3.pl -H xxx.xxx.xxx.xxx  -u supervision -p MotDePasse -l net -s nic

CHECK_ESX3.PL OK - All 8 NICs are connected | OK_NICs=8;; Bad_NICs=0;;

Pour obtenir de l’aide sur ce plugin Nagios, il vous suffit de lancer la commande suivante : ./check_esx3.pl -h

Cette partie dépend de votre arborescence de configuration et de votre installation de Nagios. Nous allons modifier la configuration de Nagios pour superviser un serveur VMware ESX(i).

– Ajoutez deux nouvelles variables : vi /etc/nagios/resource.cfg

$USER2$=supervision
$USER3$=MotDePasse

Les variables USER2 et USER3 correspondent aux identifiants de l’utilisateur possédant les droits de lecture sur le serveur VMware ESX(i).

– Ajoutez les définitions des objets command : vi /etc/nagios/objects/commands.cfg

define command {
  command_name check_esx_cpu
  command_line $USER1$/check_esx3.pl -H $HOSTADDRESS$ -u $USER2$ -p $USER3$ -l cpu -s usage -w $ARG1$ -c $ARG2$
}

define command {
  command_name check_esx_memory
  command_line $USER1$/check_esx3.pl -H $HOSTADDRESS$ -u $USER2$ -p $USER3$ -l mem -s usagemb -w $ARG1$ -c $ARG2$
}

define command {
  command_name check_esx_swap
  command_line $USER1$/check_esx3.pl -H $HOSTADDRESS$ -u $USER2$ -p $USER3$ -l mem -s swap -w $ARG1$ -c $ARG2$
}

define command {
  command_name check_esx_network
  command_line $USER1$/check_esx3.pl -H $HOSTADDRESS$ -u $USER2$ -p $USER3$ -l net -s usage -w $ARG1$ -c $ARG2$
}

define command {
  command_name check_esx_disk_io_read
  command_line $USER1$/check_esx3.pl -H $HOSTADDRESS$ -u $USER2$ -p $USER3$ -l io -s read -w $ARG1$ -c $ARG2$
}

define command {
  command_name check_esx_disk_io_write
  command_line $USER1$/check_esx3.pl -H $HOSTADDRESS$ -u $USER2$ -p $USER3$ -l io -s write -w $ARG1$ -c $ARG2$
}

define command {
  command_name check_esx_nic
  command_line $USER1$/check_esx3.pl -H $HOSTADDRESS$ -u $USER2$ -p $USER3$ -l net -s nic
}

define command {
  command_name check_esx_service
  command_line $USER1$/check_esx3.pl -H $HOSTADDRESS$ -u $USER2$ -p $USER3$ -l service -s $ARG1$
}

– Ajoutez la définition de l’objet host pour le serveur : vi /etc/nagios/objects/hosts.cfg

define host {
  host_name server01
  use generic_host
  alias VMware ESXi
  address xxx.xxx.xxx.xxx
  contact_groups +admin
}

– Ajoutez la définition des objets service pour le serveur : vi /etc/nagios/objects/services.cfg

define service {
  host_name server01
  use generic_service
  service_description CPU
  check_command check_esx_cpu!80!90
  contact_groups +admin
}

define service {
  host_name server01
  use generic_service
  service_description Memoire
  check_command check_esx_memory!14336!16384
  contact_groups +admin
}

define service {
  host_name server01
  use generic_service
  service_description Trafic_Reseau
  check_command check_esx_network!5120!102400
  contact_groups +admin
}

define service {
  host_name server01
  use generic_service
  service_description Disque_IO_Lecture
  check_command check_esx_disk_io_read!50!90
  contact_groups +admin
}

define service {
  host_name server01
  use generic_service
  service_description Disque_IO_Ecriture
  check_command check_esx_disk_io_write!50!90
  contact_groups +admin
}

define service {
  host_name server01
  use generic_service
  service_description Interfaces_Reseaux
  check_command check_esx_nic
  contact_groups +admin
}

define service {
  host_name server01
  use generic_service
  service_description Services
  check_command check_esx_service!DCUI,lbtd,ntpd,vmware-vpxa
  contact_groups +admin
}

– Rechargez la configuration de Nagios : service nagios reload

Votre serveur VMWare ESX(i) est maintenant supervisé depuis Nagios.

Supervision du CPU d'un serveur VMware ESX

Supervision de la mémoire vive d'un serveur VMware ESX

Nagios : Installation et mise en oeuvre de Nagios 3

Dans cet article, nous allons installer étape par étape la version 3.2.0 de Nagios sur un système CentOS 5.3 (Linux).

Pour rappel, Nagios est une solution de supervision d’infrastructure réseau et applicatif sous licence GPL v2. Nagios est capable de contrôler l’état de fonctionnement des périphériques réseaux et de vous alerter en cas de panne ou de défaillance.

Tout d’abord, il vous faut comprendre que Nagios (Nagios Core) n’est en réalité qu’un ordonnanceur d’événement. Il s’occupe simplement de lancer des tâches à des instants précis.
Le bon fonctionnement des périphériques réseaux est effectué par d’autres programmes/scripts que l’on appelle couramment des plugins (ou greffons).
Nagios ordonne donc régulièrement l’exécution de plugins externes pour connaitre l’état d’un périphérique réseau.

Maintenant que vous avez compris cette distinction, nous pouvons procéder à son installation.

Dans cet article, nous allons installer étape par étape la version 3.2.0 de Nagios sur un système CentOS 5.3 (Linux).

Pour rappel, Nagios est une solution de supervision d’infrastructure réseau et applicatif sous licence GPL v2. Nagios est capable de contrôler l’état de fonctionnement des périphériques réseaux et de vous alerter en cas de panne ou de défaillance.

nagios_install_1

Tout d’abord, il vous faut comprendre que Nagios (Nagios Core) n’est en réalité qu’un ordonnanceur d’événement. Il s’occupe simplement de lancer des tâches à des instants précis.
Le bon fonctionnement des périphériques réseaux est effectué par d’autres programmes/scripts que l’on appelle couramment des plugins (ou greffons). Nagios ordonne donc régulièrement l’exécution de plugins externes pour connaitre l’état d’un périphérique réseau.

Maintenant que vous avez compris cette distinction, nous pouvons procéder à son installation. Toutes les actions que nous allons effectuer dans la suite de cet article s’effectue en tant qu’utilisateur root.

Dans un premier temps, vous devez bien entendu préparer le serveur destiné à accueillir Nagios (mise à jour, configuration réseau, désactivation de SELinux, synchronisation de l’horloge système, configuration de Sendmail pour recevoir les alertes, …).

Nagios dispose d’une interface Web pour afficher l’état des périphériques réseaux. Il est donc indispensable d’installer un serveur Web. La documentation officielle conseille l’utilisation de Apache/HTTPD. Sachez toutefois que vous pouvez très bien utiliser un autre serveur Web comme LighHTTPD.

– Installez le serveur Web (Apache/HTTPD) : yum install httpd
– Lancez le serveur Web au démarrage de la machine : chkconfig httpd on

Depuis la version 3.1.0 de Nagios, PHP est devenu en pré-requis. Mais, ne vous y trompez pas, les pages Web de l’interface de Nagios sont encore des pages en CGI. Seul quelques pages comme la page d’index sont pour l’instant en PHP.

– Installez PHP : yum install php

Si vous possédez un pare-feu d’installer sur votre système, vous devez autoriser le port TCP 80 en entrée.

– Éditez le fichier contenant les règles appliquées par le pare-feu : vi /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

– Redémarrez le parfe-feu : service iptables restart
– Lancez immédiatement le serveur Web : service httpd start

Pour vérifiez que votre serveur Web fonctionne correctement, il vous suffit simplement d’utiliser un navigateur Web et d’entrer l’adresse IP de votre serveur comme URL.

nagios_install_2

Autre pré-requis indispensable si vous souhaitez afficher la carte des hôtes (statusmap.cgi) et les différents histogrammes (histogram.cgi et trends.cgi), est la bibliothèque graphique GD.

– Installez la bibliothèque GD et ces bibliothèques de développement : yum install gd gd-devel

Nagios étant écrit en langage C, il est obligatoire de disposer d’un compilateur C sur votre système pour pourvoir compiler et installer Nagios. La bibliothèque C (glibc) et ses utilitaires (glibc-common) devraient probablement être déjà installer sur votre système.

– Installez un compilateur C : yum install gcc

Passons à présent dans le vif du sujet, à savoir l’installation et la mise en œuvre de Nagios. Pour commencer, nous allons créer un utilisateur spécifique pour le service Nagios.

– Créez un groupe et un utilisateur pour Nagios : groupadd nagios et useradd -g nagios -d /usr/local/nagios -M -s /bin/bash nagios
– Verrouillez ce compte utilisateur : passwd -l nagios

Nous allons créer un autre utilisateur spécifique pour le fichier de commandes externe (nagios.cmd).

– Créez le groupe suivant : groupadd nagcmd
– Ajoutez l’utilisateur nagios dans le groupe nagcmd : usermod -a -G nagcmd nagios
– Ajoutez l’utilisateur apache dans le groupe nagcmd (l’utilisateur apache a été créé lors de l’installation du serveur Web) : usermod -a -G nagcmd apache

– Placez-vous dans le répertoire suivant : cd /usr/local/src/

Vous devez récupérer la dernière version de Nagios Core (dans notre cas, cela correspond à la version 3.2.0) sur le site officiel de Nagios à l’aide du gestionnaire de téléchargement wget : wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.0.tar.gz

– Décompressez l’archive que vous venez de récupérer : tar -xzf nagios-3.2.0.tar.gz
– Placez-vous dans le répertoire décompressé contenant les sources de Nagios Core : cd nagios-3.2.0

L’installation de Nagios dépend bien entendu de vos besoins et de votre utilisation quotidienne. Si vous n’avez pas l’intention d’utiliser des plugins PERL, il n’y a donc pas besoin d’embarquer l’interpréteur PERL (–enable-embedded-perl). Même chose pour le module de courtage d’événements (–enable-event-broker).
Nous souhaitons que l’interface Web de Nagios soit directement accessible depuis l’URL http://xxxxxx/ (par défaut, http://xxxxxx/nagios/).

– Obtenir des informations sur les paramètres de configuration : ./configure –help
– Configurez : ./configure –prefix=/usr/local/nagios –sysconfdir=/etc/nagios –localstatedir=/var/nagios –with-nagios-user=nagios –with-nagios-grp=nagios –with-command-user=nagios –with-command-group=nagcmd –with-gd-lib=/usr/local/lib –with-gd-inc=/usr/local/include –with-cgiurl=/cgi-bin –with-htmurl=/ –with-mail=/bin/mail –with-httpd-conf=/etc/httpd/conf.d –enable-nanosleep –enable-event-broker –enable-embedded-perl –with-perlcache
– Compilez les sources de Nagios Core : make all
– Installez les fichiers de Nagios Core dans le répertoire /usr/local/nagios/ : make install
– Installez le script de lancement nagios dans le répertoire /etc/init.d/ : make install-init
– Installez les fichiers de configuration dans le répertoire /etc/nagios/ : make install-config
– Installez le fichier de commande externe avec les droits adéquates : make install-commandmode
– Installez le fichier de configuration de restriction d’accès à l’interface Web de Nagios dans le répertoire /etc/httpd/conf.d/ : make install-webconf

nagios_install_3

Il est nécessaire dans notre cas d’effectuer quelques modifications dans le fichier de configuration d’Apache.

– Éditez le fichier de configuration d’Apache/HTTPD et mettez en commentaire ces lignes : vi /etc/httpd/conf/httpd.conf

#Alias /icons/ "/var/www/icons/"

#<Directory "/var/www/icons">
#    Options Indexes MultiViews
#    AllowOverride None
#    Order allow,deny
#    Allow from all
#</Directory>

#ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

#<Directory "/var/www/cgi-bin">
#    AllowOverride None
#    Options None
#    Order allow,deny
#    Allow from all
#</Directory>

#Alias /error/ "/var/www/error/"

#<IfModule mod_negotiation.c>
#<IfModule mod_include.c>
#    <Directory "/var/www/error">
#        AllowOverride None
#        Options IncludesNoExec
#        AddOutputFilter Includes html
#        AddHandler type-map var
#        Order allow,deny
#        Allow from all
#        LanguagePriority en es de fr
#        ForceLanguagePriority Prefer Fallback
#    </Directory>
#</IfModule>
#</IfModule>

– Éditez ce fichier pour ajouter une barre oblique : vi /etc/httpd/conf.d/nagios.conf

Alias / "/usr/local/nagios/share/"

Par défaut, le nom de l’utilisateur utilisé dans le fichier /etc/nagios/cgi.cfg, possédant tous les droits dans l’interface Web, porte le nom de nagiosadmin.

– Créez un mot de passe pour l’utilisateur nagiosadmin à l’aide de l’utilitaire HTPASSWD fournit avec Apache/HTTPD : htpasswd -c /etc/nagios/htpasswd.users nagiosadmin

– Redémarrez le serveur Web pour prendre en compte le fichier de configuration /etc/httpd/conf.d/nagios.conf : service httpd restart

– Éditez le fichier de configuration de Nagios pour modifier le format de la date : vi /etc/nagios/nagios.cfg

date_format=euro

Passons à l’installation des plugins Nagios (vous savez ces programmes externes qui contrôle l’état de vos périphériques réseaux …).

– Placez-vous dans le répertoire suivant : cd /usr/local/src/

Vous devez récupérer la dernière version des plugins Nagios, (dans notre cas, cela correspond à la version 1.4.14) à l’aide du gestionnaire de téléchargement wget : wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.14.tar.gz

– Décompressez l’archive que vous venez de récupérer : tar -xzf nagios-plugins-1.4.14.tar.gz

– Installez la bibliothèque de développement de NET-SNMP et ces utilitaires (snmget, snmpwalk, …) : yum install net-snmp-devel net-snmp-utils

FPING permet d’effectuer en parallèle plusieurs requêtes echo en utilisant le protocole ICMP. Son utilisation s’avère intéressante.

– Téléchargez la dernière version de FPING : wget http://fping.sourceforge.net/download/fping.tar.gz
– Décompressez l’archive que vous venez de récupérer : tar -xzf fping.tar.gz
– Placez-vous dans le répertoire suivant : cd fping-2.4b2_to
– Configurez les sources de FPING : ./configure
– Compilez les sources de FPING : make
– Installez FPING : make install

FPING nécessite les droits root pour s’exécuter et accomplir ses tâches.

– Allouez temporairement les droits root durant l’exécution du programme (droit SUID) : chmod u+s /usr/local/sbin/fping

Si vous avez besoin des plugins check_ldap, check_mysql et check_pgsql, vous devez installer les bibliothèques de développement d’OpenLDAP, MySQL et PostgreSQL à l’aide de l’utilitaire YUM.

– Placez-vous dans le répertoire décompressé contenant les sources des plugins Nagios : cd nagios-plugins-1.4.14
– Configurez les sources des plugins Nagios : ./configure –prefix=/usr/local/nagios –with-nagios-user=nagios –with-nagios-group=nagios –with-cgiurl=/cgi-bin
– Compilez : make
– Installez : make install

nagios_install_4

Les plugins Nagios seront installés dans le répertoire /usr/local/nagios/libexec/. Le fichier de configuration /etc/nagios/resource.cfg contient une variable spécifique $USER1$. Cette variable indique l’emplacement des plugins Nagios.

Il reste à modifier la configuration de Nagios pour utiliser FPING à la place de la commande ping habituelle.

– Éditez le fichier de configuration contenant la définition des commandes Nagios : vi /etc/nagios/objects/commands.cfg

# 'check-host-alive' command definition
define command{
command_name    check-host-alive
command_line    $USER1$/check_fping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -n 5
}

– Vérifiez rapidement si vous avez des erreurs dans vos fichiers de configuration : service nagios checkconfig
– En cas d’erreur, vous pouvez vérifier plus en détails pour corriger les éventuelles erreurs : /usr/local/nagios/bin/nagios -v /etc/nagios/nagios.cfg
– Lancez Nagios au démarrage du serveur : chkconfig nagios on
– Lancez le service Nagios : service nagios start ou directement : /usr/local/nagios/bin/nagios -d /etc/nagios/nagios.cfg

Avec un navigateur Web, vous pouvez accéder à l’interface Web de Nagios (http://xxxxxx/) avec l’utilisateur nagiosadmin et le mot de passe que vous avez entré précédemment.

nagios_install_5

Il ne vous reste plus qu’à définir les différents périphériques réseaux et services que vous souhaitez superviser pour être alerter de leurs états.

Et si  l’interface Web de Nagios n’est pas à votre goût, vous pouvez toujours utiliser le skin Vautour Style.