#!/bin/bash TIMESTAMP=$(date +"%Y.%m.%d-%H.%M.%S") BACKUP_DIR="/mnt/nas/autobackups/grafana" HOST="http://localhost:3000" # backup grafana data sources PWD="" 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="eyJrIjoiQnc1U21SeUVQVmtPV2g2dFBNSU4xS1J3YmN2YUViN1oiLCJuIjoiQmFja3VwIiwiaWQiOjF9" 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*