PostgreSQL

Grafana Migration von SQLite zu PostgreSQL mit Docker Compose

PostgreSQL

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:

Bash
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:

Bash
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:

YAML
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:

YAML
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:

Bash
docker compose up -d postgres

Starte Grafana einmal, damit das Schema automatisch in PostgreSQL erstellt wird:

Bash
docker compose up -d grafana

Beende Grafana nach der Initialisierung wieder:

Bash
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:

Bash
  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

grafana.load
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:

Bash
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:

Bash
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:

YAML
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.

Hinterlasse einen Kommentar

de_DEGerman