Grafana Backup / Restore#
Grafana possède des données persistantes à sauvegarder :
- dashboards
- datasources
- users
- ...
L'outil de sauvegarde / restauration utilisé est Velero.
Note
En prérequis, cette procédure nécessite l'installation de Velero via toolbox.
Sauvegarde#
Les sauvegardes de Grafana sont automatisé toutes les 24h.
Variables#
export ZONE_NAME="svc-grafana-central-corp-stg|prd"
export NAMESPACE="grafana-obs-corp-stg|prd"
Lancer une sauvegarde manuelle#
Il est possible de déclencher manuellement une sauvegarde (utile avant une opération sur des données clientes par exemple) en s'appuyant sur le modèle de sauvegarde existant grafana-backup et sur le client Velero :
kswitch "${ZONE_NAME}"
velero backup create --from-schedule grafana-backup
Une tâche de sauvegarde est ainsi créée, suffixée avec le timestamp relatif à l'heure de début de cette sauvegarde, par exemple grafana-backup-20230618000032
Surveiller l'avancement de la sauvegarde :
watch -n 2 'velero backup get grafana-backup-<TIMESTAMP>'
Une fois la tâche terminée, vérifier le rapport de sauvegarde :
velero backup describe grafana-backup-<TIMESTAMP> --details
Cette sauvegarde sera conservée pendant la durée de TTL (par ex 168h soit 7 jours).
Restauration complète#
Supprimer le PVC grafana (Ce qui implique de supprimer le deployment grafana en prérequis) :
kswitch "${ZONE_NAME}"
kubectl -n "${NAMESPACE}" delete deployment grafana
kubectl -n "${NAMESPACE}" delete pvc grafana
Note
Velero ne peut restaurer les PV/PVC que s'ils n'existent plus.
Créer et exécuter la tâche de restauration à partir d'une sauvegarde existante :
velero backup get
velero restore create recovery --from-backup grafana-backup-<TIMESTAMP> --wait
Il est possible de suivre les logs de Velero pour avoir plus d'information sur cette restauration :
kubectl logs -n velero velero-<ID> -f
On peut voir les éléments restaurés :
velero restore describe recovery --details
kubectl -n "${NAMESPACE}" exec -it $(kubectl get pods -n "${NAMESPACE}" -l "app.kubernetes.io/instance=grafana" -o jsonpath="{.items[0].metadata.name}") -c grafana -- ls -lh /var/lib/grafana/grafana.db
Se connecter de nouveau au Grafana pour vérifier le bon fonctionnement de l'application.
Sauvegarde et Restauration partielle#
Exemple de restauration d'un dashboard à l'aide d'un pod Ubuntu et du PVC Grafana.
Déploiement d'un pod Ubuntu :
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: ubuntu
namespace: ${NAMESPACE}
labels:
app: ubuntu
spec:
containers:
- name: ubuntu
image: ubuntu:latest
command: ["/bin/sleep", "3650d"]
imagePullPolicy: IfNotPresent
volumeMounts:
- name: storage
mountPath: /var/lib/grafana
volumes:
- name: storage
persistentVolumeClaim:
claimName: "grafana"
EOF
Installation de SQLite sur le pod Ubuntu :
kubectl exec -it ubuntu -n "${NAMESPACE}" -- apt update && apt install sqlite3 -y
Récupération du dashboard Blackbox-Exporter :
kubectl exec -it ubuntu -n "${NAMESPACE}" -- sqlite3 /var/lib/grafana/grafana.db "SELECT data FROM dashboard WHERE title='Blackbox Exporter';" | jq > blackbox_exporter_${ZONE_NAME}.json
Supprimer le PVC grafana (Ce qui implique de supprimer le deployment grafana en prérequis) :
Warning
Assurez-vous d'avoir sauvergardé tous les éléments attendus.
kswitch "${ZONE_NAME}"
kubectl -n "${NAMESPACE}" delete deployment grafana
kubectl -n "${NAMESPACE}" delete pvc grafana
Redéployer Grafana avec Trackbone.
Import du dashboard dans Grafana :
Grafana > Dashboards > Import > Upload JSON file (select dashboard json file) > Import