Grafana Installation und Sicherheit mit SSL und Nginx

Grafana ist ein Open-Source-Tool zur Datenvisualisierung und Überwachung. Es integriert sich mit komplexen Datenquellen wie Prometheus, InfluxDB, Graphite und ElasticSearch. Das Tool erleichtert das Erstellen von Warnmeldungen, Benachrichtigungen und Ad-hoc-Filtern für Ihre Daten. Zudem unterstützt es die Zusammenarbeit im Team durch integrierte Freigabefunktionen.

In diesem Tutorial installieren Sie Grafana und sichern es mit einem SSL-Zertifikat sowie einem Nginx-Reverse-Proxy. Nach der Einrichtung besteht die Möglichkeit, die Benutzerauthentifizierung über GitHub zu konfigurieren, um Team-Berechtigungen gezielter zu verwalten.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

  • Einen Ubuntu 20.04-Server, der eingerichtet ist, einschließlich eines Nicht-Root-Benutzers mit sudo-Berechtigungen und einer mit ufw konfigurierten Firewall.
  • Einen vollständig registrierten Domainnamen. In diesem Tutorial wird your_domain verwendet. Sie können eine Domain bei Namecheap kaufen, eine kostenlose bei Freenom erhalten oder einen anderen Domain-Registrar Ihrer Wahl nutzen.
  • Die folgenden DNS-Einträge für Ihren Server:
    • Ein A-Record mit your_domain, der auf die öffentliche IP-Adresse Ihres Servers zeigt.
    • Ein A-Record mit www.your_domain, der auf die öffentliche IP-Adresse Ihres Servers zeigt.
  • Einen eingerichteten Nginx-Server, einschließlich eines Server-Blocks für Ihre Domain.
  • Einen Nginx-Server-Block mit konfiguriertem Let’s Encrypt.
  • Optional: Um die GitHub-Authentifizierung einzurichten, benötigen Sie ein GitHub-Konto, das mit einer Organisation verbunden ist.

Schritt 1 — Installation von Grafana

In diesem ersten Schritt installieren Sie Grafana auf Ihrem Ubuntu 20.04-Server. Sie können Grafana entweder direkt von der offiziellen Website herunterladen oder über ein APT-Repository installieren. Da ein APT-Repository die Installation und Verwaltung von Grafana-Updates erleichtert, wird in diesem Tutorial diese Methode verwendet.

GPG-Schlüssel hinzufügen

Laden Sie den Grafana GPG-Schlüssel mit wget herunter und leiten Sie die Ausgabe an apt-key weiter. Dadurch wird der Schlüssel zur Liste der vertrauenswürdigen Schlüssel Ihrer APT-Installation hinzugefügt, sodass Sie das GPG-signierte Grafana-Paket herunterladen und verifizieren können:

wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -

In diesem Befehl deaktiviert die Option -q die Statusmeldung für wget, und -O gibt die heruntergeladene Datei im Terminal aus. Diese beiden Optionen stellen sicher, dass nur der Inhalt der Datei an apt-key weitergeleitet wird.

Repository hinzufügen

Fügen Sie als Nächstes das Grafana-Repository zu Ihren APT-Quellen hinzu:

sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"

Installation durchführen

Aktualisieren Sie den APT-Cache, um die Paketlisten zu aktualisieren:

Nun können Sie mit der Installation fortfahren:

Sobald Grafana installiert ist, starten Sie den Grafana-Server mit systemctl:

sudo systemctl start grafana-server

Überprüfen Sie als Nächstes, ob Grafana ausgeführt wird, indem Sie den Status des Dienstes abrufen:

sudo systemctl status grafana-server

Die Ausgabe sollte ähnlich wie folgt aussehen:

● grafana-server.service - Grafana-Instanz
     Loaded: loaded (/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-05-21 08:08:10 UTC; 4s ago
     Docs: http://docs.grafana.org
 Main PID: 15982 (grafana-server)
    Tasks: 7 (limit: 1137)

Diese Ausgabe enthält Informationen über den Grafana-Prozess, einschließlich seines Status, der Hauptprozess-ID (PID) und mehr. active (running) zeigt an, dass der Prozess ordnungsgemäß ausgeführt wird.

Zuletzt aktivieren Sie den Dienst, damit Grafana beim Systemstart automatisch gestartet wird:

sudo systemctl enable grafana-server

Die Ausgabe wird wie folgt aussehen:

Synchronizing state of grafana-server.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable grafana-server
Created symlink /etc/systemd/system/multi-user.target.wants/grafana-server.service → /usr/lib/systemd/system/grafana-server.service.

Grafana ist nun installiert und einsatzbereit. Im nächsten Schritt sichern Sie die Verbindung zu Grafana mit einem Reverse-Proxy und einem SSL-Zertifikat.

Schritt 2 — Einrichten des Reverse-Proxys

Die Verwendung eines SSL-Zertifikats stellt sicher, dass Ihre Daten durch Verschlüsselung der Verbindung zu und von Grafana geschützt sind. Um diese Verbindung nutzen zu können, müssen Sie jedoch zunächst Nginx als Reverse-Proxy für Grafana konfigurieren.

Öffnen Sie die Nginx-Konfigurationsdatei, die Sie beim Einrichten des Nginx-Serverblocks mit Let’s Encrypt in den Voraussetzungen erstellt haben. Sie können jeden Texteditor verwenden, aber in diesem Tutorial wird nano genutzt:

sudo nano /etc/nginx/sites-available/your_domain

Suchen Sie den folgenden Block:

/etc/nginx/sites-available/your_domain
...
location / {
    try_files $uri $uri/ =404;
}
...

Da Nginx bereits für die Kommunikation über SSL konfiguriert ist und der gesamte Webverkehr zu Ihrem Server bereits über Nginx läuft, müssen Sie Nginx nur noch anweisen, alle Anfragen an Grafana weiterzuleiten, das standardmäßig auf Port 3000 läuft.

Löschen Sie die vorhandene try_files-Zeile in diesem Location-Block und ersetzen Sie sie durch die folgenden Optionen:

/etc/nginx/sites-available/your_domain
...
location / {
   proxy_set_header Host $http_host;
   proxy_pass http://localhost:3000;
}
...

Dadurch wird der Proxy auf den entsprechenden Port abgebildet und ein Servername in den Header übermittelt.

Damit die WebSocket-Verbindungen von Grafana Live korrekt funktionieren, fügen Sie den folgenden Abschnitt außerhalb des Server-Blocks hinzu:

/etc/nginx/sites-available/your_domain
map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

server {
    ...

Fügen Sie dann den folgenden Location-Abschnitt in den Server-Block ein:

/etc/nginx/sites-available/your_domain
server {
...
    location /api/live {
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection $connection_upgrade;
       proxy_set_header Host $http_host;
       proxy_pass http://localhost:3000;
    }
...

Die Header Upgrade und Connection werden nicht vom Client an den weitergeleiteten Server gesendet. Damit der weitergeleitete Server von der Absicht des Clients erfährt, das Protokoll auf WebSocket umzustellen, müssen diese Header explizit übergeben werden.

Die endgültige Konfiguration sieht wie folgt aus:

/etc/nginx/sites-available/your_domain
map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

server {
    listen 80;
    listen [::]:80;

    root /var/www/your_domain/html;
    index index.html index.htm index.nginx-debian.html;

    server_name your_domain www.your_domain;

    location / {
       proxy_set_header Host $http_host;
       proxy_pass http://localhost:3000;
    }

    location /api/live {
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection $connection_upgrade;
       proxy_set_header Host $http_host;
       proxy_pass http://localhost:3000;
    }
}

Speichern und schließen Sie die Datei, indem Sie CTRL+X, Y und dann ENTER drücken (falls Sie nano verwenden).

Testen Sie nun die neuen Einstellungen, um sicherzustellen, dass alles korrekt konfiguriert ist:

Die folgende Ausgabe wird angezeigt:

Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Um die Änderungen zu aktivieren, laden Sie Nginx neu:

sudo systemctl reload nginx

Sie können nun die standardmäßige Grafana-Anmeldeseite aufrufen, indem Sie in Ihrem Webbrowser zu https://your_domain navigieren. Falls Sie Grafana nicht erreichen können, überprüfen Sie, ob Ihre Firewall den Datenverkehr auf Port 443 zulässt, und wiederholen Sie die vorherigen Schritte.Da die Verbindung zu Grafana nun verschlüsselt ist, können Sie zusätzliche Sicherheitsmaßnahmen implementieren, beginnend mit der Änderung der standardmäßigen Administratoranmeldeinformationen von Grafana.

Schritt 3 — Aktualisieren der Anmeldeinformationen

Rufen Sie https://your_domain in Ihrem Webbrowser auf. Dies bringt Sie zum Standard-Anmeldebildschirm.

Geben Sie in die Felder für E-Mail oder Benutzername sowie Passwort jeweils admin ein und klicken Sie auf die Schaltfläche Login.

Auf dem nächsten Bildschirm ändern Sie das Standardpasswort, indem Sie Ihr neues Passwort in die Felder Neues Passwort und Neues Passwort bestätigen eingeben.

Klicken Sie auf Absenden, um die neuen Informationen zu speichern. Falls Sie diesen Schritt überspringen, werden Sie beim nächsten Login erneut zur Passwortänderung aufgefordert.

Da die Verbindung zu Grafana nun verschlüsselt ist, können Sie zusätzliche Sicherheitsmaßnahmen implementieren, beginnend mit der Änderung der Standard-Administrationsanmeldeinformationen von Grafana.

Schritt 4 — Deaktivieren von Registrierungen und anonymem Zugriff in Grafana

Grafana bietet Optionen, die es Besuchern ermöglichen, eigene Benutzerkonten zu erstellen und Dashboards ohne Registrierung anzusehen. Wenn Grafana nicht über das Internet erreichbar ist oder mit öffentlich zugänglichen Daten wie Service-Statusinformationen arbeitet, können diese Funktionen nützlich sein. Wenn Sie Grafana jedoch online für sensible Daten nutzen, kann anonymer Zugriff ein Sicherheitsrisiko darstellen. Um dieses Problem zu beheben, nehmen Sie einige Änderungen an der Grafana-Konfiguration vor.

Öffnen Sie zunächst die Hauptkonfigurationsdatei von Grafana zur Bearbeitung:

sudo nano /etc/grafana/grafana.ini

Suchen Sie die folgende allow_sign_up-Direktive unter dem Abschnitt [users]:

/etc/grafana/grafana.ini
...
[users]
# Benutzerregistrierung deaktivieren
;allow_sign_up = true
...

Wenn diese Option auf true gesetzt ist, wird eine Registrieren-Schaltfläche auf dem Anmeldebildschirm hinzugefügt, die es Benutzern ermöglicht, sich selbst zu registrieren und auf Grafana zuzugreifen.

Wenn diese Option auf false gesetzt ist, wird die Schaltfläche Registrieren entfernt und die Sicherheit sowie der Datenschutz von Grafana verbessert.

Kommentieren Sie diese Direktive aus, indem Sie das Semikolon am Anfang der Zeile entfernen und die Option auf false setzen:

/etc/grafana/grafana.ini
...
[users]
# Benutzerregistrierung deaktivieren
allow_sign_up = false
...

Suchen Sie als Nächstes die folgende enabled-Direktive unter dem Abschnitt [auth.anonymous]:

/etc/grafana/grafana.ini
...
[auth.anonymous]
# Anonymen Zugriff aktivieren
;enabled = false
...

Wenn enabled auf true gesetzt ist, können nicht registrierte Benutzer auf Ihre Dashboards zugreifen. Wenn diese Option auf false gesetzt ist, wird der Zugriff auf registrierte Benutzer beschränkt.

Kommen Sie die Direktive aus, indem Sie das Semikolon am Anfang der Zeile entfernen und die Option auf false setzen:

/etc/grafana/grafana.ini
...
[auth.anonymous]
# Anonymen Zugriff aktivieren
enabled = false
...

Speichern Sie die Datei und schließen Sie den Texteditor.

Um die Änderungen zu aktivieren, starten Sie Grafana neu:

sudo systemctl restart grafana-server

Überprüfen Sie, ob alles ordnungsgemäß funktioniert, indem Sie den Status des Grafana-Dienstes abrufen:

sudo systemctl status grafana-server

Wie zuvor wird die Ausgabe bestätigen, dass Grafana active (running) ist.

Rufen Sie nun in Ihrem Webbrowser https://your_domain auf. Um den Anmeldebildschirm erneut anzuzeigen, bewegen Sie den Mauszeiger über Ihr Avatar-Symbol in der unteren linken Ecke des Bildschirms und klicken Sie auf die Option Abmelden.

Nachdem Sie sich abgemeldet haben, vergewissern Sie sich, dass es keine Registrieren-Schaltfläche gibt und dass Sie sich nur mit gültigen Anmeldedaten anmelden können.

Grafana ist nun vollständig konfiguriert und bereit zur Nutzung. Als nächstes können Sie den Anmeldeprozess für Ihr Unternehmen vereinfachen, indem Sie die Authentifizierung über GitHub aktivieren.

(Optional) Schritt 5 — Einrichten einer GitHub OAuth-Anwendung

Als alternative Anmeldemethode können Sie Grafana so konfigurieren, dass die Authentifizierung über GitHub erfolgt. Dies ermöglicht allen Mitgliedern autorisierter GitHub-Organisationen den Zugriff. Dies ist besonders nützlich, wenn mehrere Entwickler zusammenarbeiten und Metriken einsehen sollen, ohne separate Grafana-Anmeldedaten erstellen zu müssen.

GitHub-Konto und Organisationseinstellungen

Melden Sie sich zunächst bei einem GitHub-Konto an, das mit Ihrer Organisation verknüpft ist, und navigieren Sie zu Ihrer GitHub-Profilseite.

Wechseln Sie in den Organisationseinstellungen, indem Sie auf Ihren Namen auf der linken Seite des Bildschirms klicken und dann Ihre Organisation aus dem Dropdown-Menü auswählen.

Auf dem nächsten Bildschirm sehen Sie Ihr Organisationsprofil, in dem Sie Einstellungen wie den Anzeigenamen Ihrer Organisation, die Organisations-E-Mail und die Organisations-URL ändern können.

Erstellen einer neuen OAuth-Anwendung

Da Grafana OAuth verwendet – einen offenen Standard für die Autorisierung von Drittanwendungen –, müssen Sie eine neue OAuth-Anwendung innerhalb von GitHub erstellen.

Klicken Sie auf den Link OAuth Apps unter Entwicklereinstellungen auf der linken Seite des Bildschirms.

Falls Sie noch keine OAuth-Anwendungen für Ihre Organisation in GitHub haben, wird Ihnen angezeigt, dass <em>keine Organisationsanwendungen vorhanden</em> sind. Andernfalls wird eine Liste der bereits verbundenen OAuth-Anwendungen angezeigt

Klicken Sie auf die Schaltfläche Neue Anwendung registrieren, um fortzufahren.

OAuth-Anwendungsdetails ausfüllen

Füllen Sie auf dem nächsten Bildschirm die folgenden Details zu Ihrer Grafana-Installation aus:

  • Anwendungsname: Dies hilft Ihnen, verschiedene OAuth-Anwendungen voneinander zu unterscheiden.
  • Homepage-URL: Hier gibt GitHub an, wo sich Grafana befindet. Geben Sie https://your_domain in dieses Feld ein und ersetzen Sie your_domain durch Ihre tatsächliche Domain.
  • Anwendungsbeschreibung: Beschreiben Sie den Zweck Ihrer OAuth-Anwendung.
  • Rückruf-URL der Anwendung: Dies ist die Adresse, zu der Benutzer weitergeleitet werden, nachdem sie erfolgreich authentifiziert wurden. Für Grafana muss dieses Feld auf https://your_domain/login/github gesetzt sein.

Bedenken Sie, dass Grafana-Benutzer, die sich über GitHub anmelden, die Werte sehen können, die Sie in den ersten drei Feldern eingegeben haben. Wählen Sie daher eine sinnvolle und angemessene Beschreibung.

Registrierung der OAuth-Anwendung

Klicken Sie auf die Schaltfläche Anwendung registrieren.

Sie werden nun auf eine Seite weitergeleitet, die die Client-ID und das Client Secret Ihrer neuen OAuth-Anwendung enthält. Notieren Sie sich beide Werte, da Sie diese später in der Grafana-Konfiguration hinterlegen müssen.

Warnung: Bewahren Sie Ihre Client-ID und Ihr Client Secret sicher und nicht öffentlich zugänglich auf, da sie für Angriffe missbraucht werden könnten.

Nachdem Ihre GitHub OAuth-Anwendung erstellt wurde, können Sie nun Grafana für die Authentifizierung über GitHub konfigurieren.

(Optional) Schritt 6 — Konfigurieren von Grafana als GitHub OAuth-App

Um die GitHub-Authentifizierung für Ihre Grafana-Installation abzuschließen, müssen Sie nun einige Änderungen an den Grafana-Konfigurationsdateien vornehmen.

Öffnen Sie zunächst die Hauptkonfigurationsdatei von Grafana:

sudo nano /etc/grafana/grafana.ini

Suchen Sie die Überschrift [auth.github] und heben Sie die Auskommentierung auf, indem Sie das ; am Anfang jeder Zeile entfernen, außer bei ;allowed_domains = und ;team_ids =, da diese in diesem Tutorial nicht geändert werden.

Nehmen Sie dann die folgenden Änderungen vor:

  • Setzen Sie enabled und allow_sign_up auf true. Dadurch wird die GitHub-Authentifizierung aktiviert und Mitgliedern der erlaubten Organisation erlaubt, sich selbst zu registrieren. Diese Einstellung unterscheidet sich von der allow_sign_up-Eigenschaft unter [users], die Sie in Schritt 4 geändert haben.
  • Setzen Sie client_id und client_secret auf die Werte, die Sie bei der Erstellung Ihrer GitHub OAuth-Anwendung erhalten haben.
  • Setzen Sie allowed_organizations auf den Namen Ihrer Organisation, um sicherzustellen, dass sich nur Mitglieder Ihrer Organisation bei Grafana registrieren und anmelden können.

Die vollständige Konfiguration sieht wie folgt aus:

/etc/grafana/grafana.ini
...
[auth.github]
enabled = true
allow_sign_up = true
client_id = your_client_id_from_github
client_secret = your_client_secret_from_github
scopes = user:email,read:org
auth_url = https://github.com/login/oauth/authorize
token_url = https://github.com/login/oauth/access_token
api_url = https://api.github.com/user
;allowed_domains =
;team_ids =
allowed_organizations = your_organization_name
...

Speichern Sie Ihre Konfiguration und schließen Sie die Datei.

Starten Sie anschließend Grafana neu, um die Änderungen zu übernehmen:

sudo systemctl restart grafana-server

Überprüfen Sie abschließend, ob der Dienst aktiv läuft:

sudo systemctl status grafana-server

Testen der GitHub-Authentifizierung

Rufen Sie https://your_domain in Ihrem Browser auf. Falls Sie bereits bei Grafana angemeldet sind, bewegen Sie den Mauszeiger über Ihr Avatar-Symbol in der unteren linken Ecke und klicken Sie auf Abmelden.

Auf der Anmeldeseite sehen Sie nun eine neue Option Mit GitHub anmelden.

Klicken Sie auf diese Schaltfläche, um zu GitHub weitergeleitet zu werden, melden Sie sich an und bestätigen Sie die Autorisierung von Grafana.

Hinweis: Stellen Sie sicher, dass Ihr GitHub-Konto Mitglied Ihrer genehmigten Organisation ist. Andernfalls erhalten Sie eine Fehlermeldung.

Fazit

In diesem Tutorial haben Sie Grafana installiert, konfiguriert und abgesichert. Außerdem haben Sie die Authentifizierung über GitHub für Ihre Organisation aktiviert.

Um Ihr Grafana-Setup zu erweitern, erkunden Sie die offiziellen und Community-erstellten Dashboards und Plugins. Weitere Informationen finden Sie in der offiziellen Grafana-Dokumentation.

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren: