VMWARE – ESXi / ESX 4 — Monitoring via Munin

avr 26, 2010 Posted Under: Virtualisation, Vmware - ESX


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.

Leave a Reply