65 lines
1.9 KiB
Bash
65 lines
1.9 KiB
Bash
#!/bin/bash
|
|
# Grafana Dashboard Backup Script
|
|
# Usage: ./backup-grafana.sh [grafana-url] [api-key] [output-dir]
|
|
|
|
set -euo pipefail
|
|
|
|
GRAFANA_URL="${1:-http://localhost:3000}"
|
|
API_KEY="${2:-$GRAFANA_API_KEY}"
|
|
OUTPUT_DIR="${3:-./grafana-backup-$(date +%Y%m%d)}"
|
|
|
|
if [ -z "$API_KEY" ]; then
|
|
echo "Error: API key required. Set GRAFANA_API_KEY or pass as argument."
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$OUTPUT_DIR/dashboards"
|
|
mkdir -p "$OUTPUT_DIR/datasources"
|
|
mkdir -p "$OUTPUT_DIR/folders"
|
|
|
|
echo "========================================="
|
|
echo "Grafana Backup"
|
|
echo "URL: $GRAFANA_URL"
|
|
echo "Output: $OUTPUT_DIR"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
# Backup datasources
|
|
echo "Backing up datasources..."
|
|
curl -s -H "Authorization: Bearer $API_KEY" \
|
|
"$GRAFANA_URL/api/datasources" > "$OUTPUT_DIR/datasources/datasources.json"
|
|
DS_COUNT=$(jq length "$OUTPUT_DIR/datasources/datasources.json")
|
|
echo " Backed up $DS_COUNT datasources"
|
|
|
|
# Backup folders
|
|
echo "Backing up folders..."
|
|
curl -s -H "Authorization: Bearer $API_KEY" \
|
|
"$GRAFANA_URL/api/folders" > "$OUTPUT_DIR/folders/folders.json"
|
|
FOLDER_COUNT=$(jq length "$OUTPUT_DIR/folders/folders.json")
|
|
echo " Backed up $FOLDER_COUNT folders"
|
|
|
|
# Get all dashboards
|
|
echo "Backing up dashboards..."
|
|
DASHBOARDS=$(curl -s -H "Authorization: Bearer $API_KEY" \
|
|
"$GRAFANA_URL/api/search?type=dash-db")
|
|
|
|
DASH_COUNT=0
|
|
echo "$DASHBOARDS" | jq -r '.[].uid' | while read uid; do
|
|
DASH=$(curl -s -H "Authorization: Bearer $API_KEY" \
|
|
"$GRAFANA_URL/api/dashboards/uid/$uid")
|
|
|
|
TITLE=$(echo "$DASH" | jq -r '.dashboard.title' | tr ' /' '_')
|
|
echo "$DASH" > "$OUTPUT_DIR/dashboards/${TITLE}_${uid}.json"
|
|
echo " - $TITLE"
|
|
DASH_COUNT=$((DASH_COUNT + 1))
|
|
done
|
|
|
|
echo ""
|
|
echo "Backup complete!"
|
|
echo "Location: $OUTPUT_DIR"
|
|
echo ""
|
|
echo "To restore:"
|
|
echo " 1. Datasources: POST to /api/datasources"
|
|
echo " 2. Folders: POST to /api/folders"
|
|
echo " 3. Dashboards: POST to /api/dashboards/db"
|