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.
- Ein A-Record mit
- 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:
sudo apt update
Nun können Sie mit der Installation fortfahren:
sudo apt install grafana
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:
sudo nginx -t
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
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 Sieyour_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
undallow_sign_up
auftrue
. Dadurch wird die GitHub-Authentifizierung aktiviert und Mitgliedern der erlaubten Organisation erlaubt, sich selbst zu registrieren. Diese Einstellung unterscheidet sich von derallow_sign_up
-Eigenschaft unter[users]
, die Sie in Schritt 4 geändert haben. - Setzen Sie
client_id
undclient_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.