2012-03-06 2 views
79

Desidero cancellare i dati del whisper di archiviazione della grafite ma non c'è nulla nei documenti di grafite.Come pulire i dati del sussurro in grafite?

Un modo che ho fatto è quello di eliminare i file a /opt/graphite...../whispers/stats... manualmente.

Ma questo è noioso, quindi come faccio?

+1

nel caso si visualizzino di nuovo dopo averli eliminati, controlla questa altra domanda: http://stackoverflow.com/questions/15501677/deleted-empty-graphite-whisper-files-automatically-re-generating – knocte

risposta

67

attualmente eliminare i file da/opt/graphite/storage/whisper/è il modo corretto per eliminare i dati di bisbiglia.

Per quanto riguarda il lato noioso del processo, è possibile utilizzare il comando find se c'è un determinato pattern che si tenta di rimuovere.

find/opt/grafite/stoccaggio/whisper -name loadavg.wsp -delete

Similar Question on answers.launchpad.net/graphite

+2

Sto usando grafite + statsd. Ho provato in questo modo e funziona, ma dopo un po 'viene ricreato il secchio. Qualche idea sul perché e su come fermarlo? –

+1

Come si riavvia statsd? Non sto trovando un statsd nella lista dei processi, ma sto avendo questo problema. – Jeff

+0

Si noti che dopo aver eliminato i percorsi non utilizzati, Graphite non deve essere riavviato. Statsd è un problema separato, andare avanti e riavviarlo, ma Graphite gestirà i percorsi cancellati bene. Ho pensato di doverlo chiarire perché a un certo punto è stato un ostacolo per me. –

43

Suppongo che questo sta andando in territorio server Fault, ma ho aggiunto il seguente cron job per cancellare le vecchie metriche che non sono state scritte per oltre 30 giorni (ad esempio delle istanze cloud che sono state eliminate ):

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

questo sarà eliminare le directory che hanno dati validi.

Primo:

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

e quindi eliminare dirs vuote

find . -type d -empty | xargs rmdir 

Quest'ultimo passaggio deve essere ripetuto, in quanto può essere nuove directory vuote sarà lasciato.

+20

Su quasi tutti i moderni sistemi Unix questo dovrebbe essere possibile per condensare usando i built-in find - ad es. 'find/opt/graphite/storage/whisper -type f -mtime +120 -name \ *. wsp -delete; find/opt/graphite/storage/whisper -depth -type d -empty -delete' –

+4

FYI in ubuntu il percorso è/var/lib/graphite/whisper – knocte

+0

C'è un motivo per cui non possiamo usare tmpreaper per fare questo? – Zeki

3

Come le persone hanno sottolineato, la rimozione dei file è la strada da percorrere. Espandendo le risposte precedenti, ho creato questo script che rimuove qualsiasi file che ha superato l'età massima di conservazione. Eseguilo come cronjob abbastanza regolarmente.

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

MINRET=86400 

if [ -z "$d" ]; then 
    echo "Must specify a directory to clean" 
    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 

Un paio di bit di essere a conoscenza - la chiamata whisper-info è abbastanza pesante. Per ridurre il numero di chiamate ad esso ho inserito la costante MINRET, in modo che nessun file venga considerato per la cancellazione fino a quando non è di 1 giorno (24 * 60 * 60 secondi) - adattarlo alle proprie esigenze. Probabilmente ci sono altre cose che possono essere fatte per tagliare il lavoro o in generale migliorare la sua efficienza, ma non ne ho avuto ancora bisogno.