VMWARE – ESXi / ESX 4 — Monitoring via Munin
Comme vous avez pu le constater, j’utilise énormément MUNIN pour le monitoring de mes systèmes.
Ayant de plus en plus de système virtualisé, je me suis donc empressé de faire un petit plugin munin permettant de superviser le CPU et RAM de mes ESXi. En effet, VirtualCenter Server fait cela très bien, mais je trouve l’interface un peu lourde, alors qu’une page sur un navigateur comprenant tous les graphs de vos hyperviseurs c’est plus simple d’accès.
Ce script sera implémenté dans une installation de MUNIN déjà existante. je ne vais pas revenir sur ces étapes qui sont détaillées dans un de mes précédents POST.
POST ACTIONS
Installation des Pré-requis
Nous allons commencer par installer les paquets pré-requis pour utiliser des scripts Perl couplés aux librairies Vmware (VmwarePerlToolKit).
# apt-get install libxml-libxml-common-perl libxml-libxml-perl libclass-methodmaker-perl libcrypt-ssleay-perl
Récupération des sources sur le site de vmware
Téléchargement des VIPerlToolKit
# tar xvzf VMware-vSphere-SDK-for-Perl-4.0.0-161974.i386.tar.gz # cd vmware-vsphere-cli-distrib/ # ll # ./vmware-install.pl
Plugins pour le monitoring CPU/RAM d’un ESXi ou ESX
Nous allons créer le plugin, pour ce faire vous allez créer le fichier suivant : /usr/share/munin/plugins/esxi_
et y insérer le code ci-dessous :
#!/usr/bin/perl -w
use strict;
use warnings;
use lib "/usr/lib/vmware-vcli/apps/";
use VMware::VIRuntime;
use VMware::VILib;
use AppUtil::VMUtil;
use AppUtil::HostUtil;
my $codeRetour = 0;
my $hostIP = $0;
$hostIP =~ s/esxi_//;
$hostIP =~ s/^\/etc\/munin\/plugins\///;
my $username = Opts::set_option ('username',"root");
my $password = Opts::set_option ('password'," ");
my $test= Opts::set_option ('url',"https://$hostIP/sdk/webService");
my $critical = 90;
my $warning = 70;
if ( exists $ARGV[0] and $ARGV[0] eq "config" ) {
# Affichage de la configuration
print "graph_title ESXi : ".$hostIP." \n";
print "graph_args --base 1000 -l 0 \n";
print "graph_vlabel % \n";
print "graph_category ESXi \n";
print "graph_scale no \n";
print "mem.label MEM used \n";
print "mem.draw AREA \n";
print "mem.colour CC7700 \n";
print "cpu.label CPU used \n";
print "cpu.colour 000000 \n";
# print "cpu.draw LINE2 \n";
# print "cpu.draw AREA \n";
} else {
## Connexion au HOST
Util::connect();
get_host_cpu_info();
get_host_mem_info();
## Deconnexion au HOST
Util::disconnect();
}
exit $codeRetour;
sub get_host_mem_info {
my %filter;
$filter{'summary.config.vmotionEnabled'} = 'false';
$filter{'runtime.inMaintenanceMode'} = 'false';
$filter{'name'} = Opts::get_option ('host');
my $host_views = HostUtils::get_hosts('HostSystem',
);
if ($host_views) {
foreach (@$host_views) {
my $host_view = $_;
my $PercentMemoryUsed = $host_view->summary->quickStats->overallMemoryUsage * 1024 * 1024 * 100 / $host_view->hardware->memorySize;
printf "mem.value %.0f\n",$PercentMemoryUsed;
}
}
}
sub get_host_cpu_info {
my %filter;
$filter{'summary.config.vmotionEnabled'} = 'false';
$filter{'runtime.inMaintenanceMode'} = 'false';
$filter{'name'} = Opts::get_option ('host');
my $host_views = HostUtils::get_hosts('HostSystem'
);
if ($host_views) {
foreach (@$host_views) {
my $host_view = $_;
my $percentCpuUsed = $host_view->summary->quickStats->overallCpuUsage * 100000000/ ($host_view->hardware->cpuInfo->hz * $host_view->hardware->cpuInfo->numCpuCores);
printf "cpu.value %.0f\n",$percentCpuUsed;
if ( $percentCpuUsed > $critical ) {
$codeRetour = 2;
} elsif ( $percentCpuUsed > $warning && $codeRetour eq '0' ) {
$codeRetour = 1;
}
}
}
}
Mise en place du plugin
# cd /etc/munin/plugins/
# ln -s /usr/share/munin/plugins/esxi_ /etc/munin/plugins/esxi_${IPHOST}
Ajout des autorisations nécessaires pour que munin puisse lancer le script
# vi /etc/munin/plugin-conf.d/munin-node - [esx*] user root
Il ne reste plus qu’à redémarrer le service munin-node afin de prendre en compte le plugin.
# /etc/init.d/munin-node restart
Vous devriez obtenir un résultat comme ci-dessous.
Note : ce plugin est aussi bien compatible avec les ESXi qu’avec les ESX.