NAGIOS – Supervision Vmware

Supervision VMware

Aujourd’hui, la virtualisation est l’une des technologies les plus utilisées dans les entreprises pour gérer les infrastructures IT. En installant un hyperviseur sur un seul serveur physique, vous pouvez faire tourner simultanément plusieurs machines virtuelles avec différents systèmes d’exploitation. Cette technologie permet à l’entreprise d’utiliser le parc de serveurs de manière plus optimale et plus flexible. En effet, la virtualisation permet de faire évoluer votre environnement en utilisant la capacité maximale d’un parc de serveurs. Pour un administrateur, héberger une nouvelle application sur une machine virtuelle est mieux qu’investir dans un nouveau serveur physique. Avec la virtualisation, vous pouvez vous échapper de la dépendance vis-à-vis du matériel tout en garantissant l’environnement nécessaire pour la haute disponibilité.

Il existe des technologies multiples libres et commerciales pour passer vers la virtualisation des serveurs physiques. VMware (www.vmware.com) est l’un des leaders sur le marché de la virtualisation. Pour cette raison, il existe plusieurs solutions et outils pour superviser et contrôler les composants logiciels d’une infrastructure basée sur la technologie VMware. Nagios est l’un des outils pertinents à la surveillance de VMware. Dans cette partie, nous allons présenter les méthodes nécessaires pour intégrer la surveillance de l’hyperviseur VMware ESXi et d’une machine virtuelle dans un environnement Nagios.

Il existe plusieurs plugins pour contrôler VMware ESX, ESXi, vSphere et le serveur vCenter et des machines virtuelles individuelles avec Nagios, mais il est vivement recommandé d’utiliser le plugin check_vmware_api.pl développé par l’entreprise OP5 et qui est disponible en version open source.

1. Installation VMware SDK

Avant de configurer Nagios pour utiliser le plugin check_vmware_api.pl, il nous faut installer vSphere SDK for Perl de VMware sur le serveur Nagios. Le binaire vSphere SDK for Perl de VMware est disponible sur le site web officiel https://developercenter.vmware.com/web/sdk/55/vsphere-perl. Il vous faudra un compte chez VMware pour récupérer ce SDK. Téléchargez le fichier SDK en utilisant un navigateur web graphique qui vous permet d’accepter les termes et de transférer vers le serveur Nagios via SFTP. Vous pouvez utiliser WINSCP, Filezilla ou un autre programme de transfert souhaité. Il ne faut pas oublier de télécharger le SDK approprié à votre architecture (32 bits ou 64 bits).

Avant de lancer la commande pour installer le SDK, nous allons télécharger et installer plusieurs logiciels indispensables pour le fonctionnement de SDK.

Lancez la commande ci-dessous pour installer les prérequis sur un serveur Linux Debian/Ubuntu :

apt-get install build-essential gcc uuid uuid-dev perl libssl-dev perl-doc
liburi-perl libxml-libxml-perl libcrypt-ssleay-perl libnagios-plugin-perl

Lancez la commande ci-dessous pour installer les prérequis sur un serveur Linux CentOS/Red Hat :

yum -y install openssl-devel perl-Archive-Zip perl-Class-MethodMaker uuid-perl 
perl-SOAP-Lite perl-XML-SAX perl-XML-NamespaceSupport perl-XML-LibXML perl- 
MIME-Lite perl-MIME-Types perl-MailTools perl-TimeDate uuid libuuid perl-Data-Dump  
perl-UUID cpan libxml2-devel perl-Nagios-Plugin

Après avoir préparé le serveur Nagios, nous allons maintenant installer le SDK VMware correspondant à notre version de Vsphere 5.5. Décompressez le fichier SDK à l’aide de la commande suivante :

tar zxvf VMware-vSphere-Perl-SDK-5.5.0-1384587.x86_64.tar.gz

Cela a pour effet de créer un répertoire nommé vmware-vsphere-cli-distrib, dans lequel nous trouvons le script d’installation vmware-install.pl. Maintenant il ne reste qu’à exécuter ce script.

cd vmware-vsphere-cli-distrib/ 
./vmware-install.pl

Un message s’affiche sur le terminal pour valider la licence :

  Creating a new vSphere CLI installer database using the tar4 format. 
  Installing vSphere CLI 
  Installing version 254719 of vSphere CLI 
  You must read and accept the vSphere CLI end User Licence agreement to continue. 
  Press enter to display it. 
  .......................... 
  Do you accept? (yes/no)

Répondez par « yes » et tapez la touche [Entrée].

In which directory do you want to install the executable files? [/usr/bin]

Appuyez sur la touche [Entrée] pour valider le répertoire proposé par défaut /usr/bin.

À ce stade, l’installation du SDK est terminée. Vous ne devez avoir aucun message d’erreur. Dans le cas contraire, vérifiez que les logiciels prérequis sont bien installés.

2. Installation du plugin check_vmware_api.pl

Le plugin check_vmware_api.pl est disponible sur NagiosExchange : http://exchange.nagios.org/directory/Plugins/Operating-Systems/*-Virtual-Environments/VMWare/check_vmware_api/details. Téléchargez ce script, enregistrez-le dans le répertoire des plugins /usr/local/nagios/libexec et appliquez les droits nécessaires pour son exécution.

chmod a+x check_vmware_api.pl 
chown nagios:nagios check_vmware_api.pl

Ce plugin nécessite un compte d’utilisateur sur le serveur ESX et vCenter pour qu’il puisse se connecter et récupérer les informations de supervision. Nous allons créer cet utilisateur avec un mot de passe en lecture seule.

images/07EP04.PNG

Un utilisateur nagios a été créé sur le serveur ESX. Maintenant il ne reste qu’à lui donner les droits en lecture seule.

images/07EP05.PNG

Avant de passer à la partie de configuration, il est nécessaire de tester la communication entre le serveur Nagios et le serveur ESXi en utilisant le plugin check_vmware_api.pl.

check_vmware_api.pl -H <IP ESXi> -u nagios -p password -l runtime -s status

Si tout fonctionne bien, vous obtenez le résultat suivant :

 "CHECK_ESXI OK - overall status=green".

Il est vivement recommandé d’enregistrer le nom d’utilisateur et le mot de passe dans le fichier /usr/local/nagios/etc/resource.cfg.

vi /usr/local/nagios/etc/resource.cfg 
# $USER2$=nagios 
# $USER3$=password

Maintenant notre serveur Nagios est prêt à contrôler le serveur ESX et les machines virtuelles hébergées sur ce serveur.

3. Contrôle d’un serveur VMware ESXi

Le plugin check_vmware_api.pl possède plusieurs options pour contrôler un serveur ESXi à partir de Nagios. D’une manière générale, la syntaxe de ce plugin est la suivante :

check_vmware_api.pl -D <data_center> | -H <host_name> [ -C <cluster_name> ] 
                     [ -N <vm_name> ]     -u <user> -p <pass> | -f <authfile> 
                     -l <command> [ -s <subcommand> ] 
                     [ -T <timeshift> ] [ -i <interval> ]     
                     [ -x <black_list> ] [ -o <additional_options> ]    
                     [ -t <timeout> ] [ -w <warn_range> ] [ -c <crit_range> ] 
                     [ -V ] [ -h ]

Voyons la signification de chaque option disponible avec le plugin check_vmware_api.pl :

  • -H, –host : cette option spécifie l’adresse IP ou nom DNS de serveur ESX ou ESX à superviser.

  • -D, –datacenter : cette option spécifie l’adresse IP ou nom DNS du datacenter à superviser.

  • -C, –cluster : cette option spécifie le nom de Cluster ESX ou ESXi à superviser.

  • -N, –name : cette option spécifie le nom de la machine virtuelle à superviser.

  • -u, –username : cette option spécifie le nom d’utilisateur pour se connecter.

  • -p, –password : cette option spécifie le mot de passe du nom d’utilisateur.

  • -f, –authfile : cette option spécifie le chemin vers le fichier d’authentification syntaxe du fichier :

  • username = <login>

  • password = <mot de passe>

  • -l, –command : cette option spécifie le type de la commande à utiliser (CPU, MEM, NET, IO, VMFS, RUNTIME…).

  • -s, –subcommand : cette option spécifie la sous-commande à utiliser (usage, ready, read, write, active, …).

  • -o, –options : cette option spécifie les options de commande supplémentaires (quickstats, …)

  • -T, –timestamp : cette option spécifie la période de temps en secondes pour résoudre les problèmes avec “Unknownerror”. Il faut utiliser des valeurs comme 5, 10, 15, etc.

  • -x, –exclude : cette option spécifie la liste noire (VM, VMFS, Adaptateurs, LUN…) à exclure dans le contrôle.

  • -i, –interval : cette option spécifie la période d’échantillonnage en secondes.

  • -t, –timeout : cette option spécifie la période en secondes avant le plugin timeout. La valeur par défaut est 30.

  • -w, –warning : cette option spécifie la valeur pour le seuil d’avertissement.

  • -c, –critical : cette option spécifie la valeur pour le seuil critique.

  • -h, –help : cette option permet d’afficher l’écran détaillé d’aide.

  • -V, –version : cette option permet d’afficher les informations sur la version de plugin.

Voici quelques exemples de commandes et sous-commandes à utiliser avec le plugin check_vmware_api.pl pour superviser un hôte ESXi :

  • cpu : afficher des informations sur l’utilisation du CPU.

  • usage : afficher le CPU utilisé en pourcentage.

  • usagemhz : afficher le CPU en MHz.

  • mem : afficher des informations sur l’utilisation de la mémoire.

  • usage : afficher la mémoire utilisée en pourcentage.

  • usagemb : afficher la mémoire utilisée en MB.

  • swap : afficher la mémoire Swap utilisée en MB.

  • net : afficher des informations sur l’utilisation réseau.

  • usage : afficher l’utilisation du réseau global de KBps.

  • receive : afficher le volume de données reçu en KBps.

  • send : afficher le volume de données envoyé en KBps.

  • nic : afficher les états des cartes réseau.

  • io : afficher des informations sur le disque IO.

  • read : afficher la latence de l’opération lecture depuis le disque en ms.

  • write : afficher la latence de l’opération écriture sur le disque en ms.

  • queue : afficher latence de file d’attente en ms.

  • runtime :

  • con : afficher les états des connexions.

  • health : afficher les états du CPU, stockage, mémoire et les captures.

  • maintenance : indiquer si l’hôte est en mode maintenance.

  • list : afficher la liste des machines virtuelles hébergées sur l’hôte et leurs états.

  • status : afficher état global de l’hôte (gris/vert/rouge/jaune).

  • temperature : afficher la température de l’hôte.

  • storagehealth : afficher l’état de stockage.

Voici quelques exemples d’utilisation du plugin check_vmware_api.pl pour contrôler un serveur ESXi :

  • Contrôle de la mémoire utilisée :

./check_vmware_api.pl -H 192.168.1.7 -u nagios -p password -l mem -s usage -w 70 -c 80 
 
CHECK_VMWARE_API.PL OK - mem usage=40.77 % | mem_usage=40.77%;70;80
  • Contrôle du CPU utilisée :

./check_vmware_api.pl -H 192.168.1.7 -u nagios -p password -l CPU -s usage -w 70 -c 80 
 
CHECK_VMWARE_API.PL OK - cpu usage=24.15 % | cpu_usage=24.15%;70;80
  • Contrôle du réseau :

./check_vmware_api.pl -H 192.168.1.7 -u nagios -p password -l net 
 
CHECK_VMWARE_API.PL OK - net receive=4571.00 KBps, send=4193.00 KBps, all 6 
NICs are connected | net_receive=4571.00KBps;; net_send=4193.00KBps;; OK_NICs=6;;
Bad_NICs=0;;
  • Contrôle de l’état global de l’hôte :

 ./check_vmware_api.pl -H 192.168.1.7 -u nagios -p password -l runtime -s status  
 
CHECK_VMWARE_API.PL OK - overall status=green

Pour transformer ces appels en commandes et services sur Nagios, nous allons créer deux commandes : la première commande check_esxi servira à récupérer les informations sur les états des services. La deuxième commande check_esxi_seuil utilise des valeurs seuils CRITICAL et WARNING.

Commande sans spécification des seuils :

define command{ 
   command_name        check_esxi 
   command_line        $USER1$/check_vmware_api.pl -H $HOSTADDRESS$ -u 
$USER2$ -p $USER3$  -l $ARG1$ -s $ARG2$  
}

Commande avec spécification des seuils :

define command{ 
   command_name         check_esxi_seuil 
   command_line         $USER1$/check_vmware_api.pl -H $HOSTADDRESS$ --u 
 $USER2$ -p $USER3$  -l $ARG1$ -s $ARG2$   -w $ARG3$ -c $ARG4$ 
 }

Ces deux commandes génériques nous permettent de créer plusieurs services pour contrôler l’hôte esxi01 que l’on créera par la suite.

# Hôte ESXI-01 
define host{ 
    use                        vmware-server 
    host_name                  esxi01 
    alias                      VMWare ESXi 01 
    address                    92.168.1.7 
}

Un service pour tester la disponibilité de l’hôte :

define service{ 
    use                         generic-service 
    host_name                   esxi01 
    service_description         PING 
    check_command               check_ping!100.0,20%!500.0,60% 
}

Un service pour contrôler la charge CPU de l’hôte :

define service{ 
    use                      generic-service 
    host_name                esxi01 
    service_description      ESXi CPU Load 
    check_command            check_esxi_seuil!CPU!usage!80!90! 
}

Un service pour contrôler la mémoire utilisée de l’hôte :

define service{ 
    use                      generic-service 
    host_name                esxi01 
    service_description      ESXi Memory Usage 
    check_command            check_esxi_seuil!mem!usage!80!90! 
} 

Un service pour contrôler le trafic réseau :

define service{ 
    use                      generic-service 
    host_name                esxi01 
    service_description      ESXi Network Usage 
    check_command            check_esxi!net!usage! 
} 

Un service pour contrôler l’état global de l’hôte :

define service{ 
    use                      generic-service 
    host_name                esxi01 
    service_description      ESXi Runtime Status 
    check_command            check_esxi!runtime!status! 
}

Un service pour contrôler la lecture sur le disque de l’hôte :

define service{ 
    use                       generic-service 
    host_name                 esxi01 
    service_description       ESXi IO Read 
    check_command             check_esxi_seuil!IO!read!40!90! 
}

Un service pour contrôler l’écriture sur le disque de l’hôte :

define service{ 
    use                        generic-service 
    host_name                  esxi01 
    service_description        ESXi IO Write 
    check_command              check_esxi_seuil!IO!write!40!90! 
  }

Voilà, c’est terminé. Il suffit de redémarrer le service Nagios et de patienter quelques instants pour voir les informations sur votre serveur VMware ESXi.

4. Contrôle d’une machine virtuelle VMware

Nous allons utiliser le même plugin check_vmware_api.pl pour contrôler une machine virtuelle hébergée sur une infrastructure VMware. Les options utilisées pour contrôler un serveur ESXi sont valables aussi pour superviser une machine virtuelle. Il suffit d’ajouter le nom de la machine virtuelle dans la commande. Voici quelques exemples d’utilisation du plugin check_vmware_api.pl pour contrôler une machine virtuelle nommée VM-Client et hébergée sur le serveur ESXi 192.168.1.7:

  • Contrôle de la mémoire utilisée :

./check_vmware_api.pl -H 192.168.1.7-N VM-Client -u nagios -p password -l mem -s usage
-w 70 -c 80 
 
CHECK_VMWARE_API.PL OK - "VM-Client" - mem usage=40.77 % | 
mem_usage=40.77%;70;80
  • Contrôle du CPU utilisée :

./check_vmware_api.pl -H 192.168.1.7 -N VM-Client -u nagios -p password -l CPU -s usage
-w 70 -c 80 
 
CHECK_VMWARE_API.PL OK - "VM-Client" - cpu usage=24.15 % | 
cpu_usage=24.15%;70;80
  • Contrôle du réseau :

./check_vmware_api.pl -H 192.168.1.7 -N VM-Client -u nagios -p password -l net 
CHECK_VMWARE_API.PL OK - "VM-Client" - net receive=4571.00 KBps, send=4193.00 
KBps, all 6 NICs are connected | net_receive=4571.00KBps;; net_send=4193.00KBps;;
OK_NICs=6;; Bad_NICs=0;;
  • Contrôle de l’état global de l’hôte :

 ./check_vmware_api.pl -H 192.168.1.7 -N VM-Client -u nagios -p password -l runtime -s
status  
 
CHECK_VMWARE_API.PL OK - "VM-Client" - overall status=green

Maintenant, nous allons créer deux commandes à partir de ces appels : la première commande check_vm servira à récupérer les informations sur les états des services de la machine virtuelle. La deuxième commande check_vm _seuil utilise des valeurs seuils CRITICAL et WARNING.

Commande sans spécification des seuils :

define command{ 
   command_name         check_vm 
   command_line         $USER1$/check_vmware_api.pl -H $HOSTADDRESS$ -N 
 $ARG1$  -u $USER2$ -p $USER3$  -l $ARG2$ -s $ARG3$  
}

Commande avec spécification des seuils :

define command{ 
   command_name         check_vm_seuil 
   command_line         $USER1$/check_vmware_api.pl -H $HOSTADDRESS$ -N 
 $ARG1$  --u $USER2$ -p $USER3$  -l $ARG2$ -s $ARG3$   -w $ARG4$ -c $ARG5$

Ces deux commandes génériques nous permettent de créer plusieurs services pour contrôler la machine VM-Client hébergée sur l’hôte esxi01 :

Un service pour contrôler la charge CPU de la machine virtuelle :

define service{ 
    use                    generic-service 
    host_name              esxi01 
    service_description    VM-Client CPU Load 
    check_command          check_vm_seuil!VM-Client!CPU!usage!80!90! 
}

Un service pour contrôler la charge CPU de la machine virtuelle :

define service{ 
    use                    generic-service 
    host_name              esxi01 
    service_description    VM-Client Memory Usage 
    check_command          check_vm_seuil!VM-Client!mem!usage!80!90! 
}

Un service pour contrôler le trafic réseau sur la machine virtuelle :

define service{ 
    use                    generic-service 
    host_name              esxi01 
    service_description    VM-Client Network Usage 
    check_command          check_vm!VM-Client!net!usage! 
}

Un service pour contrôler l’état global de la machine virtuelle :

define service{ 
    use                     generic-service 
    host_name               esxi01 
    service_description     VM-Client Runtime Status 
    check_command           check_vm!VM-Client!runtime!status! 
}

Un service pour contrôler la lecture sur le disque de la machine virtuelle :

define service{ 
    use                    generic-service 
    host_name              esxi01 
    service_description    VM-Client IO Read 
    check_command          check_vm_seuil!VM-Client!IO!read!40!90! 
}

Un service pour contrôler l’écriture sur le disque de la machine virtuelle :

define service{ 
    use                    generic-service 
    host_name              esxi01 
    service_description    VM-Client IO Write 
    check_command          check_vm_seuil!VM-Client!IO!write!40!90! 
}

Et voilà pour la configuration, il ne reste qu’à redémarrer le service Nagios pour qu’il prenne en compte la nouvelle configuration.