Aller au contenu

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
Vérifier la taille de la base de données Grafana (> 1.8M) :
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