Vmware Datacenter mit Nagios überwachen

Seit unserem Umzug von ESXi auf zwei ESX-Server hatten wir ein kleines Problem: Die Überwachung mittels dem Plugin check_esx_wbem.py funktionierte nicht mehr. Also musste auch ein neues her, schliesslich will man ja nicht blind sein!
Also habe ich mich auf exchange.nagios.org auf die Suche nach einer funktionierenden Lösung gemacht, welche trotz den zwei Dutzend Scripte und Lösungen gar nicht so einfach zu finden war. Ob nun falsche oder veraltete Programmierung oder schlicht meine Unfähigkeit der Grund für dessen versagen war, lass ich mal im Raum stehen.

Schlussendlich bin ich auf ein Perl Script namens „Vmware ESX & VM host“ gestossen, welches plötzlich konnte, was ich wollte. Dazu war lediglich das vSphere SDK für Perl erforderlich und schon konnte es losgehen.

In den Ordner libexec gehört das Script und muss ausführbar gemacht werden:

curl "http://exchange.nagios.org/components/com_mtree/attachment.php?link_id=2154&cf_id=29" > check_esx.pl
chmod +x check_esx.pl

Danach konnte das passende Kommando eingepflegt werden unter etc/objects/commands.cfg:

#check hardware of an esx server
define command{
        command_name    check_vsphere
        command_line    $USER1$/check_esx.pl -D $CLUSTER$ -H $HOSTALIAS$ -u $USER$ -p $PASS$ -l $ARG1$
        }

Unter etc/resource.cfg können die verwendeten Variablen definiert werden. Bedingung hierfür, dass der Hostalias, also $HOSTALIAS$, dem DNS-Namen entspricht. Kann aber auch problemlos angepasst werden.
Weiter gehts nun mit den eigentlichen Maschinen:

define service{
        use                     generic-service
        hostgroup_name          esx-servers
        service_description     CPU Usage
        check_command           check_vsphere!cpu -s usage -w 90 -c 95
        }

define service{
        use                     generic-service
        hostgroup_name          esx-servers
        service_description     Memory Usage
        check_command           check_vsphere!mem -s usage -w 90 -c 95
        }

define service{
        use                     generic-service
        hostgroup_name          esx-servers
        service_description     Network
        check_command           check_vsphere!net
        }

define service{
        use                     generic-service
        hostgroup_name          esx-servers
        service_description     Status
        check_command           check_vsphere!runtime -s status
        }

define service{
        use                     generic-service
        hostgroup_name          esx-servers
        service_description     Datastore
        check_command           check_vsphere!vmfs
        }

Und das war es auch schon. Aussehen tut das ganze so:

7 comments

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.