Ich habe mich vom Internet inspirieren lassen - ich bin ein großer Freund von Telegraf und Grafana, allerdings gibt es eine Sache, die mich stört: Dass das Tool unbedingt eine eigene Versionshistorie verwalten will und man nicht auf einfache Art und Weise Dashboards sichern und wieder einspielen kann.
Ich habe mich daher im Internet umgesehen und bin auf folgende Idee gestoßen - das Skript, das hier vorgestellt wird funktioniert natürlich nicht mehr mit der API der Version 7.0.0, die bei mir zum Einsatz kommt - aber nach dem alten Grundsatz "Fehlt Dir was? Programmiers Dir doch!" habe ich dieses Skript als Grundlage genommen und mit einigen Änderungen funktioniert jetzt bereits folgendes:
Nach langer Vorrede nun hier also das Skript:
#!/usr/bin/env bash
# shellcheck disable=SC1091,SC2154,SC2002
. ./env.sh
echo "Dashboards"
out=$(curl -s $ADDITIONAL_CURL_ARGS -H "Authorization: Bearer $token" -X GET "$grafanaurl/search?query=&starred=false&type=dash-db")
#echo "$out"
for uid in $(echo "$out" | jq -r '.[] | .uid'); do
shortname=grafana-dashboard-$uid.json
curl $ADDITIONAL_CURL_ARGS -H "Authorization: Bearer $token" "$grafanaurl/dashboards/uid/$uid" | jq > "$shortname"
name="grafana-dashboard-$(cat "$shortname" |jq -r '.meta.slug')-$uid.json"
# echo "$name"
mv "$shortname" "$name"
echo "DASH $uid EXPORTED as $name"
done
echo "Datasources"
datasources=$(curl -s $ADDITIONAL_CURL_ARGS -H "Authorization: Bearer $token" -X GET "$grafanaurl/datasources")
#echo "$datasources"
for uid in $(echo "$datasources" | jq -r '.[] | .id'); do
shortname="datasource-$uid.json"
curl -s $ADDITIONAL_CURL_ARGS -H "Authorization: Bearer $token" -X GET "$grafanaurl/datasources/$uid" | jq > "$shortname"
name="datasource-$(cat "$shortname" |jq -r '.name')-$uid.json"
mv "$shortname" "$name"
echo "DATASOURCE $uid exported as $name"
done
git add .
git status
timestamp=$(date +"%Y-%m-%dT%H:%M:%S")
git commit -a -m "update $timestamp"
echo "git push nicht vergessen!"
#git push
Nachdem das Skript durchgelaufen ist - git push nicht vergessen!
Das Skript benötigt noch einige Informationen, damit es arbeiten kann. Diese werden über das sourced Skript env.sh bereitgestellt, das man nicht committen sollte und das beispielsweise so aussieht:
#API Token - für Backup von Datasources muss das ein Admin-Token sein!
export token=ADMIN_TOKEN
#Grafana API connection endpoint
export grafanaurl=https://host:port/api
#to ignore self signed certificates
export ADDITIONAL_CURL_ARGS=-k
Es existiert auch ein experimentelles Skript zum Einspielen der Backups - allerdings werden die Dashboards alle in den Ordner "General" eingespielt und man sollte hinterher auf jeden Fall prüfen, ob die Ausgabe des Skripts irgendwelche Fehler meldet. Außerdem werden Notifications und Alerts noch nicht wieder korrekt wiederhergestellt! Das Skript benötigt die entsprechend korrekt gefüllte Datei env.sh - genau wie das zum Anfertigen des Backup:
#!/usr/bin/env bash
# shellcheck disable=SC1091,SC2154,SC2002
. ./env.sh
echo "Datasources not yet supported..."
echo "Dashboards"
echo "Beware: restored dashboards reside in folder 'General'!"
regex="grafana-dashboard-.*-(.*?).json"
for file in grafana-dashboard-*-*.json ; do
: # do something with "$file" here
if [[ "$file" =~ $regex ]]
then
uid="${BASH_REMATCH[1]}"
echo "restoring $file (UID=$uid)"
curl -X POST $ADDITIONAL_CURL_ARGS -H "Authorization: Bearer $token" -H "Content-Type: application/json" \
--data-binary "@$file" "$grafanaurl/dashboards/db"
else
echo "$file doesn't match" >&2 # this could get noisy if there are a lot of non-matching files
fi
done
18.02.2023
Nachdem ich bereits über erste Versuche, Backups der Grafana-Konfiguration anzufertigen berichtet habe, habe ich mich nun noch einmal darangemacht und das Projekt in eine Form gebracht, in der es vielleicht auch für andere nützlich sein könnte.
Ticketsysteme sind lebende Wesen
29.03.2020
Hier zunächst wieder eine Triggerwarnung: Dieser Artikel wird meine Meinung abbilden. es kann sein, dass sie dem einen oder anderen nicht gefällt - das ist mir aber egal. Und wenn hier irgendwelche Schneeflocken mitlesen, dann sind die selber schuld.
Weiterlesen...Android Basteln C und C++ Chaos Datenbanken Docker dWb+ ESP Wifi Garten Geo Go GUI Gui Hardware Java Jupyter JupyterBinder Komponenten Links Linux Markdown Markup Music Numerik OpenSource PKI-X.509-CA Präsentationen Python QBrowser Rants Raspi Revisited Security Software-Test sQLshell TeleGrafana Verschiedenes Video Virtualisierung Windows Upcoming...
Ich berichtete hier bereits über Experimente mit dem Clifford-Attractor, allerdings war ich noch Experimente unter geringfügig geänderten Parametern schuldig...
WeiterlesenEs wurde wieder einmal Zeit für ein neues Feature in meinem Static Site Generator mittels dessen ich ja auch meine Heimatseite im Zwischennetz gestalte und verwalte...
WeiterlesenEs kamen mehrere Faktoren zusammen: die Tatsache, dass ich nicht mehr ganz so kürzlich die 50 überschritten habe hatte ebenso darauf Einfluss wie das heutige trübe Wetter und auch der Fakt, dass ich bereits beinahe alle Wochenendpflichten erledigt habe. Der letzte Stein des Anstoßes war dann aber, dass sich heute zum 125. Mal der Geburtstag von Erich Fromm jährt.
WeiterlesenManche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.
Wer daran teilhaben und eventuell sogar davon profitieren möchte, muss damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.
Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...
PS: Meine öffentlichen Codeberg-Repositories findet man hier.