tech-trends

Monitoring mit Prometheus

// 06-05-2019

Eines unserer letzten Learning-Friday Projekte hatte Prometheus als Inhalt. Der mythologische Prometheus ist ein Titan, Beschützer der Menschen und Bringer des Feuers. Für uns als Entwickler ist https://prometheus.io/ der neue Titan im Bereich des metrik-basierten Monitorings. Prometheus ist “Built for the Cloud”. Wir erwarten demnächst eine enge Integration in OpenShift, wodurch Prometheus-Kenntnisse ein “Muss” für Systemadministratoren im Bereich Red Hat Clouds werden. Interessant auch, dass sich der neue Eclipse Microprofile Metrics Standard am Format von Prometheus anlehnen wird. Grund genug also, sich das mal anzusehen.

Unsere Ziele

Damit wir nicht nur einen künstlichen Prototypen bauen, den wir nachher wieder wegwerfen, war unser Plan Prometheus in Hogarama zu integrieren. Zusätzlich zum vorhandenen, zugegebenermaßen mit Problemen behafteten, Hogarama-GUI sollten die Sensordaten in Prometheus angezeigt werden. Wenn möglich schneller als im alten GUI.

Was kann Prometheus?

Mit Prometheus kann man Metriken sammeln und anzeigen. Genauer, numerische Zeitreihen. Prometheus ist also kein allgemeines Monitoring Tool zum Anzeigen von z.B.  Fehlermeldungen, aber man könnte beispielsweise die Anzahl der Fehlermeldungen anzeigen. Neben dem einfachen Anzeigen von Daten kann man auch Funktionen auf die Daten anwenden. Gemeinsam mit der Integration in Grafana können wir Fehlerzustände erkennen und ein entsprechendes Alerting aufsetzen.

Installation von Prometheus in OpenShift

Zur Installation folgten wir der Anleitung von Robust Perception. Hierbei wird die Prometheus Konfiguration mit Hilfe einer Config Map dem Pod zur Verfügung gestellt. Da Prometheus die Konfiguration per Default nicht ganz dort erwartet, mussten wir mit Startparametern in der Deployment-Config etwas nachhelfen:

 

containers:
  - args:
    - '--config.file=/prometheus-data/prometheus.yml'
    - '--storage.tsdb.path=/prometheus'

 

Prometheus war dann rasch einsatzfähig. Nachdem wir in der JBoss-Anwendung (hogajama) die Sensorwerte mit Hilfe einer Gauge Metric zur Verfügung stellten, konnten wir die Feuchtigkeitswerte unser Pflanzen anzeigen:

Grafana

Die Graphen in Prometheus sind schon ganz brauchbar, aber so richtig gut schauen sie nicht aus. Um ansehnliche Dashboards zu bauen, haben wir einen Grafana Pod in unsere OpenShift Installation integriert. Mit Hilfe eines Persistent Volume Claims auf /var/lib/grafana stellten wir Grafana Speicherplatz zur Verfügung und mittels Config Maps auf /usr/share/grafana/conf/, /etc/grafana/provisioning/dashboards, /var/lib/grafana/dashboards, und /etc/grafana/provisioning/datasources können wir die Dashboards speichern, versionieren und wiederherstellen.

Zusätzlich zur Anzeige der Sensorwerte dient Grafana auch dazu Fehlerzustände zu erkennen. Als Beispiel: Wie man sieht schwanken die Sensorwerte normalerweise ein wenig. Wenn sich die Werte für ein paar Minuten nicht ändern deutet das darauf hin, dass keine neuen Sensordaten in die Datenbank geschrieben werden.

Durch die Verknüpfung von Aktivierungs-Events der Pumpe mit dem Anstieg der Feuchtigkeitswerte können wir erkennen, ob die Bewässerung korrekt funktioniert.

Zusammenfassung

Prometheus und Grafana sind eine gute Kombination um schnell Informationen in ansprechender Form bereitzustellen. Schwierigkeiten hat uns zu Beginn bereitet, dass wir keine Architekturübersicht bzw. eine Beschreibung der Basiskonzepte gefunden haben. Beispielsweise werden die Zeitstempel erst am Prometheus Server hinzugefügt und nicht bereits bei der Erstellung der Metriken.

Besonders gefallen hat uns, wie einfach man Alerting in das Gesamtsystem integrieren und auch mehrere Metriken miteinander verknüpfen kann.

// Autor

Erhard & Ludwig