Zabbix Microsoft Windows ueberwachen

Besonderheiten unter Microsoft Windows

Auch bei der Überwachung von Microsoft Windows gibt Zabbix eine gute Figur ab. Der Zabbix-Agent liegt als 32- und 64-Bit-Variante für alle Windows-Versionen ab NT4 vor. Die Installation des Zabbix-Agenten unter Windows wurde bereits im Kapitel Zabbix-Agent installieren erklärt.

Viele Items sind universell und können mit allen Betriebssystemen verwendet werden. Das erleichtert ein einheitliches Setup für heterogene Umgebungen. Wenn Sie Templates mit Makros kombinieren, können Sie zahlreiche betriebssystemunabhängige Templates anlegen. So können Sie zum Beispiel über ein Makro das Basisdateisystem definieren. Bei Windows geben Sie c: an und bei Unix-Systemen /.

Den Status von Windows-Diensten überwachen

Nur für Windows-Systeme existiert das Item service_state[<SERVICE_NAME>]. Der Zabbix-Agent prüft, welchen Status der genannte Dienst hat. Zum Beispiel prüft service_state[Dhcp], welchen Status der DHCP-Client-Dienst hat. Den Dienstnamen müssen Sie exakt so angeben, wie dieser in der Diensteverwaltung aufgeführt ist. Beachten Sie die Groß- und Kleinschreibung.

Als mögliche Item-Values werden zurückgeliefert:

  • 0 = running
  • 1 = paused
  • 2 = start pending
  • 3 = pause pending
  • 4 = continue pending
  • 5 = stop pending
  • 6 = stopped
  • 7 = unknown
  • 255 = no such service

Ein passendes Value Mapping „Windows Service State“ ist in der Basisinstallation des Zabbix-Servers bereits angelegt.

Dienstnamen in der Diensteverwaltung ablesen

Performance-Counter

Microsoft bietet mit den sogenannten Performance-Countern, auf deutschsprachigen Systemen Leistungsüberwachung genannt, eine Schnittstelle zum Auslesen zahlreicher Leistungswerte. In der Leistungsüberwachung finden Sie nicht nur Daten über das Betriebssystem. Viele Programme von Drittanbietern nutzen ebenfalls diese Schnittstelle, um statistische Daten zu reporten.

Der Zabbix-Agent kann die Daten der Performance-Counter mit dem Item perf_counter[COUNTER_NAME,<interval>] auslesen.
Zum Beispiel: perf_counter[\System\threads]. Wird als zweiter Parameter ein Zeitintervall in Sekunden angegeben, wird der Durchschnittswert innerhalb des Intervalls gemessen. Einige Counter liefern nur dann sinnvolle Daten, wenn ein Zeitintervall angegeben wird.

Welche Daten Sie aus den Performance-Countern auslesen können, erfahren Sie mit folgendem Kommando:

typeperf -qx >c:\perfcounter.txt

Wundern Sie sich nicht, wenn diese Liste mehr als 10.000 Einträge enthält. Aus diesem Grund ist es auch ratsam, die Ausgabe von typeperf sofort in eine Datei umzulenken.

Liste der verfügbaren Leistungsüberwachungen mit 16.000 Einträgen

Übernehmen Sie am besten per Copy und Paste die komplette Zeile eines Performance-Counters und geben Sie diese als Option für das Item perf_counter an. Falsch angezeigte Umlaute müssen Sie korrigieren. Zum Beispiel:

perf_counter["\System\Prozessor-Warteschlangenlänge (alle Instanzen)]
perf_counter["\Prozessor(_Total)\Benutzerzeit (%)"]
perf_counter["\Prozessor(_Total)\Privilegierte Zeit (%)"]
perf_counter["\Prozessor(_Total)\Prozessorzeit (%)"]

Windows 2012 R2

perf_counter["\4674(_Total)\4678"]
perf_counter["\Processor Information(_Total)\% User Time"]

Numerische Referenzen verwenden

Die Bezeichnungen der Performance-Counter sind abhängig von der Systemsprache. Das wird zum Problem, wenn Sie Templates anlegen möchten, die sowohl auf deutschsprachigen als auch auf englischsprachigen Systemen funktionieren sollen. Glücklicherweise können die Performance-Counter auch mit einer numerischen Referenz angegeben werden. Leider gibt das Kommando typeperf diese numerischen Referenzen nicht aus. Hier ist eine manuelle "Übersetzung" notwendig.

Öffnen Sie das Programm regedit.exe und suchen Sie den Ordner HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib. Dort befinden sich auf der deutschsprachigen Windows-Version die beiden Unterordner 007 und 009. Im Ordner 007 finde Sie die Performance-Counter mit der deutschsprachigen Benennung, im Ordner 009 die englischsprachigen Benennungen. Öffnen Sie den Key 007/Counter mit einem Doppelklick und fügen Sie den Wert (Liste der Counter) per Copy und Paste vom Registrierungseditor in einen Texteditor, zum Beispiel Notepad++ ein. Nun haben Sie eine Liste der Counter mit der deutschsprachigen Benennung und der passenden numerischen Referenz.

In der Registry findet man eine Übersetzung der Performance-Counter in numerische Bezeichnungen.

Die Angabe eines Performance-Counters besteht aus mehreren Teilen, die mit Backslashes getrennt werden. Jeder Teil muss einzeln in numerische Referenzen übersetzt werden. Die in Klammern angegebenen Optionen werden übernommen und nicht in Nummern übersetzt. Der Counter \Prozessor(_Total)\Benutzerzeit (%) besteht aus den beiden Teilen „Prozessor“ und „Benutzerzeit“ und der Option „(_Total)“. Suchen Sie in der Liste zuerst nach „Prozessor“. Die numerische Referenz befindet sich in der Zeile über der übersetzten Bezeichnung, Prozessor entspricht also mit dem Wert 238.

Numerische Übersetzung des Counters „Prozessor“

Suchen Sie als Nächstes nach „Benutzerzeit (%)“, was dem numerischen Wert 5180 entspricht. Wenn der Text, im diesem Fall „Benutzerzeit (%)“, mehrfach gefunden wird, müssen Sie die Nummer übernehmen, die nach dem zuvor gesuchten Text „Prozessor“ folgt.

Es ergibt sich folgende Übersetzung, die auf alle Windows-Systeme der gleichen Version unabhängig von der Sprache angewendet werden kann:

perf_counter[\Prozessor(_Total)\Benutzerzeit (%)] # deutsch
perf_counter[\238(_Total)\5180]                   # sprachunabhängig

Ob die „Übersetzung“ korrekt ist, können Sie mit dem Zabbix-Agent sofort testen.

c:\Program Files\zabbix>
zabbix_agentd.exe -t perf_counter["\Prozessor(_Total)\Benutzerzeit (%)"]
perf_counter[\Prozessor(_Total)\Benutzerzeit (%)] [d|0.000000]

c:\Program Files\zabbix>
zabbix_agentd.exe -t perf_counter["\238(_Total)\5180"]
perf_counter[\238(_Total)\5180]               [d|0.000000]
Die numerischen Äquivalente können zwischen den Windows-Versionen variieren. Testen Sie die Items auf verschiedenen Versionen, bevor Sie diese in allgemeingültige Templates übernehmen.
Performance-Counter über numerische Referenz auslesen

Wichtige Leistungsindikatoren (Performance-Counter)

Die Liste der Leistungsindikatoren, die Sie über die Performance-Counter überwachen können, ist lang und unübersichtlich. Hier ein Auszug mit wichtigen Indikatoren, die Sie auf allen Windows-Systemen vorfinden sollten.

Datenträger

Item-Key numerisch: perf_counter[\236(_Total)\198]
Item-Key deutsch: Logischer Datenträger(_Total) Aktuelle Warteschlangenlänge
Gibt die durchschnittliche Anzahl von Lese- und Schreibanforderungen an, die in die Warteschlange gestellt wurden. Pro Spindel sollte es maximal zwei ausstehende Lese- und Schreibanforderungen geben. Ein zu hoher Wert ist ein Hinweis auf ein langsames Festplattensystem.

Item-Key numerisch: perf_counter[\236(_Total)\10,90] (Lesen)
Item-Key numerisch: perf_counter[\236(_Total)\12,90] (Schreiben)
Gibt die Lese- bzw Schreibvorgänge pro Sekunden im angegebenen Zeitraum (hier 90s) aller Logischen Datenträger an.

Die Festplatten können auch einzeln gemessen werden. Ersetzen Sie (_Total) durch einen Laufwerksbuchstaben, zum Beispiel perf_counter[\236(C:)\1028].

Prozessor

Item-Key: perf_counter[\238(_Total)\6]
Prozessor(_Total) Prozessorzeit (%). Prozentuale Auslastung des Prozessors, Prozessor ist zu X% nicht im Leerlauf.

Item-Key: perf_counter[\238(_Total)\142]
Prozessor(_Total) Benutzerzeit (%). Prozentuale Auslastung des Prozessors im Benutzermodus.

Item-Key: perf_counter[\238(_Total)\144]
Prozessor(_Total) Privilegierte Zeit (%). Prozentuale Auslastung des Prozessors im privilegierten Modus (Betriebssystemkomponenten und hardwaremanipulierende Treiber).

Die einzelnen Werte der Prozessorauslastung sollten nicht dauerhaft 75% übersteigen. Anstatt (_Total) können CPUs einzeln überwacht werden. Zum Beispiel perf_counter[\238(0)\6]

Netzwerk

Item-Key: perf_counter[\638\2710]
Per TCPv4 hergestellte Verbindungen. Anzahl der TCP-Verbindungen, deren aktueller Zustand ESTABLISHED oder CLOSE-WAIT ist.

Item-Key: perf_counter[\638\422]
TCPv4-Verbindungsfehler. Muss als Delta Speed per second gespeichert werden.

Item-Key: perf_counter[638\650]
TCPv4 Zurückgesetzte Verbindungen. Anzahl TCP-Verbindungen, die direkt vom Zustand ESTABLISHED oder CLOSE-WAIT in CLOSED übergegangen sind. Muss als Delta Speed per second gespeichert werden.

Arbeitsspeicher

Item-Key: perf_counter[\4\24]
Speicher Verfügbare Bytes. Freier Arbeitsspeicher. Geben Sie B als Einheit an.

Item-Key: perf_counter[\4\818]
Speicher Cachebytes. Aktuelle Größe des Dateisystemcache in Bytes.

Item-Key: perf_counter[\4\42]
Speicher Seitenlesevorgänge/s. Lesevorgänge, die vom Datenträger statt aus dem Arbeitsspeicher gelesen werden. Indiz für zu geringen Arbeitsspeicher. Sollte dauerhaft nicht 100 Lesevorgänge pro Sekunde überschreiten.

Item-Key:perf_counter[\4\56]
Speicher Auslagerungsseiten (Bytes). Vom Arbeitsspeicher auf den Datenträger ausgelagerter Speicher.

Exchange

Item-Key: perf_counter[\20458\22202] Anzahl der aktiven Client-Verbindungen zu Exchange

Item-Key: perf_counter[\20458(_Total)\20464] Anzahl der gesendeten E-Mails
Item-Key: perf_counter[\20458(_Total)\20468] Anzahl der empfangenen E-Mails
Speichern Sie diese beiden Items als Delta ab.

Überwachung der ausgehenden Mails pro Minute in MS Exchange

Microsoft hat eine Liste mit wichtigen Performance-Countern zusammengestellt. In dieser Liste sind auch Vorschläge enthalten, ab welchen Werten Sie sich alarmieren lassen sollten.

Netzwerkkarten identifizieren

Mit den Items net.if.in und net.if.out können Sie – wie bei Unix-Systemen auch – den Netzwerkverkehr messen. Zuweilen problematisch ist die Angabe des Schnittstellennamens. Windows-Systeme können mit Angaben wie eth0 nichts anfangen. Benutzen Sie das Kommando route print, um sich die Benennung der Netzwerkkarten anzuzeigen.

C:\Users\thorsten.kramm>route print
=============================================================================
Schnittstellenliste
 10 ...00 0c 29 4d 2c bb ...... Intel(R) PRO/1000 MT-Netzwerkverbindung
  1 ........................... Software Loopback Interface 1
 12 ...00 00 00 00 00 00 00 e0  isatap.{066F7D85-149F-4F53-BA00-E636678E0FC1}
=============================================================================

Zur Überwachung des Netzwerkverkehrs legen Sie dann die Items wie folgt an:

net.if.in["Intel(R) PRO/1000 MT-Netzwerkverbindung"]
net.if.out["Intel(R) PRO/1000 MT-Netzwerkverbindung"]

Wenn Sie ein Template anlegen, sollten Sie den Namen der Netzwerkkarte über ein Makro definieren.

Die Angabe der Netzwerkkarte unter Windows ist manchmal kryptisch.


Monitoring per Windows Management Instrumentation (WMI)

Der Zabbix-Agent für Microsoft Windows bietet die Möglichkeit, WMI-Abfragen durchzuführen. Dabei wird das erste gefundene Objekt als Item-Value zurückgeliefert.

WMI-Abfragen können Sie über die PowerShell testen, bevor Sie diese als Item im Zabbix-Server anlegen. Geben Sie beispielsweise die folgenden Kommandos ein:

Get-WmiObject -query "select Status from Win32_BIOS"
Get-WmiObject -query "select Status from Win32_ComputerSystem"
Get-WmiObject -query "select State from Win32_Service"
Get-WmiObject -query "select State from Win32_Service where Name = 'Zabbix Agent'"

Wenn Sie diese Abfrage über den Zabbix-Agenten ausführen, wird nur der Wert für den Schlüssel „Status“ zurückgegeben.

Loggen Sie sich auf der Eingabeaufforderung cmd.exe eines Windows-Systems ein und wechseln Sie in den Ordner, in dem der Zabbix-Agent installiert ist. Testen Sie eine WMI-Abfrage mit dem folgenden Kommando:

C:\Windows\system32>cd "c:\Program Files\zabbix"
c:\Program Files\zabbix>zabbix_agentd.exe -t wmi.get[root\cimv2,"select status from Win32_DiskDrive where Name like '%PHYSICALDRIVE0%'"]
 wmi.get[root\cimv2,select status from Win32_DiskDrive where Name like '%PHYSICALDRIVE0%'] [t|OK]

Wie der Abfrageausdruck schon vermuten lässt, lesen Sie damit den Status der ersten physikalischen Festplatte aus. Windows gibt den String „OK“ zurück. Achten Sie darauf, dass die Angabe des Namespace (erste Option) ohne oder mit doppelten Anführungsstrichen umschlossen ist. Andernfalls werden Sie die Fehlermeldungen „Invalid number of parameters“ oder „Cannot obtain WMI information“ erhalten. Wenn Sie ein Item per Zabbix-Get testen, müssen Sie den Namespace in doppelte Anführungszeichen setzen:

zabbix_get -s 192.0.2.40 -k wmi.get["root\cimv2","select InstallDate from Win32_Product"]

Jede WMI-Klasse existiert in einem Namespace. Der Standard-Namespace für die meisten Abfragen ist „root/cimv2“. Der Item-Key wmi.get erwartet immer die Angabe eines Namespace.

WMI-Objekte finden

Microsoft stellt ein Programm namens „WMI CIM Studio“ zum kostenlosen Download bereit. Mit diesem Programm können Sie alle WMI-Klassen und die darin enthaltenen Objekte und Eigenschaften durchstöbern. WMI-Studio besteht aus HTML-Dateien und den darin eingebundenen Applets, die nur im Internet Explorer funktionieren. Auf aktuellen Systemen wie Windows Server 2012 müssen Sie die Dateien C:\Program Files (x86)\WMI Tools\studio.htm und C:\Program Files (x86)\WMI Tools\browser.htm mit einem Editor öffnen und in der zweiten Zeile folgende neue Zeile einfügen:

<meta http-equiv="X-UA-Compatible" content="IE=8" />

Andernfalls wird das Active-X-Steuerelement nicht korrekt geladen, und es kommt keine Verbindung zum lokalen WMI-Provider zustande.

Anpassen der HTML-Datei von WMI-Studio

Sobald Sie die HTML-Datei geändert haben, können Sie diese im Internet Explorer öffnen. Unter Umständen müssen Sie den Internet Explorer mit der Option „Als Administrator öffnen“ starten. Im Dialogfenster „Connect to namespace“ geben Sie für den ersten Test „root\CIMV2“ ein. WMI CIM Studio zeigt Ihnen alle verfügbaren WMI-Objekte und die darin enthaltenen Methoden und Eigenschaften an. Sie können die Eigenschaften aber nicht nach deren Werten abfragen. Dazu können Sie die PowerShell oder das Programm WMI Object Browser verwenden, welches Sie durch Öffnen der Datei browser.htm starten.

Durchsuchen der WMI-Objekte mit dem WMI CIM Studio von Microsoft

WMI-Items-Anlegen

Das Auslesen der VMI-Objekte erfolgt über den Zabbix-Agenten. Folglich legen Sie ein Item wie gewohnt vom Typ „Zabbix Agent“ oder „Zabbix Agent Active“ an. Wählen Sie über den Button „Select“ wmi.get[<namespace>,<query>] aus. Geben Sie nun einen Namespace und eine WMI-Query an, welche Sie zuvor mit den bereits erwähnten Methoden getestet haben. Über den Test sollten Sie auch herausgefunden haben, welchen Datentyp die Abfrage zurückgibt.

Anlegen eines Items, welches eine WMI-Abfrage auslöst

PowerShell als User-Parameter

Wenn Sie PowerShell-Skripte als User-Parameter in den Zabbix-Agenten integrieren möchten, geben Sie die Skripte in der zabbix_agentd.conf wie folgt an. Wenn das Skript eine PowerShell-Extension benötigt, geben Sie diese ebenfalls an.

UserParameter=item.key,powershell.exe -command  C:\'Program Files'\zabbix_agent\skript.ps1
UserParameter=exchange.mailq,powershell.exe 
 -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\bin\exshell.psc1" 
 -command  C:\'Program Files'\zabbix_agent\exchange_mailq.ps1

Die Angaben zum User-Parameter werden in einer Zeile angegeben. Der Zeilenumbruch aus dem Beispiel darf nicht übernommen werden.

Die Datei exchange_mailq.ps1 aus dem Beispiel sieht dann wie folgt aus:

# Script for zabbix to get the total amount of emails remaining in any 
# of the exchange queues
# Place the script in the program folder from the zabbix agent.
# Add a user parameter to the zabbix_agent.conf
$total = 0
foreach ($i in get-exchangeserver)
{
    $serverrole = $i.serverrole
    if ($i.ishubtransportserver -eq "True")
    {
        $server = $i.name
        foreach ($Queue in get-queue -server $server)
        {
            $queuename = $queue.NextHopDomain
            $messagecount = $queue.Messagecount
            $total = $total + $messagecount
        }
    }
}
$total