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

Schreibe einen Kommentar