Zabbix:Template Windows Robocopy
Aus znilwiki
Vorschau
Hier die Ansicht "Latest Data" mit den Rückgabecodes
Value Mapping
Eigentlich ist es ganz einfach die Ausführung von Robocopy zu überwachen.
Denn das Programm nutzt die Möglichkeit beim Beenden einen Fehlercode zu übergeben recht ausführlich.
Nachzuschlagen zum Beispiel unter:
Generell lässt sich sagen das jeder Exit-Code ab 8 einen Fehler bedeutet!
Ich habe mir dazu in Zabbix mein persönliches Value-Mapping zusammengestellt (was Ihr mit dem Template für Zabbix 3.0.x importieren könnt):
0 ⇒ No Change 1 ⇒ Copy OK 2 ⇒ Extra Files (deleted) 3 ⇒ Copy OK + Extra Files (deleted) 4 ⇒ Some Files can not be overwritten 5 ⇒ New files copied + some Files can not be overwritten 6 ⇒ Extra Files (deleted) + some Files can not be overwritten 7 ⇒ New files copied + Extra File + Files can not be overwritten 8 ⇒ FAILED 9 ⇒ FAILED (Copy OK) 10 ⇒ FAILED (Extra Files) 11 ⇒ FAILED (Copy OK + Extra Files) 12 ⇒ FAILED (Overwrite Problems) 13 ⇒ FAILED (Copy OK + Overwrite Problems) 14 ⇒ FAILED (Extra Files + Overwrite Probs) 15 ⇒ FAILED (Copy OK, Extra Files + Overwrite Probs) 16 ⇒ FATAL ERROR
Nun müssen wir nur noch diesen Exit-Code von Robocopy zu Zabbix bekommen.
Vorbereitung auf dem Host
Variante 1: Installierter Zabbix-Agent
Also in meinen Umgebungen ist auf den Servern immer der Zabbix-Agent installiert.
Es gibt also ein Verzeichnis im welchen der Zabbix-Agent und dessen Konfigurationsdatei liegt, in meinen Umgebungen sind das in der Regel folgende Pfade:
Agent: "C:\Program Files\Zabbix\zabbix_agentd.exe" Konfiguration: "C:\Program Files\Zabbix\zabbix_agentd.win.conf"
Das wichtige ist aber das ich auch die zabbix_sender.exe dort mit ablege!
Sender: "C:\Program Files\Zabbix\zabbix_sender.exe"
Mit dem zabbix_sender.exe kann man nämlich ganz hervorragend aus eigenen Skripten und Programmen heraus Daten an den Zabbix-Server senden.
Und in der Konfigurationsdatei steht drin für welchen Host wir uns melden - und an welchen Server wir die Daten senden müssen.
Deshalb rufen wir die zabbix_sender.exe einfach wie folgt auf:
"C:\Program Files\Zabbix\zabbix_sender.exe" -c "C:\Program Files\Zabbix\zabbix_agentd.win.conf" -k Name.des.Keys -o Wert
Damit das funktioniert muss in der Konfigurationsdatei zwingend der ServerActive=
Eintrag gesetzt sein:
ServerActive=192.168.50.253:10051
Der Vorteil ist das dies auch nach einem Update des Agenten, Ändern des Host-Namen oder Wechsel des Zabbix-Server weiter funktioniert ohne das ich in meinem Batch-Skript etwas ändern muss.
Variante 2: Direkt per zabbix_sender.exe
Alternativ lassen sich die Parameter auch alle einzeln an die zabbix_sender.exe übergeben:
zabbix_sender.exe -I <IP-Adresse> -p <Port> -s <Name_des_Host_auf_dem_Zabbix_Server> -k Name.des.Keys -o Wert
Ihr müsstet euch diese also an eine geeignete Stelle kopieren.
Einbau der Meldung in das Robocopy-Script
Der Aufruf von Robocopy muss über ein Skript erfolgen (.bat oder .cmd) und sieht zum Beispiel wie folgt aus:
robocopy \\SERVER\D$\Netzlaufwerke\BOB\ \\NAS\backup1\Netzlaufwerke\BOB\ /MIR /R:10 /W:3
Nun schreiben wir unmittelbar danach folgende Zeile:
"C:\Program Files\Zabbix\zabbix_sender.exe" -c "C:\Program Files\Zabbix\zabbix_agentd.win.conf" -k znil.robocopy[Netzlaufwerke-BOB] -o %ERRORLEVEL%
Direkt nach der Ausführung von Robocopy wird also der Exit-Code an Zabbix gesenden. Die Zeile muss direkt auf den Befehl von Robocopy folgen!
Nachdem nämlich zum Beispiel die zabbix_sender.exe den Wert gesendet hat steht in %ERRORLEVEL%
der Exit-Code der zabbix_sender.exe drin.
Gesendet werden die Daten an den Host der in der Konfigurationsdatei definiert sind - mit dem Item-Key znil.robocopy[Netzlaufwerke-BOB].
Dieses muss es natürlich dann noch für den Host geben.
Item-Key anlegen
Das können wir entweder in einem eigenen Template machen (empfohlen) oder auch direkt auf dem Host:
Wichtig ist das
- Das Type auf Zabbix Trapper steht
- Der Key absolut identisch mit dem ist den wir bei der zabbix_sender.exe eintragen
Ich verwende hier immer
znil.robocopy[Name_des_Jobs]
Den Wert in den eckigen Klammern passe ich also immer an.
Jetzt könnt ihr euer Skript einmal laufen lassen - und er sollte euch unter Latest Data' etwas wie folgt liefern:
Trigger anlegen
Generell sehe ich 2 sinnvolle Prüfungen beim Trigger:
- ob der letzte Exit-Code größer als 7 ist
- Wenn mehr als x Minuten/Stunden/Tage keine neuen Daten gekommen sind
mit ersterem Prüfen wir den Kopiervorgang an sich, mit zweiten ob unser Job überhaupt gelaufen ist.
Die Expression für die Prüfung auf den Exit-Code kann also wie folgt aussehen:
{znil Template Robocopy Example:znil.robocopy[Netzlaufwerke-BOB].last()}>7
Und die Prüfung ob der Job in den letzten 3 Tagen gelaufen ist so:
{znil Template Robocopy Example:znil.robocopy[Netzlaufwerke-BOB].nodata(3d)}=1
Template
Nachfolgend das Template. Es hat das Item für das obige Beispiel, die beiden Trigger - und enthält das Value-Mapping:
Es ist erst ab Zabbix 3.0.x geeigent!