5. Grafana¶
5.1. Was ist Grafana?¶
Grafana ist eine plattformübergreifende Open-Source-Software, mittels der man Metriken und Daten aus Anwendungen analyiseren kann. Die Dashboards bestehen u.a. aus Diagrammen, Heatmaps und Histogrammen die dynamisch visualisiert werden. Grafana kann man mit vielen verschiedenen Datenbanken verbinden wie SQL/NoSQL sowie TSDB (time-series database) wie InfluxDB. Grafana ist ein Überwachungstool für IT-Infrasturktur. Die Dashboards visualisieren die Nutzung der IT-Infrasturktur und deren Auslastung. Diese Zeitreihendaten werden in Echtzeit dynamisch graphisch dargestellt. Dadurch wird die Analyse von Ereignissen in Softwareprotokollen und Einblicke in die verbundenen Datenbanken ermöglicht.
5.2. Wie benutzt man Grafana?¶
Grafana wird typischerweise über dessen Webinterface benutzt, zu welchem man sich initial mit dem Benutzernamen „admin“ und dem Passwort „admin“ anmeldet. Nach dem ersten Login wird empfohlen, das Passwort zu ändern. Das Kernstück von Grafana sind die Dashboards, die man neu erstellen oder aus einer Vielzahl von Vorlagen importieren kann. Zum Erstellen eines neuen Dashboards navigiert man über das „+“-Symbol in der Seitenleiste und wählt „Dashboard“. Hier lassen sich verschiedene Visualisierungspanele hinzufügen, die alles von einfachen Graphen bis zu komplexen Heatmaps darstellen können. Nutzer wählen eine Datenquelle und konfigurieren dann die Abfragen, um die gewünschten Daten darzustellen. Grafana unterstützt zudem umfangreiche Alarmierungsregeln und Benutzerberechtigungen, welche die Verwaltung von Benachrichtigungen und Zugriffsrechten erleichtern.
5.3. Warum Grafana nutzen?¶
Mit der dynamischen Visualisierung erhält man Daten, Messwerte und/oder Logs in Echtzeit. Die Metriken lassen sich über CPU, Arbeitsspeicher, Festplatten und Netzwerkressourcen ermitteln. Die Dashbords lassen sich benuzterdefiniert erstellen und konfigurieren. Zusätzlich gibt es ein in Grafana integriertes Alertsystem, dass vor Problemen warnen kann, z.B. bei hoher CPU Auslastung oder Betriebstemperatur. So können beim Erreichen von selbst definierten Schwellwerten Benachrichtigungen per Email oder Webhooks verschickt werden. Es können sogar vordefinierte Alarmregeln verwendet werden, wenn diese mittels Prometheus definiert wurden.
5.4. Installation¶
Grafana kann auf 2 verschiedene Arten auf ein System installiert werden:
Nativ auf den Hostrechner
Als Dockercontainer
Zur Vollständigkeit werden hier beide Varianten beleuchtet, wobei nativ nur auf Debian vorgeführt wird.
5.4.1. Nativ¶
Grafana kann Nativ auf Debian und Ubuntu, RHEL und Fedora und auf SUSE und openSUSE installiert werden. Auch Windows und macOS werden nativ unterstützt.
Beispiel anhand von Debian
Zunächst müssen Dependencies installiert werden:
root~#: apt-get install -y apt-transport-https software-properties-common wget
Anschließend wird der GPG-Key importiert:
root~#: mkdir -p /etc/apt/keyrings/
root~#: wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | tee /etc/apt/keyrings/grafana.gpg > /dev/null
Und das Repository hinzugefügt:
root~#: echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | tee -a /etc/apt/sources.list.d/grafana.list
Zuletzt kann Grafana mit
root~#: apt-get update && apt-get install grafana
installiert werden.
Um den Grafana Server noch zu starten muss man
root~#: systemctl enable --now grafana-server
im Terminal ausführen.
5.4.2. Docker¶
Alternativ kann Grafana auch als einfacher Docker Container aufgesetzt werden. Im Folgenden befindet sich eine einfache docker-compose Datei:
services:
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
ports:
- 3000:3000
environment:
- GF_SERVER_DOMAIN=grafana.example.com
volumes:
- grafana-storage:/var/lib/grafana
5.4.3. Erste Schritte:¶
- Im Browser die URL aufrufen: http://localhost:3000/ und mit folgenden Daten einlogen:
Username: admin
Passwort: admin
Daraufhin wird man aufgefordert das Passwort zu ändern.
5.4.4. Konfiguration für unser Beispiel:¶
Wir benötigen für das Dashboard noch eine Datenbank zum verbinden, in unserem Fall benutzen wir Prometheus:
grafana:
Wie oben, nur ohne environment
prometheus:
image: prom/prometheus:latest
container_name: monitoring_prometheus
restart: unless-stopped
volumes:
- prom-storage:/etc/prometheus/
- prom-storage:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
expose:
- 9090
ports:
- 9090:9090
links:
- cadvisor:cadvisor
- node-exporter:node-exporter
node-exporter:
image: prom/node-exporter:latest
container_name: monitoring_node_exporter
restart: unless-stopped
expose:
- 9100
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
container_name: monitoring_cadvisor
restart: unless-stopped
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
expose:
- 8080
ports:
- 8080:8080
Hier unsere Custom Konfigurationsdatei für Prometheus:
# my global config
global:
scrape_interval: 15s
evaluation_interval: 15s
# Alertmanager configuration
#alerting:
#alertmanagers:
#- static_configs:
#- targets:
#- alertmanager:9093
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus, Cadvisor and Node-Exporter.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090','cadvisor:8080','node-exporter:9100']
Unter dem global: Keyword kann man das Scrape und Evaluations Interval konfigurieren. Man sollte diesen Wert nicht
zu hoch setzen, da im Dashboard aus unerklärlichen Gründen Viele Werte dann nicht angezeigt werden.
Mithilfe des Alertmanagers ist es möglich Warnungen an das Frontend zu schicken. In unserem Beispiel
haben wir diesen auskommentiert, weil wir diesen nicht benötigen. Unter den Scrape configs kann man unter anderem die
globalen Scrape Intervalle überschreiben und definieren von welchen zusätzlichen Datenquellen man Werte scrapen will.
Hier benutzen wir noch den Cadvisor und Node-Exporter zusätzlich zum Prometheus.
5.4.5. Test von Prometheus¶
Um zu Überprüfen ob Prometheus online und auch Daten bekommt, rufen wir den Docker-Container von Prometheus mit der URL http://localhost:9090 auf.
Unter „Status“ -> „Targets“ sollten alle Endpoints unter Prometheus den Status „UP“ enthalten, dies bedeuted Prometheus kann die angegebenen Metriken aufrufen.
(Abbildung 1)
5.4.6. Metrics Explorer¶
Durch Klicken auf das Welt-Symbol (s. Abb.2) auf der Website des Prometheus-Containers kann man sich den Metrics Explorer anzeigen lassen, bei dem man sieht welche Daten man später in das Dashboard integrieren kann. Diese sind von Container zu Container unterschiedlich, je nachdem welche Datenquellen man hinzugefügt hat.
(Abbildung 2)
5.4.7. Dashboard¶
5.4.7.1. Datenquelle hinzufügen¶
Unter dem Menüpunkt „Connections” -> „Add Connections” (falls das Menü nicht angezeigt wird, ist ein Klick auf das Burger-Symbol erforderlich, um das Menü auszuklappen) kann die gewünschte Datenquelle, in unserem Fall Prometheus, ausgewählt und hinzugefügt werden. Dort müssen der Name und die URL zu Prometheus angegeben werden. Bei Erweiterte Optionen müssen keine weitere Einstellungen getätigt werden. Am Ende mit „Save & test“ die Konfiguration speichern.
(Abbildung 3)
5.4.7.2. Dashboard erstellen¶
Um sich ein eigenes Grafana Dashboard zu erstellen, muss man folgende Schritte ausführen:
(Abbildung 4)
Auf New Dashboard drücken.
(Abbildung 5)
Auf Add visualization drücken und anschließend Datenquelle hinzufügen.
Anschließend sieht man folgendes bild:
(Abbildung 6)
Dies ist eine eigene „IDE“ um Grafana Dashboards zu erstellen. Um den Rahmen nicht allzusehr zu sprengen, wird hierauf nicht eingegangen.
5.4.7.3. Dashboard importieren¶
Man kann sich aber auch schon fertige Dashboards importieren, die von verschiedenen Nutzern erstellt wurden.
Dazu drückt man, anders als beim Erstellen, auf Import (s. Abb.4).
(Abbildung 7)
Anschließend gibt man eine URL oder eine ID für das jeweilige Dashboard ein, das man sich ausgesucht hat und drückt auf Load.
(Abbildung 8)
Zum Schluss wählt man sich seine Datenquelle aus (in unserem Fall Prometheus) und drückt auf Import
5.5. Weitere Grafana Open Source Programme¶
Grafana Labs bieten zahlreiche weitere Open Source Programme an.
Grafana Loki: Log-Aggregation System
Es vereint die drei Komponenten Metriken, Logs und Tracing in einem Dashboard. Es besteht aus den Komponenten:
Agent: sammelt die logs und fügt ihnen ein label hinzu. Diese Steams werden dann zu Loki gepusht
Loki: Hauptserver
Grafana: visualisert die log-Daten
Grafana Tempo: Tracing-Backend-Analyse
Durch Traces können Systeme beobachtet werden. Sie sind sozusagen der Ablauf einer Anfrage / Aktion. Tempo stellt die Dauer jedes Schrittes im Datenflusses grafisch dar, wodurch Engpässe und Verbindungsprobleme entdeckt werden können.
5.6. Fazit¶
Grafana ist eine umfangreiche und graphisch ansprechende Überwachungs- und Analysesoftware für IT-Infrasturktur. Sie ist extrem konfigurierbar und mit ihr lassen sich umfangreiche IT-Systeme und Infrastruktur überwachen. Auch kann man von einer Vielzahl von Datenquellen auswählen, je nachdem welche Daten man gerade braucht.
5.7. Literatur¶
Grafana Docs: https://grafana.com/docs/grafana/latest/ (27.05.2024)
Grafana Debian: https://grafana.com/docs/grafana/latest/setup-grafana/installation/debian/ (27.05.2024)
Grafana Documentation: https://grafana.com/docs/grafana/ (02.06.2024).
Wilde-IT: https://www.wilde-it.com/grafana/ (02.06.2024).
Docker mit Prometheus Config: https://docs.docker.com/config/daemon/prometheus/ (04.06.2024)
Prometheus: https://prometheus.io/docs/introduction/first_steps/ (04.06.2024)
Grafana Loki: https://grafana.com/docs/loki/latest/ (05.06.2024)
Grafana Tempo: https://grafana.com/docs/tempo/latest/ (05.06.2024)