Grafana mit Docker Compose und einem Provisioning-Ordner betreiben
Starte Grafana aus einer Compose-Datei, deren gesamte Konfiguration als Dateien gemountet ist.
Diese Anleitung betreibt Grafana und eine Prometheus-Datenquelle lokal mit Docker Compose, wobei jede Einstellung über Dateien und Umgebungsvariablen geliefert wird. Du öffnest nie die UI, um etwas zu konfigurieren. Du brauchst Docker mit dem Compose-Plugin.
Das Projekt aufbauen
grafana-as-code/
├── compose.yaml
├── .env # Secrets und Versionen, nicht committet
├── grafana/
│ ├── grafana.ini
│ └── provisioning/
│ ├── datasources/
│ │ └── prometheus.yaml
│ ├── dashboards/
│ │ └── providers.yaml
│ ├── alerting/ # in der Alerting-Anleitung hinzugefügt
│ └── plugins/
├── dashboards/
│ └── overview.json
└── prometheus/
└── prometheus.yml
Halte das in Git. Füge .env zu .gitignore hinzu und committe stattdessen eine .env.example.
Die Compose-Datei
compose.yaml:
services:
grafana:
image: grafana/grafana:13.1.0 # pinne eine Version, die du getestet hast
ports:
- "3000:3000"
environment:
GF_SECURITY_ADMIN_USER: admin
GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_ADMIN_PASSWORD}
GF_USERS_ALLOW_SIGN_UP: "false"
volumes:
- ./grafana/grafana.ini:/etc/grafana/grafana.ini:ro
- ./grafana/provisioning:/etc/grafana/provisioning:ro
- ./dashboards:/var/lib/grafana/dashboards:ro
- grafana-data:/var/lib/grafana
depends_on:
- prometheus
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
volumes:
grafana-data:
Die wichtigen Mounts:
/etc/grafana/grafana.iniist die Server-Konfigurationsdatei im offiziellen Image./etc/grafana/provisioningist der Ort, an dem Grafana nach den Ordnerndatasources,dashboards,alertingundpluginssucht./var/lib/grafana/dashboardsist ein beliebiger Ordner für Dashboard-JSON. Der Pfad muss zu dem passen, den du unten im Dashboard-Provider setzt.grafana-dataist ein benanntes Volume für Grafanas SQLite-Datenbank und Plugins. Ohne es geht der Zustand verloren, wenn der Container neu erstellt wird.
Die Konfigurations-Mounts sind absichtlich schreibgeschützt: Grafana muss sie nicht beschreiben.
.env:
GRAFANA_ADMIN_PASSWORD=change-me-before-sharing
Beachte, dass GF_SECURITY_ADMIN_PASSWORD nur angewendet wird, wenn Grafana erstmals seine Datenbank anlegt. Eine spätere Änderung in der Compose-Datei hat keine Wirkung auf ein bestehendes Volume. Entferne das Volume, um von vorn zu beginnen, oder setze das Passwort mit der CLI zurück.
Eine minimale grafana.ini
[server]
http_port = 3000
[analytics]
reporting_enabled = false
check_for_updates = false
[log]
mode = console
level = info
[auth]
disable_login_form = false
Alles, was du weglässt, fällt auf Grafanas Standardwerte zurück. Die nächste Anleitung behandelt die vollständigen Regeln für grafana.ini und GF_*-Überschreibungen.
Eine Datenquelle provisionieren
grafana/provisioning/datasources/prometheus.yaml:
apiVersion: 1
datasources:
- name: Prometheus
uid: prometheus
type: prometheus
access: proxy
url: http://prometheus:9090
isDefault: true
editable: false
Die uid ist das, worauf Dashboards und Alert-Regeln verweisen sollten, wähle also eine stabile. Die nächsten Anleitungen erklären jedes Feld.
Einen Dashboard-Provider und ein Dashboard provisionieren
grafana/provisioning/dashboards/providers.yaml:
apiVersion: 1
providers:
- name: default
type: file
updateIntervalSeconds: 30
allowUiUpdates: false
options:
path: /var/lib/grafana/dashboards
dashboards/overview.json (ein minimales Dashboard; siehe die Dashboards-Anleitung für die Details):
{
"uid": "overview",
"title": "Overview",
"schemaVersion": 39,
"panels": [
{
"id": 1,
"type": "timeseries",
"title": "Targets up",
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 0 },
"datasource": { "type": "prometheus", "uid": "prometheus" },
"targets": [
{ "refId": "A", "expr": "up", "datasource": { "type": "prometheus", "uid": "prometheus" } }
]
}
]
}
Und eine winzige prometheus/prometheus.yml, damit es Daten zum Anzeigen gibt:
global:
scrape_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ["localhost:9090"]
Starten und ohne UI prüfen
docker compose up -d
docker compose logs grafana | grep -i provisioning
curl -s http://localhost:3000/api/health
curl -s -u admin:$GRAFANA_ADMIN_PASSWORD http://localhost:3000/api/datasources | jq '.[].name'
curl -s -u admin:$GRAFANA_ADMIN_PASSWORD "http://localhost:3000/api/search?type=dash-db" | jq '.[].title'
Der Health-Endpunkt sollte ok melden, die Datenquellenliste sollte Prometheus enthalten, und die Suche sollte Overview zurückgeben. Öffne http://localhost:3000, wenn du das Ergebnis sehen willst, aber um hierher zu kommen, wurde nichts angeklickt.
Etwas ändern und beim Anwenden zusehen
- Bearbeite
dashboards/overview.json. Innerhalb vonupdateIntervalSecondsgreift Grafana die Änderung ohne Neustart auf. - Bearbeite die Datenquellen-Datei und starte neu:
docker compose restart grafana. Datenquellen werden beim Start gelesen. - Lösche eine Dashboard-Datei. Das Dashboard wird entfernt, sofern der Provider nicht
disableDeletion: truesetzt.
Plugins aus der Konfiguration installieren
Plugins lassen sich beim Container-Start per Umgebungsvariable installieren, sodass sie in der Compose-Datei bleiben:
environment:
GF_PLUGINS_PREINSTALL: grafana-clock-panel
Ältere Versionen nutzen stattdessen GF_INSTALL_PLUGINS. Prüfe die Dokumentation für deine Version, und beachte, dass das Provisioning nur Plugins konfiguriert, die bereits installiert sind.
Aufräumen
docker compose down # Daten-Volume behalten
docker compose down -v # auch Grafanas Datenbank löschen Beliebte Anleitungen
-
Grafana als Code betreiben: Das große Ganze Was in Dateien leben kann, was eine API braucht und wie die Teile zusammenpassen. -
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. -
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.