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.

_images/Prometheus.png

(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.

_images/MetricsExplorer.png

(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.

_images/GrafanaDataSources.png

(Abbildung 3)

5.4.7.2. Dashboard erstellen

Um sich ein eigenes Grafana Dashboard zu erstellen, muss man folgende Schritte ausführen:

_images/GrafanaDashboard1.png

(Abbildung 4)

Auf New Dashboard drücken.

_images/GrafanaDashboardCreate.png

(Abbildung 5)

Auf Add visualization drücken und anschließend Datenquelle hinzufügen. Anschließend sieht man folgendes bild:

_images/GrafanaDashboardCreate2.png

(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).

_images/GrafanaDashboardImport.png

(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.

_images/GrafanaDashboardImport2.png

(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