Comment nettoyer les données du graphite whisper?

89

Je veux supprimer les données du murmure de stockage du graphite, mais il n'y a rien dans la documentation sur le graphite.

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

Mais c'est fastidieux, alors comment faire?

Autocrate
la source
1
au cas où ils
réapparaîtraient

Réponses:

72

la suppression actuelle des fichiers de / opt / graphite / storage / whisper / est la bonne façon de supprimer les données whisper.

En ce qui concerne le côté fastidieux du processus, vous pouvez utiliser la commande find s'il existe un certain modèle que vous essayez de supprimer.

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

Question similaire sur answers.launchpad.net/graphite

Dannyla
la source
3
J'utilise graphite + statsd. J'ai essayé de cette façon et cela fonctionne, mais après un certain temps, le seau est recréé. Une idée pourquoi et comment l'arrêter?
Davide Vernizzi
1
Comment redémarrer statsd? Je ne trouve pas de statsd dans la liste des processus, mais j'ai ce problème.
Jeff le
Il convient de noter qu'après la suppression des chemins inutilisés, Graphite lui-même n'a pas besoin d'être redémarré. Statsd est un problème distinct, allez-y et redémarrez-le, mais Graphite traitera très bien les chemins supprimés. J'ai pensé que je devrais clarifier cela parce que c'était une pierre d'achoppement pour moi à un moment donné.
Florin Andrei
Et search_index? Doit-il également être supprimé ou tronqué?
mirelon
2
N'y a-t-il aucun moyen de voir si toutes les données ont expiré (par exemple, maxRetention est passée depuis la dernière mise à jour)? Pour supprimer les anciens .wspfichiers expirés ?
docwhat
49

Je suppose que cela va dans le territoire de Server Fault, mais j'ai ajouté le travail cron suivant pour supprimer nos anciennes métriques qui n'ont pas été écrites depuis plus de 30 jours (par exemple, des instances 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.

yoniLavi
la source
24
Sur presque tous les systèmes Unix modernes, cela devrait être possible de condenser à l'aide de find builtins - par exemplefind /opt/graphite/storage/whisper -type f -mtime +120 -name \*.wsp -delete; find /opt/graphite/storage/whisper -depth -type d -empty -delete
Chris Adams
4
Pour info dans ubuntu, le chemin est / var / lib / graphite / whisper
knocte
Y a-t-il une raison pour laquelle nous ne pouvons pas utiliser tmpreaper pour faire cela?
Zeki du
7

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 qui a dépassé son âge de rétention maximal. Exécutez-le cronjobassez 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 éléments à prendre en compte - l' whisper-infoappel est assez lourd. Pour réduire le nombre d'appels, j'ai mis la constante MINRET, afin qu'aucun fichier ne soit pris en compte pour la suppression jusqu'à ce qu'il ait 1 jour (24 * 60 * 60 secondes) - ajustez pour répondre à vos besoins. Il y a probablement d'autres choses qui peuvent être faites pour fragmenter le travail ou améliorer généralement son efficacité, mais je n'en ai pas encore eu besoin.

IBam
la source
nit: Must specify a directory to cleanest un message d'erreur. En tant que tel, il doit être écrit au bon endroit: echo "Must ..." >&2.
William Pursell
c'est super tyvm!
xero