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_SIR/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

 

Schreibe einen Kommentar