
Grafana Migration von SQLite zu PostgreSQL mit Docker Compose

Standardmäßig wird Grafana mit einer schlanken SQLite-Datenbank ausgeliefert, in der Dashboards, Benutzer und Konfigurationen gespeichert werden. SQLite eignet sich zwar gut für kleine Setups, wird jedoch schnell zu einem Engpass in Produktionsumgebungen, in denen Zuverlässigkeit, Leistung und Skalierbarkeit eine wichtige Rolle spielen. PostgreSQL ist eine naheliegende Upgrade-Option: Es ist robust, praxiserprobt und lässt sich gut in Grafana integrieren.
In diesem Beitrag zeige ich, wie man das standardmäßige SQLite-Backend von Grafana mit Docker Compose und pgloader auf PostgreSQL migrieren kann.
Warum zu PostgreSQL migrieren?
- Skalierbarkeit: PostgreSQL verarbeitet größere Datensätze und höhere Abfrageauslastungen besser als SQLite.
- Zuverlässigkeit: Unterstützt erweiterte Funktionen wie Replikation, Backups und Tuning.
- Ökosystem-Integration: Im Gegensatz zu SQLite, das nur eine lokale Datei ist, läuft PostgreSQL als richtiger Datenbankserver.
Migrationsschritte
Wir gehen davon aus, dass Grafana bereits mit Docker Compose unter Verwendung des standardmäßigen SQLite-Backends ausgeführt wird.
1. Stoppe den Grafana-Container.
Bevor weitere Schritte ausgeführt werden, stoppe den Grafana-Dienst, um neue Schreibvorgänge während der Migration zu verhindern:
docker compose stop grafana
2. Sichere die SQLite Datenbank
Die SQLite-Datenbank Datei heißt in der Regel grafana.db und befindet sich im Speicherverzeichnis von Grafana (standardmäßig /var/lib/grafana/). Kopiere die Datei an einen sicheren Ort:
cp ./grafana/data/grafana.db ./grafana/data/grafana.db.bak
3. PostgreSQL zu Docker Compose hinzufügen
Erweitere docker-compose.yml um einen PostgreSQL-Dienst. Beispiel:
services:
postgres:
image: postgres:15
restart: unless-stopped
environment:
POSTGRES_USER: grafana
POSTGRES_PASSWORD: grafana
POSTGRES_DB: grafana
volumes:
- ./postgres-data:/var/lib/postgresql/data
expose:
- "5432"
4. Konfiguriere Grafana für PostgreSQL
Aktualisiere die Grafana-Konfiguration, sodass eine Verbindung zu PostgreSQL hergestellt wird. Man kann entweder Umgebungsvariablen in docker-compose.yml anpassen oder eine grafana.ini-Datei mounten. Für Umgebungsvariablen:
services:
grafana:
image: grafana/grafana-oss
environment:
- GF_DATABASE_TYPE=postgres
- GF_DATABASE_HOST=postgres:5432
- GF_DATABASE_NAME=grafana
- GF_DATABASE_USER=grafana
- GF_DATABASE_PASSWORD=grafana
volumes:
- "./data:/var/lib/grafana"
depends_on:
- postgres
5. PostgreSQL starten und Schema initialisieren
PostgreSQL-Container starten:
docker compose up -d postgres
Starte Grafana einmal, damit das Schema automatisch in PostgreSQL erstellt wird:
docker compose up -d grafana
Beende Grafana nach der Initialisierung wieder:
docker compose stop grafana
6. pgloader zu Docker Compose hinzufügen
pgloader erleichtert die Migration von SQLite zu PostgreSQL. Füge es in der docker-compose.yml Datei hinzu:
pgloader:
image: ghcr.io/dimitri/pgloader:latest
container_name: pgloader
command: pgloader /grafana.load
restart: "no"
depends_on:
- postgres
volumes:
- "./data:/data"
- "./grafana.load:/grafana.load"
Datei grafana.load erstellen
load database
from sqlite:///data/grafana.db
into postgresql://grafana:grafana@grafana-postgres:5432/grafana
with data only, truncate, reset sequences;
7. pgloader ausführen
Führe pgloader mit der Option „Nur Daten migrieren“ aus und stelle sicher, dass Tabellen zuvor geleert und Sequenzen zurückgesetzt werden:
docker compose up pgloader
Dadurch werden alle vorhandenen Dashboards, Benutzer und Konfigurationen in die PostgreSQL-Datenbank übertragen.
Nach der ersten Ausführung von pgloader sollte der pgloader block in der Docker-Compose-Datei auskommentiert werden, um ein zukünftiges Überschreiben der PostgreSQL-Datenbank zu vermeiden.
8. Grafana mit PostgreSQL starten
Starten Sie Grafana nun erneut:
docker compose up -d grafana
Grafana sollte nun mit PostgreSQL als Backend ausgeführt werden – alle vorhandenen Daten bleiben erhalten.
Verifizieren der Migration
Melde dich bei Grafana an und bestätige folgendes:
- Ihre Dashboards sind noch vorhanden.
- Die Benutzer sind intakt.
Wenn alles in Ordnung ist, kann die alte SQLite-Dateisicherung später sicher entfernt werden.
Vollständiges Beispiel: docker-compose.yml
Hier ist ein funktionierendes Beispiel, das individuell angepasst werden kann:
version: "3.9"
services:
grafana:
image: grafana/grafana-oss
container_name: grafana
restart: unless-stopped
environment:
- GF_DATABASE_TYPE=postgres
- GF_DATABASE_HOST=grafana-postgres:5432
- GF_DATABASE_NAME=grafana
- GF_DATABASE_USER=grafana
- GF_DATABASE_PASSWORD=grafana
ports:
- "3000:3000"
volumes:
- "./data:/var/lib/grafana"
depends_on:
- postgres
postgres:
image: postgres:17-alpine
container_name: grafana-postgres
restart: unless-stopped
environment:
- POSTGRES_USER=grafana
- POSTGRES_PASSWORD=grafana
- POSTGRES_DB=grafana
volumes:
- "./postgres-data-4:/var/lib/postgresql/data"
expose:
- "5432"
pgloader:
image: ghcr.io/dimitri/pgloader:latest
container_name: pgloader
command: pgloader /grafana.load
restart: "no"
depends_on:
- postgres
volumes:
- "./data:/data"
- "./grafana.load:/grafana.load"
Fazit
Die Grafana Migration von SQLite zu PostgreSQL ist mit Docker Compose und pgloader unkompliziert. Der Schlüssel liegt darin, Grafana zuerst das Schema generieren zu lassen und dann die Daten mit der Nur-Daten-Option von pgloader zu importieren.
Mit PostgreSQL verfügt Grafana über ein robusteres Backend, das produktionsbereit und in großem Maßstab einfacher zu warten ist.
Die Migrationsschritte sind selbstverständlich auf Kubernetes-Setups übertragbar.