Zabbix VMWARE Monitoring

Technisches Konzept

Seit der Version 2.0 hat ein neues Modul zur Überwachung von VMware-ESX Einzug in den Zabbix-Server gehalten. Sie können ohne zusätzliche Skripte wichtige Performance-Daten von ESX, ESXi und V-Center-Servern abrufen.
Der Zabbix-Server verbindet sich über die VMware-API zum Hypervisor und ruft die Daten ab. Der Zabbix-Agent wird also nicht benötigt.

Das Abrufen der Daten von den ESX-Servern wird nicht, wie sonst üblich, durch das Anlegen eines Items ausgelöst. Im Zabbix-Server läuft ein sogenannter „VMwareCollector“, welcher ähnlich wie ein Cronjob zyklisch die Daten „in einem Rutsch“ abruft und in einem internen Cache ablegt. Aus diesem Cache beziehen die Items dann die Messwerte.

Wenn Sie den Zabbix-Server aus den Quellen kompilieren, müssen Sie die Optionen --with-libxml2 und --with-libcurl setzen, um das VMware-Monitoring nutzen zu können.

Der Zabbix-Server kann mit seinem eingebauten VMwareCollector keine Informationen über den Hardwarestatus eines ESX-Servers abrufen. Wenn Sie primär die Hardware Ihrer ESX-Server überwachen möchten, müssen Sie Zabbix erweitern (siehe Die Hardware von ESX-Servern überwachen).

VMwareCollector aktivieren

Damit Sie Items vom Typ „VMware“ nutzen können, müssen Sie den sogenannten VMwareCollector in der Datei /etc/zabbix/zabbix-server.conf aktivieren. Starten Sie mindestens einen Collector und legen Sie fest, wie oft die Daten gesammelt werden sollen. Prüfen Sie dazu die folgenden Einstellungen. Starten Sie den Zabbix-Server neu, nachdem Sie die Einstellungen angepasst haben.

### Option: StartVMwareCollectors
#       Number of pre-forked vmware collector instances.
#
# Mandatory: no
# Range: 0-250
# Default:
StartVMwareCollectors=2

### Option: VMwareFrequency
#       How often Zabbix will connect to VMware service to obtain a new data.
#
# Mandatory: no
# Range: 10-86400
# Default:
VMwareFrequency=60

### Option: VMwareCacheSize
#       Size of VMware cache, in bytes.
#       Shared memory size for storing VMware data.
#       Only used if VMware collectors are started.
#
# Mandatory: no
# Range: 256K-2G
# Default:
VMwareCacheSize=8M

Prüfen Sie, ob der vmware collector in der Prozessliste erscheint.

root@monitoring:~# ps aux|grep zabbix_server.*vmware
zabbix   ...    0:05 /usr/sbin/zabbix_server: vmware collector #1
zabbix   ...    0:04 /usr/sbin/zabbix_server: vmware collector #2

Items einrichten

Zum Abrufen von VMware-spezifischen Daten nutzen Sie den Item-Typ Simple Check. In der Liste finden Sie diverse Items, die mit dem Präfix vmware beginnen.

Den VMware-Items müssen Sie neben den Item-Keys immer drei zusätzliche Parameter mitgeben.

URL
Die HTTP-URL, über welche die VMware-API erreichbar ist. Diese URL ist in der Regel immer https://<IP_OR_HOSTNAME>/sdk. Wenn Sie Items in Templates einrichten, verwenden Sie https://{HOST.CONN1}/sdk als URL.
User Name
Einen Benutzer, den Sie zuvor auf dem ESX- oder Vcenter-Server eingerichtet haben
Password
Das Passwort des zuvor eingerichteten Benutzers
Update-Intervall
Beachten Sie das Update-Intervall des VMware Collectors, welches global in der Datei zabbix_server.conf eingestellt wird. Wenn dieser beispielsweise nur alle fünf Minuten Daten sammelt, hat es keinen Sinn, ein Item alle 60 Sekunden zu aktualisieren.
Speichern Sie Benutzer und Passwort in einem Makro, damit Sie pro ESX-Server einen anderen Benutzer oder ein anderes Passwort verwenden können.

Richten Sie als Erstes das Item vmware.fullname ein, um zu testen, ob das VMware-Monitoring funktioniert. Hinterlegen Sie entweder in einem globalen Makro oder in einem Host-Makro den Benutzernamen und das Passwort, mit dem sich der Zabbix-Server zum ESX-Server verbinden kann. Danach richten Sie das Item vom Typ „Simple Check“ wie unten abgebildet ein.

Zabbix-Server kontaktiert die ESX-API.

Host UUID ermitteln

Für viele Items benötigen Sie die sogenannte UUID des ESX-Servers. Dies ist eine eindeutige Kennung des Servers, die während der Installation aus dem Bios der Hardware ausgelesen wird. Wenn Sie einen Vcenter-Server verwenden, kann Zabbix die UUIDs aller von Vcenter verwalteten ESX-Server automatisch über eine Discovery-Regel ermitteln.
Wenn Sie keinen Vcenter-Server verwenden, müssen Sie die UUID manuell ermitteln. Rufen Sie dazu die VMware-API per Browser auf https://<IP_OR_HOSTNAME>/mob/?moid=ha-host&doPath=hardware.systemInfo auf. Selbstverständlich können Sie die UUID auch über die Kommandozeile per Curl ermitteln:

curl -s -k -u <USER>:<PASSWORD> "https://<IP_OR_HOSTNAME>/mob/?moid=ha-host&doPath=hardware.systemInfo"|\
grep -o "<uuid>.*<\/uuid>"

Tragen Sie die UUID des ESX-Servers in einem Host-Makro ein.

UUID ermitteln und als Makro speichern
Ab ESX-Version 6 ist sind der sogenannten Management Object Browser (MOB) standardmäßig abgeschaltet. Ein Aufruf der URL https://<IP_OR_HOSTNAME>/mob/ führt zu einer Fehlermeldung wie „503 Service Unavailable Failed to connect to endpoint“. Aktivieren Sie den Management Object Browser in den erweiterten Einstellungen (siehe Screenshot) und führen Sie den Request erneut durch.
Management Object Browser in ESX6 aktivieren

Wenn Sie zahlreiche ESX-Server überwachen und häufig neue Server in Zabbix hinzufügen, ist das Ermitteln der UUID eine zeitraubende manuelle Tätigkeit. Legen Sie das Skript get.vmware.uuid.py in den Ordner für externe Skripte und legen Sie ein Item mit dem Key vmware.set.uuid.py[{HOST.CONN},{$VMWARE_USERNAME},{$VMWARE_PASSWORD},{HOST.HOST} ] an. Das Skript soll für jeden ESX-Server ausgeführt werden. Der externe Check ermittelt die UUID und trägt diese über die Zabbix-API für den entsprechenden Host in ein Usermakro ein. Passen Sie die Zugangsdaten für die Zabbix-API in den Zeilen 22-23 an.

Automatisches Ermitteln und Speichern der UUID von ESX-Servern
Items für ESX-Server (Hypervisor)
Item-Name Item-Key
Hypervisor CPU Cores [Anzahl] vmware.hv.hw.cpu.num["https://{HOST.CONN1}/sdk",{$HV_UUID}]
Hypervisor CPU [Freq HZ] vmware.hv.hw.cpu.freq["https://{HOST.CONN1}/sdk",{$HV_UUID}]
Hypervisor CPU [Threads] vmware.hv.hw.cpu.threads["https://{HOST.CONN1}/sdk",{$HV_UUID}]
Hypervisor CPU [used %] vmware.hv.cpu.pused
Hypervisor CPU [used HZ] vmware.hv.cpu.usage["https://{HOST.CONN1}/sdk",{$HV_UUID}]
Hypervisor Eventlog [Text] vmware.eventlog["https://{HOST.CONN1}/sdk"]
Hypervisor memory [ballooned] vmware.hv.memory.size.ballooned["https://{HOST.CONN1}/sdk",{$HV_UUID}]
Hypervisor memory [total] vmware.hv.hw.memory["https://{HOST.CONN1}/sdk",{$HV_UUID}]
Hypervisor memory [used %] vmware.hv.memory.pused
Hypervisor memory [used] vmware.hv.memory.used["https://{HOST.CONN1}/sdk",{$HV_UUID}]
Hypervisor Status vmware.hv.status["https://{HOST.CONN1}/sdk",{$HV_UUID}]
Hypervisor VMs [Anzahl] vmware.hv.vm.num["https://{HOST.CONN1}/sdk",{$HV_UUID}] 10m
vmware.set.uuid vmware.set.uuid.py[{HOST.CONN},{$VMWARE_USERNAME},{$VMWARE_PASSWORD},{HOST.HOST} ]
Vmware Fullname/Version vmware.fullname["https://{HOST.CONN1}/sdk"]

Sobald Sie die UUID eines ESX-Servers ermittelt haben, können Sie die Items aus der zuvor gezeigten Tabelle anlegen. Diese rufen Messwerte des Hypervisors ab und geben Ihnen einen Überblick über die Ressourcenauslastung des gesamten Servers.

Item zur Überwachung des Hypervisiors anlegen

Discovery-Regeln

Das Item vmware.vm.discovery liefert eine Liste aller VMs, die auf einem ESX-Server registriert sind. Über die Makros {#VM.UUID} und {#VM.NAME} können die VMs in Item-Prototypes angesprochen werden.
Ebenfalls ist es möglich, alle auf einem ESX- oder Vcenter-Server registrierten virtuellen Maschinen automatisch als Hosts in Zabbix anlegen zu lassen (Host-Prototypes).

Beispiel 1

Richten Sie für ein Template, welches Sie mindestens einem ESX-Server zugewiesen haben, eine Discovery-Regel mit dem Namen „VM Discovery“ ein. Verwenden Sie als Item-Key vmware.vm.discovery["https://{HOST.CONN1}/sdk"].

Zabbix ermittelt alle VMs eines ESX-Servers.

Sobald die Regel angelegt wurde, können Sie Item-Prototypes hinzufügen, um Leistungsdaten einzelner VMs zu monitoren. Verwenden Sie im Namen des Item-Prototypes das Makro {#VM.NAME} und das Makro {#VM.UUID} im Key.

Richten Sie die folgenden Item-Prototypen vom Type „Simple Check“ ein.

Items für virtuelle Maschinen
Item-Name Item-Key
{#VM.NAME}: Ballooned Memory vmware.vm.memory.size.ballooned["https://{HOST.CONN1}/sdk",{#VM.UUID}]
{#VM.NAME}: CPU Usage vmware.vm.cpu.usage["https://{HOST.CONN1}/sdk",{#VM.UUID}]
{#VM.NAME}: Powerstate vmware.vm.powerstate["https://{HOST.CONN1}/sdk",{#VM.UUID}]
{#VM.NAME}: CPU-Ready (%) vmware.vm.cpu.ready["https://{HOST.CONN1}/sdk",{#VM.UUID}]
Das Item vmware.vm.cpu.ready["https://{HOST.CONN1}/sdk",{#VM.UUID}] wird erst ab Zabbix Version 3.0 unterstützt.

Die Liste aller Items zur Überwachung von VMware finden Sie in der offiziellen Zabbix-Dokumentation.

Item-Prototypen, welche den Ressourcenverbrauch der einzelnen VMs überwachen

Beispiel 2

Richten Sie ein „normales“ Template mit dem Namen „VMware Virtual Machine“ ein. Legen Sie in diesem Template folgendes Item an:

  • Name: Number of CPUs or Cores
  • Type: Simple Check
  • Key: vmware.vm.cpu.num[ https://{HOST.CONN1}/sdk,{HOST.HOST} ]
  • Username: {$VMware_USERNAME}
  • Password: {$VMware_PASSWORD}
Spezielles Item für die Nutzung in einem Host-Prototypen

Danach legen Sie in der Discovery-Regel aus Beispiel 1 einen neuen „Host Prototype“ an. Als Hostnamen tragen Sie {#VM.UUID} und als sichtbaren Namen {#VM.NAME} ein. Es ist wichtig, dass der Hostname gleich der UUID der VM gesetzt wird, denn nur so können die später zugewiesenen Templates und Items erkennen, von welcher VM die Daten gesammelt werden sollen.
Über den Reiter „Groups“ wählen Sie mindestens eine existierende Gruppe aus, welcher die neu angelegten Hosts angehören sollen. Über den Reiter „Templates“ weisen Sie Zabbix an, allen erkannten VMs das zuvor angelegte Template „VMware Virtual Machine“ zuzuweisen. Beachten Sie, dass das Monitoring der erkannten VMs, welches über einen Host-Prototypen automatisch angelegt wird, ausschließlich über die VMware-API erfolgen kann. Sie können den erkannten VMs nicht automatisch „normale“ Templates zuweisen, welche zum Beispiel den in einer VM laufenden Zabbix-Agenten als Datenquelle nutzen.
Der Zabbix-Server wird nun für alle erkannten VMs eines ESX- oder Vcenter-Servers einen Host anlegen und diesem das Template „VMware Virtual Machine“ zuweisen. Unter „Latest Data“ sollten Sie nach einiger Zeit die neuen Hosts und die Anzahl der den VMs zugewiesenen CPUs finden.