Serverüberwachung und Monitoring ist eines der wichtiges Themen in der IT. Es ist von absoluter Bedeutung den Status seiner Server und deren Services zu kennen und entsprechende Alerts zu generieren. Ich beschreibe hier das check_esx3.pl Plugin zum Überwachen der wichtigsten Ressourcen eines VMware ESX(i) Servers mit den bekannten Monitoring Tools Icinga oder Nagios
Voraussetzungen installieren
Das Plugin check_esx3.pl arbeitet mit dem VMware vSphere SDK for Perl welches zwingend erforderlich ist um die Checks auf dem ESX(i) Server durchzuführen. In folgendem Guide wird genau beschrieben wie dieses installiert wird: VMware vSphere SDK for Perl API unter Debian installieren
Monitoring User am ESX Server anlegen
Damit wir nicht direkt als root User auf den ESX(i) Server zugreifen legen wir uns über den vSphere Client einen entsprechenden User + Passwort und der Gruppe users für Monitoringzwecke an. Dieser User hat Read Only Rechte und besitzt keine gültige Shell damit man sich nicht am System (via SSH) einloggen kann:
Download des Check check_esx3.pl Perl Plugins für Icinga/Nagios
check_esx3.pl downloaden und in /usr/local/icinga/libexec oder entsprechend euer Icinga/Nagios Installation in den Check_Plugin Ordner kopieren und ausführbar machen:
chmod a+x /usr/local/icinga/libexec/check_esx3
Icinga/Nagios Konfiguration bearbeiten
Als erstes das Passwort aus Sicherheitsgründen für den zuvor angelegten ESXI User (monitoring) als Variable in der resource.cfg abspeichern:
vi /usr/local/icinga/etc/resource.cfg
$USER6$=dein_monitoring_user_passwort
Nun erstellen wir den eigentlichen Check für die ESXi Abfragen. Ich verwende hier einen einzelnen Befehl und übergebe die entsprechende Option direkt in den Services. Das ist reine Geschmacksache. Es kann auch für jede Abfrage (cpu,mem,net,runtime,…) ein eigener Befehl angelegt werden.
vi /usr/local/icinga/etc/objects/command.cfg
define command{
command_name check_esx
command_line $USER1$/check_esx3.pl -H $HOSTADDRESS$ -u monitoring -p $USER6$ -l $ARG1$ -s $ARG2$ -w $ARG3$ -c $ARG4$
}
Da jetzt der Check erstellt ist benötigen wir in der Server Konfiguration noch die entsprechenden Services. Eine genaue Auflistung und Beschreibung der vielen Möglichkeiten findet ihr hier.
[sam id=’2′ codes=’true‘]vi /usr/local/icinga/etc/objects/nhetzneresx1-services.cfg
define service {
use generic-important-service
host_name nhetzneresx1
service_description PING
contact_groups admins
check_command check_ping!200.0,20%!500.0,60%
}
define service {
use generic-important-service
host_name nhetzneresx1
service_description CPU USAGE
contact_groups admins
check_command check_esx!cpu!usage!80!90
}
define service {
use generic-important-service
host_name nhetzneresx1
service_description MEMORY USAGE
contact_groups admins
check_command check_esx!mem!usage!80!90
}
define service {
use generic-important-service
host_name nhetzneresx1
service_description MEMORY SWAP USAGE
contact_groups admins
check_command check_esx!mem!swap!80!90
}
define service {
use generic-important-service
host_name nhetzneresx1
service_description NET USAGE
contact_groups admins
check_command check_esx!net!usage!102400!204800
}
define service {
use generic-important-service
host_name nhetzneresx1
service_description RUNTIME STATUS
contact_groups admins
check_command check_esx!runtime!status!80!90
}
define service {
use generic-important-service
host_name nhetzneresx1
service_description RUNTIME ISSUES
contact_groups admins
check_command check_esx!runtime!issues!80!90
}
define service {
use generic-important-service
host_name nhetzneresx1
service_description IO READ
contact_groups admins
check_command check_esx!io!read!40!90
}
define service {
use generic-important-service
host_name nhetzneresx1
service_description IO WRITE
contact_groups admins
check_command check_esx!io!write!40!90
}
define service {
use generic-important-service
host_name nhetzneresx1
service_description VMFS MAIN STORAGE
contact_groups admins
check_command check_esx!vmfs!datastore1!300000:!150000:
}
Nach Abschluss der Konfigurationen und restart des icinga/nagios Services sieht die Service Check Übersicht für euren ESX(i) Servers in etwas so aus:
Weiterführende Informationen:
http://www.op5.com/how-to/monitoring-vmware-esx-3-x-esxi-vsphere-4-and-vcenter-server/
https://wiki.op5.org/check_esx3:start
Fehlerbehebung:
Can’t locate Nagios/Plugin.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at /usr/local/icinga/libexec/check_esx3.pl line 31.
Lösung:
perl -MCPAN -e shell
install Nagios::Plugin
ESX3 UNKNOWN – Missing perl module VMware::VIRuntime. Download and install ‚VMware Infrastructure (VI) Perl Toolkit‘, available at http://www.vmware.com/download/sdk/
Lösung:
Das VMware vSphere SDK Perl Toolkit wurde nicht richtig installiert oder die Installation wurde nicht erfolgreich abgeschlossen. Gab es bei der Installation irgendwelche Warnings oder Fehler?
CHECK_ESX3.PL CRITICAL – Error: Permission to perform this operation was denied
Lösung:
Berechtigungen am ESX(i) überprüfen. Der angelegte User muss in der Gruppe users sein und unter Permissions auf ReadOnly gestellt sein.
tipps für vsphere 5:
# aktuelleres sdk als im o.g. link
http://www.vmware.com/support/developer/viperltoolkit/
# fehler:
CRITICAL – Error: Cannot complete login due to an incorrect user name or password.
# lösung:
checks per vsphere center laufen lassen, erweiterung der command definition um “ -D VCENTER “
# fehler:
CHECK_ESX.PL CRITICAL – Server version unavailable at ‚https://HOST:443/sdk/vimService.wsdl‘ at /usr/share/perl/5.10/VMware/VICommon.pm line 545.
#lösung:
überprüfung der gültigkeit von ssl-zertifikation abschalten, /etc/init.d/icinga erweitern um:
export PERL_LWP_SSL_VERIFY_HOSTNAME=0
# quellen:
http://www.nagios-portal.org/wbb/index.php?page=Thread&threadID=24384
http://www.nagios-portal.org/wbb/index.php?page=Thread&threadID=23999
Um die Fehlermeldungen:
BEGIN failed–compilation aborted at /usr/lib/perl5/site_perl/5.8.8/Nagios/Plugin/Functions.pm
und
Server version unavailable at ‘https://xxx:443/sdk/vimService.wsdl’ at /usr/share/perl/5.10/VMware/VICommon.pm line 545.
zu beheben habe ich zusätzlich folgende zwei Packete installiert:
ia32-libs (gemäss Installationsanleitung von VMware erforderlich bei 64-bit Systemen)
libnagios-plugin-perl