Quero excluir os dados do sussurro de armazenamento do grafite, mas não há nada nos documentos do grafite.
Uma maneira de fazer isso é excluir os arquivos /opt/graphite...../whispers/stats...
manualmente.
Mas isso é tedioso, então como faço isso?
Quero excluir os dados do sussurro de armazenamento do grafite, mas não há nada nos documentos do grafite.
Uma maneira de fazer isso é excluir os arquivos /opt/graphite...../whispers/stats...
manualmente.
Mas isso é tedioso, então como faço isso?
Respostas:
excluir atualmente os arquivos de / opt / graphite / storage / whisper / é a maneira correta de excluir dados whisper.
Quanto ao lado tedioso do processo, você pode usar o comando find se houver um determinado padrão que você está tentando remover.
find / opt / graphite / storage / whisper -name loadavg.wsp -delete
.wsp
arquivos antigos expirados ?
Suponho que isso vá para o território de falha de servidor, mas adicionei o seguinte cron job para excluir as nossas métricas antigas que não foram gravadas por mais de 30 dias (por exemplo, de instâncias de nuvem que foram descartadas):
find /mnt/graphite/storage -mtime +30 | grep -E \ "/mnt/graphite/storage/whisper/collectd/app_name/[^/]*" -o \ | uniq | xargs rm -rf
Isso excluirá os diretórios que possuem dados válidos.
Primeiro:
find whisperDir -mtime +30 -type f | xargs rm
E, em seguida, exclua diretórios vazios
find . -type d -empty | xargs rmdir
Este último passo deve ser repetido, pois podem ser deixados novos diretórios vazios.
find /opt/graphite/storage/whisper -type f -mtime +120 -name \*.wsp -delete; find /opt/graphite/storage/whisper -depth -type d -empty -delete
Como as pessoas indicaram, remover os arquivos é o caminho a percorrer. Expandindo as respostas anteriores, fiz este script que remove qualquer arquivo que excedeu sua idade máxima de retenção. Execute-o com cronjob
bastante regularidade.
#!/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
Algumas coisas a serem observadas - a whisper-info
chamada é bastante pesada. Para reduzir o número de chamadas para ele, coloquei a constante MINRET em, de modo que nenhum arquivo seja considerado para exclusão até que tenha 1 dia (24 * 60 * 60 segundos) - ajuste para atender às suas necessidades. Provavelmente, há outras coisas que podem ser feitas para fragmentar o trabalho ou melhorar sua eficiência de modo geral, mas não precisei ainda.
Must specify a directory to clean
é uma mensagem de erro. Como tal, ele deve ser escrito para o local correto: echo "Must ..." >&2
.