Monitoring de cluster VMware dans cacti

MAJ 03/07/2012 : Un nouveau plugin est disponible

Chez nous, à Hypervisor.fr, cacti c’est une grande passion ! Il y a presque 3 ans, quelques mois après la GA d’ESXi 3.5 (aka ESX 3i), nous avions publié un template cacti basé sur le fameux script check_esx3. Il permettait à l’époque de s’affranchir de SNMP, grand absent d’ESX 3i. Malheureusement ce script est très coûteux en ressources cpu et pouvait faire augmenter significativement le temps de polling de cacti si vous aviez de nombreux check à effectuer.

Il y a peu de temps, nous avons découvert check_vmware, une alternative (utilisable avec NAGIOS et MRTG) nettement plus efficace, developée par Steve Shipway. Cela nous a permis de finaliser notre template de monitoring de cluster et de dépoussiérer notre vieux template d’ESX.

Pour les utiliser, il vous faudra bien évidement le package vSphere SDK for Perl (aka vi perl toolkit), le script check_vmware.pl placé dans le répertoire ”scripts” de cacti, des scripts fournis dans notre package placés dans le même répertoire et du template xml à importer dans cacti. Le chemin d’accès au répertoire “scripts” est “/var/www/cacti/scripts” mais peut être changé dans les scripts.

Voici le rendu du template de cluster, suivit du lien pour le télécharger (gratuitement & légalement, vous n’aurez par de problème avec l’HADOPI) :

vi_cluster package

Et voici le rendu du template host, suivit du lien pour le télécharger :

vi_host package

Happy monitoring !

Tags: , , ,

71 Responses to “Monitoring de cluster VMware dans cacti”

  1. Hello,

    Vous indiquez que check_esx de op5 est couteux en ressources CPU, mais une des premières lignes qu’on peut lire dans check_vmware est :

    It can be somewhat resource intensive. (en gras)

    Vous avez fait des tests entre les deux scripts pour comparer les ressources utilisées ? Je suis très intéressé :)

  2. Alors en fait j’étais parti pour vous faire tout un roman pour décrire la situation mais l’idéal, comme toujours, c’est une image. Voici la courbe de polling time de cacti lorsque nous avons changé de script (celle du cpu suit la même tendance): http://vm.lc/21
    C’est assez clair ? :)

  3. Ouais c’est bien clair :)

    Je vais jeter un oeil alors car check_esx est très bien maintenu, mais si celui là est vraiment + performant !

    En plus, ils utilisent perl et le sdk de vmware, donc j’ai du mal à comprendre de telles différence de perf? Ou alors op5 programment avec les pieds ?

  4. je n’ai pas le niveau en perl pour le savoir mais je me demande si c’est pas le plugin nagios qui ferait la différence car il n’est pas loadé dans le script check_vmware (qui semble bien maintenu aussi).

  5. Autre détail, VILib n’est pas loadé dans check_esx

  6. J’ai pas mal de petites erreur par contre, du style

    Use of uninitialized value within %results in multiplication (*) at ./check_vmware.pl line 889

    Donc à voir.

    En tout cas pas mal rapide c’est clair. Dommage que les données de performances soient incomplètes. Ex impossible d’avoir le détail des perfs des CPU, pour le VMs pas de perf disk / net.

    En tout cas je vais suivre ce plugin de près

  7. A la base je cherchais un moyen simple de monitorer des cluster ;)

  8. Bonjour,
    voici mon sushi : je decouvre Cacti et je n’est pas de retour pour les VMFS voici donc ce que j’ai vais

    j’ai un p’tit problème avec le vi_host_vmfs.pl j’ai un retour
    syntax error near unexpected token `(‘

    j’ai donc fait une modifcation du script avec:
    |awk -F \”\\(|%\” ‘{print \$2}’
    J’ai maintenant la valeur attendue mais hélàs Cacti me reponds dans les logs :
    Result from CMD not valid. Partial Result: U

    auriez vous une petite idèe pour moi
    merci d’avance

  9. je ne vois pas bien ce que vous avez modifié pour que çà fonctionne, vous pourriez faire un screenshot du retour dans un putty par ex ?

  10. voici la modification
    |awk -F “(” ‘{print $2}’ |awk -F “%” ‘{print $1}’`;

    avec le script non modifé
    [root@localhost ~]# perl /var/www/cacti/scripts/check_vmware.pl –server XXXX –username XXXX –password XXXX –instance XXXX –report disk |awk -F \”\\(|%\” ‘{print \$2}’
    -bash: syntax error near unexpected token `(‘

    Avec mofication

    perl /var/www/cacti/scripts/check_vmware.pl –server XXXX –username XXXX –password XXXX –instance XXXX –report disk |awk -F “(” ‘{print $2}’ |awk -F “%” ‘{print $1}’
    89

    pour le reste du script je n’ai rien touché

  11. oui mais dans ce cas c’est pour le lancer en interactif, dans le script perl vous avez besoin des backslash (\)pour les double quotes. Quel est le résultat sur script perl non modifié ?

  12. Voici la sortie du Script perl non modifié avec les arguments
    perl /var/www/cacti/scripts/vi_host_vmfs.pl XXXX administrator XXXX XXXX
    awk: warning: escape sequence `\(‘ treated as plain `(‘
    awk: fatal: Unmatched ( or \(: /(|%/
    percent:0.0

    effectivement le retour semble être 0.0 au lieu de la valeur réel

  13. Euh! J’ai un prob avec check_vmware!
    ./check_vmware.pl –config=vmconfig –mode=mrtg –report cpu
    193753238.13
    90.15

    Avg CPU usage: 193753238.13%, Avg Memory usage: 90.15%
    Par contre avec check_esx3, j’obtiens:
    ./check_esx3.pl -H 10.10.20.1 -u root -p ‘$20.1!whr’ -l cpu
    CHECK_ESX3.PL OK – cpu usage=1923.35 MHz (22.53%) | cpu_usagemhz=1923.35Mhz;; cpu_usage=22.53%;;
    mem et disk ont l’air de fonctionner mais cpu et net me ramènent je dirais de faux résultats.
    Y a t’il une solution?

  14. etdens, et quelle est la bonne valeur ?

  15. Vsphere Client me donne une moyenne de 26,199% c.à.d. check_esx3.pl fonctionne. De même pour le paramètre net: check_esx3.pl -u xxx -l xxx -l net = 24%

    merci d’avance

  16. moi j’ai des valeurs cohérentes, le host en question a de l’historique sur le vcenter ?

  17. Bon tuyau pour l’install merci.

    En revanche, j’ai un problème, mon script ne récupère pas les valeurs de mes VMs. J’ai essayé de le lancer directement en ligne de commande, et les valeurs retournée pour le cpu, ram, net sont a 0. En revanche j’arrive a avoir le nombre de VM qui tourne par example.

    Une idée ?

  18. le cluster est récent peut être (pas assez de stats) ?

  19. A priori c’est un bug de check_vmware.pl qui ne recupère pas les bonnes info, donc je vais me rabattre sur le dev du plugin en question ;)

    Merci !

  20. Hi,

    I hope my english is okay:
    I wanted to install the vmware cli on a ubuntu 10.10 64bit system. The installer seems to complete the installtion.

    But when I run the scripts like this:

    Can’t locate VMware/VIRuntime.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.12.4 /usr/local/share/perl/5.12.4 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.12 /usr/share/perl/5.12 /usr/local/lib/site_perl .) at /usr/share/cacti/site/scripts/check_vmware.pl line 39.
    BEGIN failed–compilation aborted at /usr/share/cacti/site/scripts/check_vmware.pl line 39.
    percent:0.00

    Do you have any idea? Thanks! :)

  21. If VIRuntime.pm exists on your system, you should follow Carter’s advice http://communities.vmware.com/message/1141924

  22. Hi NiTRo,

    thanks.

    I don´t have the VIRuntime.pm on my system. When I install the vmware tools for perl this is the output:

    ___
    root@monitoring:~/vmware-vsphere-cli-distrib# ./vmware-install.pl
    Creating a new vSphere CLI installer database using the tar4 format.

    Installing vSphere CLI 5.0.0 build-422456 for Linux.

    You must read and accept the vSphere CLI End User License Agreement to
    continue.
    Press enter to display it.

    VMware(r) End User License Agreement
    ….

    Do you accept? (yes/no) yes

    Thank you.

    http_proxy not set. please set environment variable ‘http_proxy’ e.g. export
    http_proxy=http://myproxy.mydomain.com:0000 .

    ftp_proxy not set. please set environment variable ‘ftp_proxy’ e.g. export
    ftp_proxy=http://myproxy.mydomain.com:0000 .

    root@monitoring:~/vmware-vsphere-cli-distrib#

    Nothing more happens but it seems not to be installed correctly :/

  23. For set an environnement variable :
    root#export http_proxy=http://blabla:8080/
    root#export ftp_proxy=http://blabla:8080/

    Before start install.

    It takes a long time.

  24. vanhaakonnen Says:
    December 14th, 2011 at 16:51

    Yeah, thanks. That was my mistake. Now I could install everything.

    But Cacti still doesn´t display graphs for my esx. Is it maybe a problem to use esxi5?

    When I try to start the script from bash I get the following error:

    /usr/share/cacti/site/scripts# perl /usr/share/cacti/site/scripts/check_vmware.pl –server 192.168.100.14 –username root –password XXX –instance esxi –report disk
    UNKNOWN: Login to VirtualCentre server failed: Server version unavailable at ‘https://192.168.100.14:443/sdk/vimService.wsdl’ at /usr/share/perl/5.12/VMware/VICommon.pm line 545.

  25. @vanhaakonnen i use it against both v4 and v5 it’s working fine in any case.

  26. I use no instance and no cluster.
    It run with Esx 5.0 in my case too.

  27. Bonjour ,

    Je débute dans cacti et j’ai suivi les conseille d’installation mais les sont vierges donc je pense que j’ai un problème d’installation .
    Auriez-vous un tuto sur l’installation et surtout savoir ou je dois installer ” package vSphere SDK for Perl (aka vi perl toolki ) sur l’esx ou cacti.

    merci

    Cacti 0.8.7G
    Linux Redhat 5 32bit

  28. Les graphs sont vierges :)

  29. le perl toolkit c’est sur cacti que vous devez l’installer et pour en savoir un peu plus sur les causes de votre problèmes, vous pouvez augmenter la “verbosity” du log de cacti (“Poller Logging Level” dans les settings)

  30. Merci pour la réponse et je m’en suis douté qu’il fallait le faire sur le cacti.
    Et maintenant j’ai un autre souci, j’ai des esx qui graph et d’autres les graphes sont vides et je ne sais pas pourquoi.
    Auriez-vous une idée?

  31. Bonjour,

    Les script pou les cluster marchent très bien, merci d’ailleurs.

    Par contre pour ceux des hosts j’ai un souci, je n’ai que des 0 en retour.

    si je lance en manuel:
    `perl /var/www/cacti/scripts/check_vmware.pl –server $ARGV[0] –username $ARGV[1] –password $ARGV[2] –host $ARGV[3] –mode MRTG –report cpu|head -1`

    j’ai un retour avec la bonne valeur …

    Par contre quand j’appelle le script vi_host_cpu.pl je n’ai que des 0 en retours.

    Une petite piste ?? merci

    Cdt

  32. @Daff : celui de la mémoire aussi ?

  33. Oui celui de la mémoire aussi.

    En manuel via check_vmware.pl ça marche nickel mais dès que je lance via les scripts vi_host_XXX.pl le résultat est à 0 :(

  34. J’ai trouvé une parade pour le CPU, la Mémoire et le traffic en modifiant le xml cacti_host_template_vmware_esxi.xml :
    ligne 669:perl <path_cacti>/scripts/check_vmware.pl –server <grepstr1> –username <grepstr2> –password <grepstr3> –host <grepstr4> –mode MRTG –report cpu|head -1

    ligne 721:perl <path_cacti>/scripts/check_vmware.pl –server <grepstr1> –username <grepstr2> –password <grepstr3> –host <grepstr4> –mode MRTG –report mem|head -1

    ligne 773:perl <path_cacti>/scripts/check_vmware.pl –server <grepstr1> –username <grepstr2> –password <grepstr3> –host <grepstr4> –mode MRTG –report net|head -1

    par contre pour le VMFS en recopiant le script dans le xml cela ne me donne toujours rien … je vais continuer àa chercher :)

  35. Pour le VMFS, lorsque je teste avec :

    perl //scripts/check_vmware.pl –server __IP_VCENTER__ –username __USER_VCENTER__ –password __PASSWORD__ –instance __IP_ESXI__ –report disk

    J’obtiens l’erreur :

    UNKNOWN: Disk instance __IP_ESXI__ not found.|

    Auriez-vous une piste svp ?

    Merci !

  36. Erratum : fatigue de fin de journée…

    Il faut évidemment mettre le nom du datastore !

  37. en effet :)

  38. Bonjour NiTRo,

    J’aurais quelques questions quant à l’utilisation du script (check_vmware.pl) :
    - Est-il pleinement compatible avec vSphere 5 ?
    - Quels sont ses avantages comparé à du polling par SNMP ?
    - Les deux scripts que tu distribue sont-ils compatible Nagios/Centreon ?

    Merci par avance,
    Seb

  39. @SebT : Salut,

    - 100% compatible vsphere 5
    - le snmp de vsphere 5 n’expose que très peut d’info donc ce n’est pas comparable
    - la sortie du script (printf) est à ajuster en fonction de l’outil malheureusement

  40. Merci NiTRo pour cette rapidité à me répondre et ces précisions.

    Seb.

  41. Daff ,
    je viens de lire les débugs que tu as réalisé et je les ai appliqué à la lettre.
    Cela marche du tonner mais j’ai un souci avec les graphs du disk qui me remonte la totalité.
    J’ai vu que tu as eu le même problème et je voudrais savoir comment tu l’as résolu ?

  42. mémo : cp -R ./vmware-vsphere-cli-distrib/lib/VMware/share/VMware/* /etc/perl/VMware/

  43. @Daff, je viens d’avoir le problème aussi. apparemment c’est lié à la version de awk. essai avec ça :

    $host_vmfs_usage = `perl /var/www/cacti/scripts/check_vmware.pl –server $ARGV[0] –username $ARGV[1] –password $ARGV[2] –instance $ARGV[3] –report disk|awk -F \”\\\\\\(|%\” ‘{print \$2}’`;

    (oui ça fait beaucoup de “\” mais ça marche)

  44. @Nitro, je vais essayer, merci.

  45. my $percent;
    foreach (`perl /var/www/html/cacti/scripts/check_vmware.pl –server $ARGV[0] –username $ARGV[1] –password $ARGV[2] –instance $ARGV[3] –report disk`){
    $percent = $1 if /^*\((\d+).(\d+)%\)/;
    }
    printf(“percent:%.1f\n”, int($percent));

  46. Comme beaucoup,il semblerait, j’ai eu le problème de vi_host_vmfs.pl alors je l’ai modifié pour qu’il fonctionne sans un awk ou une boucle, juste une simple regex. Voici le script complet:
    #!/usr/bin/perl -w

    my $host_vmfs_usage;
    my $output;

    $host_vmfs_usage = `perl /srv/eyesofnetwork/cacti/scripts/check_vmware.pl –server $ARGV[0] –username $ARGV[1] –password $ARGV[2] –instance $ARGV[3] –report disk`;

    ($output)= $host_vmfs_usage =~ /\((.*?)\%/;

    printf(“percent:%.1f\n”, $output);

  47. Merci Guiona, je vais refaire le package avec ta modif

  48. I had the AWK problem too. I just skipped awk and did it in perl.

    $percent = 0;
    $percent = $1 if $host_vmfs_usage =~ /\((\d+\.\d+)%\)/;
    printf (“percent:%.1f\n”, int ($percent+0.5));

    (this site tends to add spaces, remove all spaces above!

  49. ERRORS IN MY LAST POST …AWK
    =====================

    Sorry, the post above mine was a much better solution:

    ($output)= $host_vmfs_usage =~ /\((.*?)\%/;
    printf(“percent:%.1f\n”, $output);

  50. Can you explain how to alter the title of the graph to show the cluster name?

    What’s the name of the variable?

    Thanx.

  51. it’s static, i put it in the host description

  52. Juan Antonio Says:
    April 27th, 2012 at 10:28

    But in the host description is the host name, no the cluster name.

    We’ve two clusters y one Virtual Center node, and cann’t difference between they.

  53. You have to create a new device for each cluster, i didn’t find a way to manage it better than that :(

  54. Bonjour et merci de votre travail !

    Par contre sur tous les graphs cacti, CPU, MEM et NET sont à 0 et VMFS à 100.

    Meme retrour avec le requetages des scripts perl …

    perl vi_host_cpu.pl -server 192.168.0.254 -username root -password mypass
    percent:0.00

    Une petite idée ?

  55. Bonjour, si vous exécutez la commande contenu dans le script perl en remplaçant les arguments ça donne quoi ?

  56. [...] bien que ça arrive, check_esx3 ça commençait à faire vieillot, limite vintage. Alors que nous nous étions tourné vers une solution alternative, nous revenons de nouveau vers ce plugin nagios qui commence à compter [...]

  57. Bonjour,
    Je suis dans le même cas que dmb77, a savoir tous les graphs vides sauf VMFS usage à 100%.
    Quelqu’un a une solution ?

    Quand j’execute la commande perl en manuel, voici ce qu’il me raconte :

    Can’t locate VMware/VIRuntime.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at /usr/share/cacti/site/scripts/check_vmware.pl line 39

  58. @Al1, j’ai eu le meme genre de problème pour un autre module perl, le plus rapide (mais un peu crado) c’est de faire des liens symboliques :)

  59. @NiTRo, merci de cette réponse rapide
    j’ai résolu le message d’erreur grace à

    cp -R ./vmware-vsphere-cli-distrib/lib/VMware/share/VMware/* /etc/perl/VMware/
    (honte à moi)

    mais j’ai toujours des graphs vides.
    maintenant, le script perl me répond “percent:0.00″ quand je le lance à la main

  60. Bonjour, j’arrive a avoir des valeurs quand je lance les scripts a la main mais mes graphs restent desesperement vides, quand ils apparaissent…
    un hote en local me retourne des graphs vides avec esx5 et trois hotes distants ne me retournent pas de graph avec esx4 et 5 , port 161 ouvert et snmp actif
    (meme config que l’hote local).
    j’ai plus d’idees.

  61. @Al1 : le snmp c’est pour le vcenter mais ca ne sert que pour avoir le passwd dans cacti et non dans un script. Si tu veux grapher les ESXi seuls, c’est le 443 que tu dois ouvrir.

  62. @NiTRo merci de cette réponse.
    Le problème c’est que les scripts fonctionnent avec bash mais aucune remontée sur cacti
    j’ai 8 serveurs sous esxi free 5.01 et 5.1 (3 en local et 5 distants)
    1 serveur sous esxi free 4.0 (distant)
    mon cacti est monté sur une Debian Squeeze
    Tous les serveurs “répondent” à un snmpwalk depuis la machine Debian
    Tous les serveurs retournent une valeur au script

    perl /usr/share/cacti/site/scripts/check_vmware.pl –server X.X.X.X –username XXXX –password XXXX –report cpu|head -1

    Aucune remontee dans Cacti, les graphs sont vides

    Ci apres une partie des logs cacti

    CMD: perl /usr/share/cacti/site/scripts/esxi_cpu.pl X.X.X.X , output: U
    WARNING: Result from CMD not valid. Partial Result: U
    CMD: perl /usr/share/cacti/site/scripts/esxi_mem.pl X.X.X.X , output: U
    WARNING: Result from CMD not valid. Partial Result: U
    CMD: perl /usr/share/cacti/site/scripts/esxi_vmfs.pl X.X.X.X , output: U
    WARNING: Result from CMD not valid. Partial Result: U
    CMD: perl /usr/share/cacti/site/scripts/vi_cluster_vm.pl , output: 0
    CMD: perl /usr/share/cacti/site/scripts/vi_cluster_net.pl , output: usage:0.00
    CMD: perl /usr/share/cacti/site/scripts/vi_cluster_mem.pl , output: percent:0.00
    CMD: perl /usr/share/cacti/site/scripts/vi_cluster_cpu.pl , output: percent:0.00
    CMD: perl /usr/share/cacti/site/scripts/unix_processes.pl, output: 82
    CMD: perl /usr/share/cacti/site/scripts/unix_users.pl , output: 1
    SNMP: v1: X.X.X.X, dsname: snmp_oid, oid: , output: U
    WARNING: Result from SNMP not valid. Partial Result: U
    WARNING: SNMP Get Timeout for Host:’X.X.X.X’, and OID:”

    Les ports 161 et 443 sont ouverts, j’ai accès aux esxi en HTTPS

    Je ne sais plus quoi faire une idée avant que j’abandonne?

  63. @Al1 : N’abandonnes surtout pas ! :)
    D’expérience, le “output: U” proviens d’un problème de formatage du stdout du script. Tu peux me donner un exemple de retour d’un des scripts quand tu le lances directement en commande ?

  64. YELLOWDOG Says:
    July 16th, 2013 at 11:07

    Bonjour,

    Je rencontre les mêmes problèmes que Al1, à savoir que mes graphes sont vides à part VMFS à 100%.
    SNMP est activé, le port 443 est ouvert et toujours rien sur 4 ESX.
    Y a t’il un moyen de résoudre ce problème ? Si oui lequel ?

  65. bonjour, vous pouvez commencer par passer le log de cacti en medium pour voir si de bonnes valeurs sont fetchée. On verra après si c’est coté script ou coté rrd.

  66. YELLOWDOG Says:
    July 17th, 2013 at 8:42

    Voici ce que me dit la log de CACTI en MEDIUM, tout remonte à 0.

    07/17/2013 09:20:17 AM – CMDPHP: Poller[0] Host[42] DS[116] CMD: perl /usr/share/cacti/scripts/vi_host_vmfs.pl PRA4.mondom.com root pwsd PRA4_LOCAL, output: percent:0.0
    07/17/2013 09:20:16 AM – CMDPHP: Poller[0] Host[42] DS[115] CMD: perl /usr/share/cacti/scripts/vi_host_net.pl PRA4.mondom.com root pswd PRA4, output: usage:0.00
    07/17/2013 09:20:15 AM – CMDPHP: Poller[0] Host[42] DS[114] CMD: perl /usr/share/cacti/scripts/vi_host_mem.pl PRA4.mondom.com root pswd PRA4, output: percent:0.00
    07/17/2013 09:20:14 AM – CMDPHP: Poller[0] Host[42] DS[113] CMD: perl /usr/share/cacti/scripts/vi_host_cpu.pl PRA4.mondom.com root pswd PRA4, output: percent:0.00

  67. ça veut dire que le problème est coté script. Essayez d’exécuter la commande ’sh ./check_esx3_helper.sh datastoreindex’ depuis le répertoire scripts de votre cacti et en replacant les < ...> par vos valeurs.

  68. YELLOWDOG Says:
    July 19th, 2013 at 10:19

    Je n’ai pas dans mon répertoire de scripts CACTI (/usr/share/cacti/scripts/) le fichier check_esx3_helper.sh

    Je n’utilise pas le script check_esx3.pl mais check_vmware.pl

  69. YELLOWDOG Says:
    July 19th, 2013 at 14:36

    Voici ce que meretourne la commande

    ./check_esx3_helper.sh PRA1 root pswd datastoreindex
    awk: AVERTISSEMENT:séquence d’échappement « \’ » traitée simplement comme « ‘ »
    DataStore3
    PRA1_LOCAL
    DataStore2
    DataStore1

  70. Je voulais savoir s’il existe quelquepart un moyen de monitorer le HOST lui meme (esxi5.5, en utilisant uniquement snmp ? (ram/cpu/nic/host swap rate/)

    Je ne trouve que des scripts pour motitorer cela, hors j’ai besoin de snmp uniquemtn.

    Merci pour le travail en tous ca !

    Jerome

  71. En snmp vous n’aurez que le réseau et les partitions, vous pouvez utiliser le template de base “Generic SNMP-enabled Host” et il vous faudra configurer le daemon snmp avant : http://blogs.vmware.com/vsphere/2012/11/configuring-snmp-v1v2cv3-using-esxcli-5-1.html

Leave a Reply