Standort-Übersicht mit Icinga

Wie ich hier ja schon einmal erwähnt habe, setzen wir für die Systemüberwachung unser Server und Klienten Icinga ein. Und das läuft ganz gut:

Die Konfigurationsdateien für die über 250 Windows- und Linux-Rechner werden mittlerweile per Skript erzeugt. Die dafür notwendigen Basisdaten liegen in einer Datenbank und Perl baut die Host-, Hostgroup- und Servicegroup-Configs (dabei muss man leider auch zwischen Windows- und Linux-Clients Unterschiede machen: Die Windows-Namen müssen groß geschrieben werden, da NSClient++ den Hostnamen - wenn dies automatisch geschieht - nur als Großbuchstaben zurück gibt…wieder ein paar überflüssige Zeilen Code mehr 🙂 ).  Irgendwann hoffe ich ja, diese Infos aus dem OTRS::ITSM zu ziehen, aber das dauert wohl noch etwas, bis ich da durchschaut habe, wie ich Hosts und Standort-Zuordungen vernünftig exportieren kann.

Jetzt haben wir zwar alle notwendigen Informationen, aber richtig interessant wird es ja erst, wenn man diese auch den Studierenden in vernünftiger Form zur Verfügung stellen kann. Am Besten bunt und einfach. Also fix Nagvis installiert und eine Übersichtskarte unserer Standorte gebaut. Aber damit war der Herr Dennis nicht zufrieden, der möchte Zoomen und Blinken und weiß der Geier. Da Nagvis sowas aber leider nicht kann (jedenfalls habe ich es damit nicht innerhalb von 5 Minuten hinbekommen), muss etwas eigenes her.

Auftritt Icinga-API: Damit ist es möglich, auf die Informationen von Icinga strukturiert zuzugreifen (die Icinga-Leute nutzen das auch selbst, bspw für ihr neues Webinterface). Nachteil (aus meiner Sicht) ist allerdings, dass man dafür PHP benötigt. Aber was tut man nicht alles für die Nutzer…  Schritt eins ist, die notwendigen Infos über die API auszulesen. Das ist kein großes Problem, die Doku dazu ist recht gut (obwohl ich ein, zwei Mal das Gefühl hatte, dass in der API-Doku Abfrage-Parameter und -objekte beschrieben werden, die die API gar nicht kennt 🙂 ). Für die Studierenden als interessant  befunden wurden die Infos zu Anzahl der Rechner pro Standort, Hardware-Verfügbarkeit und ob die Rechner besetzt oder frei sind.

Als nächstes kommt die grafische Darstellung dieser Daten. Da ich mit Openstreetmap nicht nach 5 Minuten zurecht kam (man mag hier vielleicht ein Muster erkennen), kommt dafür momentan GoogleMaps zum Einsatz. Auch da ist eine gute Doku vorhanden, so dass nur noch die Geo-Koordinaten der Standorte ermittelt werden müssen (Momentan habe ich diese noch manuell herausgesucht und der Datenbank gespeichert. Allerdings wäre es auch möglich, diese mittels der Adresse der Standorte per Skript zu erzeugen…allerdings hat die seperate Speicherung den Vorteil, dass man per GPS die exakten Koordinaten eines Standorts erfassen kann). Das dafür notwendige Javascript-Zeug erzeuge ich natürlich auch per Skript 🙂

Aber Dennis wollte ja noch mehr: Man soll auf die Standorte klicken können, um mehr Infos zu erhalten. Gefährliches Halbwissen kommt mir wieder in den Sinn: Per CSS und Javascript kann man ja Elemente sichtbar und unsichtbar setzen… Allerdings wollte ich neben PHP nicht noch ‘ne Sprache nehmen, die ich nicht sonderlich mag und habe ich aus diesem Grund für jquery als Framework entschieden…obwohl ich das bestimmt auch sehr quick‘ dirty benutze, da ich auch diesen Code über PHP und Schleifen erzeugen lasse… im Endeffekt entstehen so über 1000 Zeilen HTML aus 90 Zeilen PHP. 🙂 Für die Webseite selbst nutze ich Smarty als Framework - einfach, weil es durch die Trennung von Template und Skript übersichtlicher wird - klar kann man das ganze auch hardcore direkt mit PHP bauen, aber dann führt das entweder zu Kraut und Rüben oder aber - aus meiner Sicht - unnützer Mehrarbeit für die “saubere” Lösung.