Nachdem wir letztes Jahr das Grafana Modul für Icinga Web geforkt haben, haben wir uns überlegt, ob es nicht auch andere Möglichkeiten gibt, Icinga Performance Daten grafisch im Web darzustellen. Neben Icinga eine Grafana Instanz nur für das Rendern von Graphen zu betreiben ist viel Aufwand und zusätzliche operative Komplexität, egal wie toll man Grafana findet. Außerdem ist die Installation des grafana-image-renderers nicht immer trivial. Also haben wir uns etwas mit dem Thema beschäftigt und versucht ein Icinga Web Modul zu erstellen, das diese Probleme adressiert.
Was dabei rauskam, ist das Icinga Web Modul für Performance Data Graphs. Diese neue Modul ist einfach zu installieren und rendert Graphen für Performance Daten direkt im Browser. Zusätzliche Software ist nicht nötig!
Wie funktioniert das Ganze?
Hinter dem neuen Icinga Web Modul stehen tatsächlich mehrere Module, die sich um zwei Aspekte kümmern.
- Ein „Frontend“ Modul, das für Rendern der schicken Graphen zuständig ist
- Und ein „Backend“ Module, das die Daten holt und aufbereitet
Wir haben uns entschieden, mehrere kleine Backend Module zu schreiben, statt einem großen Modul, das alle möglichen Datenquellen ansprechen kann. Es gibt also je Datenquelle (Graphite, InfluxDB, Elasticsearch, etc.) ein Modul und ein zentrales Frontend Modul.
Das hat den Vorteil, das man sich im einzelnen Modul auf eine Aufgabe konzentrieren kann und man keine Angst haben muss, das Änderungen andere Datenquellen negativ beeinflussen. Durch die Trennung von Rendern und Daten holen hat man außerdem die Möglichkeit, problemlos weitere Datenquellen zu implementieren oder bestehende an eigene Bedürfnisse anzupassen.
Der gesamte Code steht frei und mit GPL-2.0 Lizenz zur Verfügung. Aktuell haben wir ein Backend Implementierung für InfluxDBv1, InfluxDBv2 und Graphite. Elasticsearch und OpenSearch stehen noch aus. Falls jemand Bedarf hat, freuen wir uns natürlich immer über ein Sponsoring in Form einer Beauftragung oder von Open Source Code.
- https://github.com/NETWAYS/icingaweb2-module-perfdatagraphs
- https://github.com/NETWAYS/icingaweb2-module-perfdatagraphs-graphite
- https://github.com/NETWAYS/icingaweb2-module-perfdatagraphs-influxdbv1
- https://github.com/NETWAYS/icingaweb2-module-perfdatagraphs-influxdbv2
Wie installiert und konfiguriert man alles?
Zuerst installiert und aktiviert man das zentrale Frontend Modul und eines der Datenquellen Module, je nach dem, welchen Writer man in Icinga nutzt.
git clone https://github.com/NETWAYS/icingaweb2-module-perfdatagraphs.git /usr/share/icingaweb2/modules/perfdatagraphs
git clone https://github.com/NETWAYS/icingaweb2-module-perfdatagraphs-graphite.git /usr/share/icingaweb2/modules/perfdatagraphsgraphite
icingacli module enable perfdatagraphs
icingacli module enable perfdatagraphsgraphite
Danach muss die Datenquelle noch konfiguriert werden, entweder im Browser über die Modul Konfiguration oder direkt in der INI Datei:
cat /etc/icingaweb2/modules/perfdatagraphsgraphite/config.ini
[graphite]
api_url = "https://graphite.netways.de:8081"
api_username = "markus"
api_password = "******"
api_timeout = "5"
Hat man beide Module aktiviert, werden automatisch Graphen für Hosts und Services angezeigt. Aktuell wird für jede Performance Daten Zeitserie ein Graph generiert. Grund dafür ist, das die Größenordnung der Daten für ein einzelnes Plugin sehr unterschiedlich sein kann. Heißt, eine Metrik kann zweistellig sein und die andere nur Bruchteile.
Mittels Icinga Custom Variablen kann man Graphen bei Bedarf anpassen. Beispielsweise lassen sich bestimmte Metriken inkludieren oder entfernen. Außerdem kann man den „wichtigsten“ Graph an die erste Stelle rücken, alle weiteren lassen sich mit einem Klick anzeigen.
apply Service "icinga" {
vars.perfdatagraphs_config_metrics_include = ["uptime", "*_latency"]
vars.perfdatagraphs_config_metrics_exclude = ["avg_latency"]
vars.perfdatagraphs_config_highlight = "max_latency"
}
Ein Feature an dem wir noch arbeiten, ist die automatische Umrechnung von Einheiten. Die Einheit einer Metrik kann man über eine Variable mitgeben, dieser Text wird dann im Graph angezeigt und einige lösen Funktionen für die Umrechnung aus (bytes, seconds, percentage, etc.).
apply Service "ping6" {
vars.perfdatagraphs_metrics["pl"] = {
unit = "percentage"
}
vars.perfdatagraphs_metrics["rta"] = {
unit = "seconds"
}
}
Natürlich lassen sich Graphen auch komplett deaktivieren:
apply Service "ping4" {
vars.perfdatagraphs_config_disable = true
}
Das Modul ist noch sehr frisch und es gibt noch viele Dinge, die wir gerne verbessern wollen, aber auf dem Weg dahin möchten wir das alle was davon haben. Also probiert es gerne aus. Das Ganze soll und kann natürlich nicht Grafana ablösen, dafür ist Grafana auch viel zu cool. Es soll lediglich eine einfach zu installierende und simple Lösung für Performance Daten Graphen in Icinga Web sein, deren Daten bei Bedarf in Grafana weiterverwendbar sind.
Wir freuen uns über Feedback und Pull Requests auf GitHub.
Solltet ihr Interesse an Sponsoring oder Hilfe rund um den neuen, schicken Graphen haben, könnt ihr euch gerne bei unserem Outsourcing– oder Sales-Team melden.

























