Como limpar os dados do sussurro de grafite?


89

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?


1
caso eles apareçam novamente após excluí-los, verifique esta outra questão: stackoverflow.com/questions/15501677/…
knocte

Respostas:


72

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

Pergunta semelhante em answers.launchpad.net/graphite


3
Estou usando grafite + statsd. Tentei assim e funciona, mas depois de um tempo o balde é recriado. Alguma ideia de por que e como parar isso?
Davide Vernizzi

1
Como você reinicia o statsd? Não estou encontrando um statsd na lista de processos, mas estou tendo este problema.
Jeff

Deve-se notar que depois de excluir os caminhos não utilizados, o Graphite em si não precisa ser reiniciado. Statsd é um problema separado, vá em frente e reinicie-o, mas o Graphite lidará com caminhos excluídos muito bem. Achei que deveria esclarecer isso porque foi uma pedra de tropeço para mim em algum momento.
Florin Andrei

E quanto a search_index? Também deve ser excluído ou truncado?
mirelon

2
Não há como ver se todos os dados expiraram (por exemplo, maxRetention passou desde a última atualização)? Remover .wsparquivos antigos expirados ?
docwhat

49

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.


24
Em quase todos os sistemas Unix modernos, esta deve ser possível condensar usando builtins encontrar - por exemplofind /opt/graphite/storage/whisper -type f -mtime +120 -name \*.wsp -delete; find /opt/graphite/storage/whisper -depth -type d -empty -delete
Chris Adams

4
Para sua informação, no Ubuntu, o caminho é / var / lib / graphite / whisper
knocte

Existe um motivo pelo qual não podemos usar o tmpreaper para fazer isso?
Zeki de

7

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 cronjobbastante 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-infochamada é 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.


nit: Must specify a directory to cleané uma mensagem de erro. Como tal, ele deve ser escrito para o local correto: echo "Must ..." >&2.
William Pursell

este é um ótimo tyvm!
xero
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.