Guillaume Fenollar DevOps et SysAdmin Freelance

Guillaume FENOLLAR

Ingénieur Linux/DevOps Indépendant

− Montpellier −

Nettoyer automatiquement ses snapshots Elasticsearch

Elasticsearch n'est plus à présenter, tant il est partie prenante de nombre d'architectures distribuées actuelles. Sa seule façon officielle d'être sauvegardée est de passer par des snapshots, qui vont sauvegarder sur un disque commun à tous les noeuds les shards des différents indices à sauvegarder. L'API snapshot est facilement manipulable, il est facile de les configurer, créer, etc... Bien sûr, il va être nécessaire de les supprimer après un certain temps pour éviter de garder les données trop longtemps. Même si ça peut être aisément scriptable, c'est toujours plus sympa si un outil facile à utiliser le fait tout seul pour vous non ?

C’est un petit projet Go que j’ai voulu mettre à disposition, alors le voilà. Il s’agit d’un programme très simple faisant l’inventaire des snapshots Elasticsearch d’un cluster donné afin d’en nettoyer ceux dépassant une certaine date.

Fonctionalités clés

Voici quelques fonctionnalités de ce programme:

  • Se connecte à une instance Elasticsearch, par défaut “es:9200”, toutes versions 6, 7 et 8 supportées. Configurable avec la variable d’env ES_ENDPOINT.
  • Détecte automatiquement les repositories de snapshots configurés sur une instance (et prend la première trouvée). Configurable avec la variable d’env ES_REPO.
  • Spécifie une durée de rétention de snapshots, de 14 jours par défaut. Configurable avec la variable d’env ES_CLEAN_AFTER_DAYS.
  • Ne supprimera jamais le dernier snapshot, s’il n’en reste qu’un. Ceci est pratique si la création de snapshots ne fonctionne plus pour éviter de se retrouver à poil.
  • Présente un mode dry-run

Il se configure en effet exclusivement grâce à des variables d’environnement. Je vous invite à en regarder la liste des variables d’env sur le README du repo pour le configurer en quelques secondes pour votre usage. Le choix des variables d’environnement plutôt que des paramètres en CLI est qu’il a été destiné dès le début à un usage cloud, où les variables d’env sont la voie la plus facile pour une configuration rapide.

Où le trouver

Il est trouvable sur mon repo github associé, déjà buildé dans la partie releases.

Il se configure et s’exécute simplement :

env ES_ENDPOINT=elasticsearch:9200 ES_CLEAN_AFTER_DAYS=7 ./es-snapshots-cleanup

Il est également conteneurisé sous le nom d’image novitnc/es-snapshot-cleanup:latest :

docker pull novitnc/es-snapshot-cleanup

Et enfin il inclut directement l’objet Kubernetes Cronjob associé vous permettant de le déployer dans un cluster Kubernetes. Il a en effet vocation a être exécuté tous les jours. Après clonage du repo, le déployer dans votre cluster actuel de la façon suivante:

## ATTENTION, modifier le fichier avec vos variables d'environnement avant exécution !
kubectl apply -f deploy.yaml