Aktionen

Zabbix:Template Windows Robocopy

Aus znilwiki

1 Vorschau

Hier die Ansicht "Latest Data" mit den Rückgabecodes
Zabbix Template Robocopy-001.png


2 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.


3 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.



4 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.



5 Item-Key anlegen

Das können wir entweder in einem eigenen Template machen (empfohlen) oder auch direkt auf dem Host:
Zabbix Template Robocopy-002.png

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:
Zabbix Template Robocopy-003.png



6 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




7 Template

Nachfolgend das Template. Es hat das Item für das obige Beispiel, die beiden Trigger - und enthält das Value-Mapping:

znil_Template_Robocopy_Example_Zabbix_3.0.x.zip

Es ist erst ab Zabbix 3.0.x geeigent!



8 Kommentare


Kommentar hinzufügen
znilwiki freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, trage deinen Namen oder deine Email-Adresse ein oder melde dich an. Du kannst das Feld auch einfach leer lassen.