WinZabbixREPORTER.exe
Aus znilwiki
Download und Changelog
Vorwort
Ich wollte aus Zabbix einen regelmäßigen, automatischen Report erhalten, zum Beispiel über die Auslastung der Server. Leider gibt es in Zabbix selbst nichts dazu - der Menüpunkt "Reports" in Zabbix iist nur für einen Online Überblick gedacht. Man kann sich zwar über "Bar reports" einiges zusammenbauen - aber leider nicht speichern und schon gar nicht automatisiert abrufen.
Es gibt zwar schon eine Lösung von anderen Anwendern die mit auf dem Zabbix-Server läuft und PDF-Reports versenden kann ( siehe [hier https://www.zabbix.com/forum/showthread.php?t=24998] ) ... aber die muss auch regelmäßig angepasst werden an die Zabbix-Versionen. Und sie kann "nur" die Grafiken abrufen und in ein PDF packen. Das ist leider für einen professionellen Bericht zu wenig.
Ich habe mich deshalb auf die Zabbix-API gestürzt. Auch in dieser gibt es zwar durchaus Änderungen - jedoch ändert sich dann auch die API-Version. Diese kann man abfragen und somit in einem Programm entsprechend die Abfrage anpassen. Jede Menge Beispiele für die direkte Abfrage der Zabbix-API per Commandline / CLI / Batch habe ich bereits im Artikel Zabbix API mit cURL unter Windows abfragen beschrieben. Genauer gesagt war dieser Artikel die Grundlage für das eigentliche Reporting-Programm - ich musste erst einmal ausklingeln wie ich denn an die verschiedenen Werte komme.
WinZabbixREPORTER.exe ist ein Windows-Programm. Warum? Nun weil ich nun schon seit mehr als 17 Jahre unter Windows programmiere und mich da nun mal am besten auskenne. Zum anderen war einer der ersten Ideen Microsoft Word für den eigentlichen Report zu nutzen - so erhält man einen Bericht den man ggf. auch noch leicht Nachbearbeiten kann und ich musste mich im ersten Schritt nicht um die äußere Form kümmern. Die Engine um direkt, also nativ ohne Word, auch PDF-Dateien zu erzeugen ist bereits im Programm eingebaut - jedoch wird zu diesem Zeitpunkt noch ein Report damit erstellt. Bei Word muss ich mich darum kümmern wie viel auf eine Seite passt - bei den PDF's muss ich mich selbst darum kümmern. Die "Engine" dafür muss ich noch schreiben.
Geschrieben wurde das Programm in AutoIt (siehe z.B. deutsche Community Webseite http://autoit.de). Auch hier: Warum? Nun es sollte ein "Standalone" Programm dabei herauskommen ... und nichts was noch ein .NET Framework etc. braucht. Mit AutoIt kann ich eine(!) .exe Datei bauen die alles dabei hat was diese braucht - inklusive benötigter Dateien, Grafiken etc.
Das Programm an sich wäre relativ leicht z.B, auf Perl und damit auf Linux umzusetzen (bis auf die eigentliche Reporterstellung) ... aber das wäre ein anderes Projekt.
Es verwendet die Windows-Version von cURL (Siehe http://curl.haxx.se/download.html) für den eigentlichen Aufruf ist also ein Wrapper um diese herum - Warum? Nun, ich hätte das auch alles nativ in AutoIt machen können ... aber gleich der erste Kunde für den ich überhaupt angefangen habe dieses Tool zu Programmieren hatte den Zugriff auf den Zabbix-Server (und damit auch auf die API) über SSL abgesichert. Und mit verschlüsselten https:// Verbindungen habe ich ein echtes Problem in AutoIt (nicht das es nicht ginge, ich selbst habe es nur nicht hinbekommen). So ist es nun egal ob der Zabbix-Server über http oder https angesprochen wird.
Es ist ein Commandline Tool / Kommandozeilen Programm damit es automatisiert in Skripten / Batch für die Berichts-Erstellung genutzt werden kann. Konkret lasse ich das Programm für verschiedene Kunden automatisiert per Aufgabenplanung / geplante Task die Reports erstellen und versenden.
Beispiel-Reports
Um euch einen Überblick zu verschaffen sind hier einige Beispiele über das was der WinZabbixREPORTER so erzeugen kann:
Beispiel 1:
Der Report als PDF: Example01-WinZabbixREPORTER.pdf
Der Report als Bildergallerie mit Kommandozeile und Beschreibung der Parameter: Example01-WinZabbixREPORTER
Beschreibung
WinZabbixREPORTER kann Abfragen der Zabbix-API durchführen und daraus Reports / Berichte erstellen.
Features / Funktionen
- Anmeldung an Zabbix-API
- Anmeldung an Zabbix-Webfrontend
- Abfrage der vorhandenen Hostgruppen
- Abfrage der Mitglieder einer Hostgruppe
- Abfrage aller Items einer Gruppe oder Hosts
- Abfrage von Item-Werten für einen bestimmten Zeitraum
- Erstellung von Min/Max/Druchschnitt Werten für Items für einen bestimmten Zeitraum
- Es wird Datum und Uhrzeit zu den jeweiligen Werten mit ausgegeben
- Abfrage aller Grafiken einer Hostgruppe oder eines Hosts
- Herunterladen aller aller Grafiken - mit Auswahl der Abmessungen und Zeitraum
- Abfrage und herunterladen aller Benachrichtigungen einer Gruppe (nennen wir es Alerts)
- Speicherung aller Aufruf-Parameter in Text-Datei
- Aufruf mit der zuvor erzeugten Text-Datei
- Angabe eines beliebigen Trennzeichen für die Ausgabe bei Abfragen
- Pauschale Angabe der Zeiträume:
- Start des Reports / Abfrage:
- Heute vor x Tagen
- Heute vor x Wochen
- letzten x Wochentag (letzten Montag z.B.)
- letzer Monat
- Zeitraum des Reports / der Abfrage:
- in Stunden, Minuten und Sekunden
- bis zum Ende des Monats (letzter Tag, 23:59:59 Uhr)
- Start des Reports / Abfrage:
- Zusammenfassung aller obigen Punkte zu einem Report in einem Word-Dokument
- Ausgabe auch als PDF
- Verwendung von eigenen Word-Vorlagen für Report
- Automatischer Erweiterung des Dateinamens mit Datum und Uhrzeit möglich
- Eigene oder automatische Überschriften für die Abschnitte
- Grafiken
- Min/Max/Durchschnitt-Tabellen mit Datum und Uhrzeit der jeweiligen Werte
- alle Alarme (Triggermeldungen) mit Datum, Uhrzeit und Text als Tabelle
- Mehrfacher Aufruf hintereinander in Batchdatei möglich, die Datei aus dem ersten Aufruf wird so Stück für Stück erweitert.
- Beispiel:
- Aufruf 1: Deckblatt
- Aufruf 2: Grafiken und Statistiken Hostgruppe A
- Aufruf 3: Grafiken und Statistiken Hostgruppe B
- Aufruf 4: Alarme für alle Hostgruppen und anschliessender Versand per Email
- Versand per Email nach Erstellung
- Umfangreiche Filterfunktionen für alle vorherigen Funktionen
- Nur Items mit bestimmten Namensbestandteilen
- Nur Grafiken mit bestimmten Namensbestandteilen
- Nur Hosts mit bestimmten Namensbestandteilen
- Filtern (Unterdrücken) von Text bei Item-Namen bei der Ausgabe
- Aus "CPU Load in %" z.B. bei der Ausgabe nur "CPU Load" machen
- Bei Benachrichtigungen / Alarmen doppelte Einträge und OK Meldungen unterdrücken
Installation
- Ladet das .zip Archiv herunter: Download
- Entpackt es in ein Verzeichnis eurer Wahl.
- Führt es danach einmal aus (per Doppelklick oder in der Shell)
- Das war es schon!
Die WinZabbixREPORTER.exe entpackt die benötigte curl.exe sowie einige Beispieldateien automatisch ins das gleiche Verzeichnis wie die Hauptdatei.
Das müsste man nicht extra anstoßen, das macht er auch bei einem regulären Aufruf bei Bedarf.
Je nach verwendeter Programmfunktion werden ggf. temporäre Dateien erzeugt - es wird der Pfad der Umgebungsvariablen %TEMP%
verwendet.
Unter anderem wird dort z.B. ein Cookie beim Download von Grafiken angelegt.
Alle temporären Dateien werden beim beenden automatisch wieder gelöscht.
Das Programm muss sich an der Zabbix API und am Webinterface anmelden. Das kann euer normaler Admin-Benutzer sein - oder aber auch ein speziell dafür angelegter (Empfohlen). Dieser Benutzer muss natürlich dann die entsprechenden Rechte in Zabbix haben um auf die Items und Grafiken des abgefragten Hosts oder der Gruppe zugreifen zu können.
Aufruf
Der Aufruf ist wie folgt:
WinZabbixREPORTER.exe <Parameter1> <Parameter2> ... <ParameterX>
Die möglichen Parameter und deren Bedeutung findet Ihr im Abschnitt Parameter.
Wenn das Programm ohne Parameter aufgerufen wird erfolgt eine Ausgabe der Hilfe.
Parameter
Tipps vorweg
- Geht am Anfang das "How-To" einmal durch : LINK zum HowTo
- Testet erst die Anmeldung und danach eine Abfrage der Gruppen und Hosts - wenn das geht stimmen die Rechte schon mal
- Ihr könnt alle Parameter angeben - ohne das eigentliche Kommando
- Also z.B. alle Daten für den Abruf einer Gruppe - und den eigentlichen Befehl
--gethostsingroup
lasst ihr weg. - So werden erst einmal alle anderen Parameter auf Gültigkeit geprüft ohne das er gleich losrennt (im Verbose-Modus)
- Also z.B. alle Daten für den Abruf einer Gruppe - und den eigentlichen Befehl
Und das wichtigste:
Nutzt den VERBOSE Modus!
Ja, der kann einen schier erschlagen - aber dafür findet ihr auch heraus wo das Problem ist. So könnt Ihr sehen welche Parameter er erkannt hat - und vor allem wie er diese erkannt hat.
--verbose
Zeigt ausführliche zu jedem einzelnen Programmschritt an. Unter anderem werden angezeigt:
- Erkannte Parameter und wie diese Interpretiert werden
- Aufruf der externen
curl.exe
- der letze Aufruf steht immer in der Zwischenablage - Rückgabewerte der Zabbix-API im JSON Format (begrenzt auf die ersten 800 Zeichen)
- Interpretation der JSON-Werte durch das Programm (begrenzt auf die ersten 50 Werte)
Das Programm wird durch die Ausgabe der Verbose-Meldungen verlangsamt. Wenn alles funktioniert wie gewünscht sollte diese Option wieder entfernt werden.
Falls die Parameter mit der Option --saveargs=
gespeichert werden wird der --verbose
Parameter entfernt.