web-dev-qa-db-fra.com

Comment nettoyer les données du graphite whisper?

Je veux effacer les données du stockage du graphite, mais il n'y a rien dans la documentation en graphite.

Une façon que j'ai fait est de supprimer les fichiers à /opt/graphite...../whispers/stats... manuellement.

Mais c'est fastidieux, alors comment puis-je le faire?

88
Autodidact

supprimer actuellement les fichiers de/opt/graphite/storage/whisper/est le moyen correct de supprimer les chuchotements.

En ce qui concerne le côté fastidieux du processus, vous pouvez utiliser la commande find si vous tentez de supprimer un certain motif.

find/opt/graphite/storage/whisper -name loadavg.wsp -delete

Question similaire sur answers.launchpad.net/graphite

70
dannyla

Je suppose que cela concerne le territoire de Server Fault, mais j’ai ajouté le travail cron suivant pour supprimer les anciennes métriques sur lesquelles nous n’avons pas été écrites depuis plus de 30 jours (par exemple, les instances de cloud qui ont été supprimées):

find /mnt/graphite/storage -mtime +30 | grep -E \
"/mnt/graphite/storage/whisper/collectd/app_name/[^/]*" -o \
| uniq | xargs rm -rf

Cela supprimera les répertoires contenant des données valides.

Première:

find whisperDir -mtime +30 -type f | xargs rm 

Et puis supprimez les répertoires vides

find . -type d -empty | xargs rmdir

Cette dernière étape doit être répétée, car il se peut que de nouveaux répertoires vides soient laissés.

48
yoniLavi

Comme les gens l'ont souligné, la suppression des fichiers est la voie à suivre. En développant les réponses précédentes, j'ai créé ce script qui supprime tout fichier ayant dépassé son âge de conservation maximal. Exécutez-le en tant que cronjob assez régulièrement.

#!/bin/bash
d=$1
now=$(date +%s)

MINRET=86400

if [ -z "$d" ]; then
  echo "Must specify a directory to clean" >&2
  exit 1
fi

find $d -name '*.wsp' | while read w; do
  age=$((now - $(stat -c '%Y' "$w")))
  if [ $age -gt $MINRET ]; then
    retention=$(whisper-info.py $w maxRetention)
    if [ $age -gt $retention ]; then
      echo "Removing $w ($age > $retention)"
      rm $w
    fi
  fi
done

find $d -empty -type d -delete

Quelques bits à prendre en compte - le whisper-info call est assez lourd. Pour réduire le nombre d'appels, j'ai ajouté la constante MINRET, afin qu'aucun fichier ne soit supprimé avant 1 jour (24 * 60 * 60 secondes) - réglez-le en fonction de vos besoins. Il y a probablement d'autres choses à faire pour partager le travail ou en améliorer généralement l'efficacité, mais je n'en avais pas encore eu besoin.

7
IBam