Man kann mit der VMWare-SDK for Perl CLI direkt mit den ESX-Servern kommunizieren.
Dafür lädt man sich das jew. SDK von hier herunter und installiert dieses wie in den Installationsanleitungen (weiter unten auf der Seite) angegeben.
Danach muß die Kommunikation zwischen der SDK-CLI, auf dem Nagios-Host, und der vSphere-Umgebung hergestellt werden.
Dafür öffnen man sich den vSphere-Client und loggt sich direkt auf einen ESX-Host ein.
Hier legt man einen neuen Benutzer für das Monitoring an (Auf den Server klicken, unter dem Reiter „Lokale Benutzer und Gruppen“).
Dieser hat keinen Shell-Zugriff und gehört der Rolle „Nur-lesen“ an (Kontextmenü des Servers → „Berechtigung hinzufügen“).
Testen kann man das SDK z.B. so:
esxcli --server <SERVER> --username <USER> --password <PASSWORD> network ip interface list
Die Ausgabe sollte ungefähr so aussehen:
vmk0 Name: vmk0 MAC Address: 78:e7:d1:e1:8b:f4 Enabled: true Portset: vSwitch0 Portgroup: Management Network VDS Name: N/A VDS Port: N/A VDS Connection: -1 MTU: 1500 TSO MSS: 65535 Port ID: 16777220
Der Nachfolger des check_esx3
Plugins ist das Plugin check_vmware_api
.
Heruntergeladen wird es wie folgt:
gi clone https://github.com/op5/check_vmware_api.git
Danach die installation wie in der „Readme.md“ beschrieben befolgen.
Zuletzt einfach die check_vmware_api.pl
in das Nagios-Libexec-verzeichnis kopieren:
cp <PFAD>/check_vmware_api.pl /usr/local/nagios/libexec
Weiterhin benötigt man noch folgendes Perlmodul, welches auch installiert werden muss: Monitoring::Plugin::Functions
.
Nach der Installation und dem erfolgreichen Test kann in Nagios das Plugin installiert werden.
cd /usr/local/nagios/libexec
Hier dann die Datei „check_esx3.pl“ erstellen und den Code von hier hinein pasten.
chown nagios.nagios check_esx3.pl chmod a+x check_esx3.pl
Wenn die VMWare Umgebung Verschlüsselt über https
abgefragt wird, dann kann es vorkommen dass Nagios die Checks nicht abfragen kann.
Im nagios.log kommem dann solche Meldungen:
Server version unavailable at 'https://<HOSTADDRESS>:443/sdk/vimService.wsdl' at /usr/local/share/perl/5.14.2/VMware/VICommon.pm line 545.
Hier kann nun eine Environment-Variable gesetzt werden, damit die VMWare Hosts unverschlüsselt per http
abgefragt werden:
export PERL_LWP_SSL_VERIFY_HOSTNAME=0
Diese Variable ist allerdings nur in der aktuellen Shell-Session verfügbar. Wenn der Server rebootet wird dann ist die Einstellung weg.
Man könnte die Variable auch in die /etc/environments„“ setzen, dies hätte aber zur Folge dass Perl generell keine Verschlüsselung anwendet.
check_esx3.pl
Wir möchten dass nur in der diese Verschlüsselungs Environment-Variable gesetzt wird.
check_esx3.pl'' einfügen (einfach vor die ersten „use…“ Zeilen):
Hierfür einfach folgendes in die
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;