Backup Grafana Dashboards und Data Sources

Die Einrichtung der Data Sources bekommt man ja wieder hin. Aber um die eigenen oder angepassten Dashboards wäre es sehr ärgerlich.
Aus zwei verschiedenen Skripten hab ich mir jetzt eins erstellt, was in einem Rutsch alle Grafana Dashboards und Data Sources sichert.

Benötigt wird ein Grafana API Key. Der wird in Grafana unter: Configuration → API Keys erstellt.

Das Skript benötigt noch die Pakete curl und jq.

$ apt install curl jq

In dem Skript müssen die Variablen BACKUP_DIR, HOST, PWD und KEY angepasst werden!
Für die Data Sources wird der login des Webinterface benötigt, für die Dashboards der API Key.

#!/usr/bin/bash
TIMESTAMP=$(date +"%Y.%m.%d-%H.%M.%S")
BACKUP_DIR="/opt/grafana.backup"
HOST="http://localhost:3000"

# backup grafana data sources
PWD="grafana-password-here"

if [ ! -d $BACKUP_DIR/datasources ] ; then
    mkdir -p $BACKUP_DIR/datasources
fi

curl -s "$HOST/api/datasources" -u admin:$PWD | jq -c -M '.[]'|split -l 1 - $BACKUP_DIR/datasources/

# backup grafana dashboards
KEY="grafana-api-key-here"

if [ ! -d $BACKUP_DIR/dashboards ] ; then
    mkdir -p $BACKUP_DIR/dashboards
fi

for dash in $(curl -k -H "Authorization: Bearer $KEY" $HOST/api/search\?query\=\& | jq -r '.[] | .uri'); do
  curl -k -H "Authorization: Bearer $KEY" $HOST/api/dashboards/$dash | sed 's/"id":[0-9]\+,/"id":null,/' | sed 's/\(.*\)}/\1,"overwrite": true}/' | jq . > $BACKUP_DIR/dashboards/$(echo ${dash} |cut -d\" -f 4 |cut -d\/ -f2).json
done

# create tar archive with timestamp
tar cvfz $BACKUP_DIR/backup.grafana-$TIMESTAMP.tgz $BACKUP_DIR/da*

# clean up old backups if you want
# rm -r $BACKUP_DIR/da*

Die Verzeichnisstruktur nach einem erfolgreichen Backup.

/opt/grafana.backup/
├── backup.grafana-2019.10.20-17.13.45.tgz
├── dashboards
│   ├── proxmox.json
│   ├── system.json
│   ├── usv.json
│   └── vmware.json
└── datasources
    ├── aa
    ├── ab
    ├── ac
    └── ad

Möchte man den Key und das Passwort nicht im Skript speichern, kann man diese auch aus einer externen Datei einlesen.

# im Homeverzeichnis die Datei .grafanakey mit dem API Key erstellen
KEY=$(<~/.grafanakey)

# im Homeverzeichnis die Datei .grafanapwd mit dem Passowrt erstellen
PWD=$(<~/.grafanapwd)

Bei einem restore der Data Sources wird jede Datei aus dem Ordner /opt/grafana.backup/datasources als neue Date Source an Grafana gesendet.

for i in /opt/grafana.backup/datasources/*; do \
    curl -X "POST" "http://localhost:3000/api/datasources" \
    -H "Content-Type: application/json" \
    --user admin:PASSWORD \
    --data-binary @$i
done

getestet mit Grafana 6.4.3

9 Gedanken zu „Backup Grafana Dashboards und Data Sources“

  1. Danke für die Mühe, magst du noch kurz erkläre warum “sed ‘s/\(.*\)}/\1,”overwrite”: true}/'” gemacht wird?
    Das mit der “id” verstehe ich, das diese beim Import gesetzt wird.

    Danke!

    Antworten
  2. Hallo
    wenn man den API in GRAFANA erzeugen will. gibt es die Möglichkeit “time to live” einzutragen.
    “The api life duration. For example 1d if your key is going to last for one day. All the supported units are s,m,h,d,w,M,y”
    Frage:
    Ist es egal was ich hier vorwähle?
    Vielen Dank für die Hilfe

    Antworten
  3. Hi, kleiner Fehler in dem Script:
    if [ ! -d $BACKUP_SIR/dashboards ] ; then
    müsste
    if [ ! -d $BACKUP_DIR/dashboards ] ; then
    sein

    Antworten

Schreibe einen Kommentar zu Mirco Antworten abbrechen