Den Grafana-Server mit grafana.ini und Umgebungsvariablen konfigurieren
Wisse, wo Konfigurationsdateien liegen, wie Überschreibungen geordnet sind und wie du Einstellungen in Git hältst.
Das Verhalten des Grafana-Servers wird durch eine INI-Datei und durch Umgebungsvariablen gesteuert, die sie überschreiben. Wenn du die Regeln kennst, kannst du die gesamte Konfiguration in einem Repository halten und nichts von Hand ändern. Diese Anleitung behandelt, wo die Dateien liegen, wie die Rangfolge funktioniert, wie du Werte und Secrets einspeist und welche Einstellungen du am häufigsten anfasst.
Wo die Konfiguration liegt
defaults.iniwird mit Grafana ausgeliefert und enthält jeden Standardwert (bei einer Tarball-Installation inconf/). Bearbeite sie nie. Sie ist die beste Referenz dafür, welche Optionen es gibt.grafana.iniist deine Konfigurationsdatei. Bei Linux-Paketen ist es/etc/grafana/grafana.ini, und das offizielle Docker-Image liest denselben Pfad. Bei einer Tarball-Installation nutzeconf/custom.ini. Mit--configverweist du auf eine andere Datei.- Umgebungsvariablen mit dem Präfix
GF_überschreiben beides.
Rangfolge, von niedrig nach hoch: defaults.ini, dann deine grafana.ini, dann GF_*-Umgebungsvariablen (und Kommandozeilen-Flags). Trage in deine Datei nur die Optionen ein, die du ändern willst, das hält Diffs klein.
In einer INI-Datei sind Zeilen, die mit ; beginnen, Kommentare. Um eine Option zu aktivieren, entfernst du also das führende ;:
;http_port = 3000 # wird ignoriert
http_port = 3000 # aktiv
Starte Grafana nach Änderungen an der Datei oder der Umgebung neu.
Überschreiben per Umgebungsvariable
Das Muster ist GF_<SECTION>_<KEY>, wobei Section und Key in Großbuchstaben stehen und jedes . oder - durch _ ersetzt wird:
GF_SECURITY_ADMIN_USER=owner # [security] admin_user
GF_SERVER_ROOT_URL=https://grafana.example.com # [server] root_url
GF_AUTH_GOOGLE_CLIENT_SECRET=newS3cretKey # [auth.google] client_secret
GF_FEATURE_TOGGLES_newNavigation=true # [feature_toggles] newNavigation
GF_DEFAULT_INSTANCE_NAME=my-instance # instance_name auf oberster Ebene, ohne Section
Umgebungsvariablen passen natürlich zu Containern und Kubernetes, weil dieselbe Datei von jeder Umgebung geteilt werden kann, während die umgebungsspezifischen Werte (URLs, Passwörter) von der Plattform kommen.
Variablen-Expansion innerhalb der Datei
Optionswerte können Umgebungsvariablen oder Dateien mit den Providern $__env{} und $__file{} oder der Kurzform ${NAME} referenzieren:
[paths]
logs = $__env{LOGDIR}/grafana
[security]
admin_password = ${GF_ADMIN_PASSWORD}
secret_key = $__file{/run/secrets/grafana_secret_key}
[database]
password = $__file{/etc/secrets/gf_sql_password}
$__file{} liest die Datei und entfernt führende und nachfolgende Leerzeichen, was gut zu als Dateien gemounteten Docker- und Kubernetes-Secrets passt. Grafana Enterprise hat zusätzlich einen $__vault{}-Provider. Das offizielle Docker-Image akzeptiert außerdem ein Suffix __FILE an Variablennamen (zum Beispiel GF_SECURITY_ADMIN_PASSWORD__FILE=/run/secrets/admin_password), das in der Anleitung zu Secrets behandelt wird.
Eine praktische Basis
Eine kurze grafana.ini für ein kleines, produktionsähnliches Setup:
[paths]
provisioning = /etc/grafana/provisioning
[server]
protocol = http
http_port = 3000
domain = grafana.example.com
root_url = https://grafana.example.com/
; füge den Unterpfad zu root_url hinzu und aktiviere dies, wenn unter /grafana ausgeliefert wird
; serve_from_sub_path = true
[database]
type = postgres
host = postgres:5432
name = grafana
user = grafana
password = $__file{/run/secrets/grafana_db_password}
[security]
admin_user = admin
admin_password = $__file{/run/secrets/grafana_admin_password}
secret_key = $__file{/run/secrets/grafana_secret_key}
cookie_secure = true
[users]
allow_sign_up = false
[analytics]
reporting_enabled = false
check_for_updates = false
[log]
mode = console
level = info
Wissenswerte Punkte:
- Datenbank. Der Standard ist SQLite, in Ordnung für eine einzelne Instanz und zum Testen. Nutze PostgreSQL oder MySQL für die Produktion, und immer bei mehr als einem Grafana-Replikat.
root_urlmuss zur öffentlichen Adresse passen, sonst sind Links in Alert-Benachrichtigungen und OAuth-Redirects falsch. Hinter einem Reverse Proxy, der Grafana unter einem Unterpfad ausliefert, füge den Pfad zuroot_urlhinzu und setzeserve_from_sub_path = true.admin_passwordwird nur angewendet, wenn Grafana erstmals seine Datenbank anlegt. Eine spätere Änderung der Einstellung ändert nicht das Passwort des bestehenden Admin-Benutzers.secret_keyverschlüsselt die für Datenquellen gespeicherten Secrets. Ändert man ihn, können zuvor gespeicherte Secrets nicht mehr gelesen werden, und die Datenquellen müssen erneut provisioniert werden. Setze ihn explizit und rotiere ihn nie leichtfertig.[paths] provisioningist der Ort, an dem Grafana nach Provisioning-Ordnern sucht. Der Standard ist bei Paketen/etc/grafana/provisioning.
SMTP für E-Mail-Alerts
[smtp]
enabled = true
host = smtp.example.com:587
user = grafana@example.com
password = $__file{/run/secrets/smtp_password}
from_address = grafana@example.com
from_name = Grafana
startTLS_policy = OpportunisticStartTLS
Oder dasselbe mit GF_SMTP_ENABLED=true, GF_SMTP_HOST=... und so weiter. Verifiziere die Optionsnamen gegen defaults.ini deiner Version.
Feature-Toggles
Experimentelle oder Opt-in-Funktionen werden in einem eigenen Abschnitt eingeschaltet:
[feature_toggles]
; liste die gewünschten Toggles auf, wie für deine Version dokumentiert
newNavigation = true
Bevorzuge die Datei oder die Umgebung gegenüber der UI, damit die Einstellung einen Neuaufbau übersteht. Toggles kommen und gehen zwischen Releases, prüfe sie also bei jedem Upgrade.
Die wirksame Konfiguration validieren und einsehen
Nach dem Start von Grafana kannst du vergleichen, was du gesetzt hast, mit dem, was wirksam ist:
curl -s -u admin:$GRAFANA_ADMIN_PASSWORD http://localhost:3000/api/admin/settings | jq '.server'
Dieser Admin-Endpunkt liefert die zusammengeführten Einstellungen, und Werte sensibler Schlüssel sind maskiert. Es ist der schnellste Weg zu bestätigen, dass eine Umgebungsvariable tatsächlich gewirkt hat. Falls nicht, prüfe die Schreibweise der Variable (Großbuchstaben, Unterstriche) und ob die Option in defaults.ini existiert.
In Git halten
- Committe
grafana.iniund eine.env.examplemit Platzhalterwerten. - Halte echte Secrets aus dem Repository heraus: Mounte sie als Dateien, injiziere sie als Umgebungsvariablen oder committe sie verschlüsselt (siehe die Anleitung zu Secrets).
- Prüfe Änderungen an
defaults.ini, wenn du Grafana upgradest. Neue Releases fügen Optionen hinzu und markieren manchmal alte als veraltet.
Beliebte Anleitungen
-
Grafana als Code betreiben: Das große Ganze Was in Dateien leben kann, was eine API braucht und wie die Teile zusammenpassen. -
Dashboards aus JSON-Dateien provisionieren Lade Dashboards von der Platte, bilde Ordner aus Verzeichnissen ab und erstelle sie, ohne Änderungen zu verlieren. -
Alert-Regeln, Contact Points und Notification Policies provisionieren Definiere die gesamte Alerting-Pipeline in YAML, damit sie wie Code geprüft und versioniert wird. -
Grafana auf Kubernetes mit Helm und Provisioning-Values deployen Betreibe Grafana aus einem Helm-Chart, bei dem Datenquellen, Dashboards und Einstellungen alle aus Values-Dateien stammen. -
Provisioning von der Kommandozeile neu laden, prüfen und Fehler beheben Finde heraus, was Grafana geladen hat, lade ohne Neustart neu und behebe die üblichen Provisioning-Fehler.