web-dev-qa-db-ja.com

グラファイトのささやきのデータをクリーンアップする方法は?

グラファイトのストレージウィスパーのデータを削除したいのですが、グラファイトドキュメントには何もありません。

私がした方法の1つは、/opt/graphite...../whispers/stats...にあるファイルを手動で削除することです。

しかし、これは退屈なので、どうすればいいですか?

88
Autodidact

現在、/ opt/graphite/storage/whisper /からファイルを削除することが、ささやきデータを削除する正しい方法です。

プロセスの退屈な面に関しては、削除しようとしている特定のパターンがある場合は、findコマンドを使用できます。

/ opt/graphite/storage/whisper -name loadavg.wsp -deleteを見つけます

answers.launchpad.net/graphiteの同様の質問

70
dannyla

これはサーバーフォールトの領域に入ると思われますが、次のcronジョブを追加して、30日以上書き込まれていない古いメトリック(たとえば、破棄されたクラウドインスタンスなど)を削除します。

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

これにより、有効なデータがあるディレクトリが削除されます。

最初:

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

そして、空のディレクトリを削除します

find . -type d -empty | xargs rmdir

新しい空のディレクトリが残る場合があるため、この最後の手順を繰り返す必要があります。

48
yoniLavi

人々が指摘しているように、ファイルを削除することが道です。以前の回答を拡張して、最大保持期間を超えたファイルを削除するこのスクリプトを作成しました。 cronjobとしてかなり定期的に実行してください。

#!/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

知っておくべきいくつかのビット-whisper-info呼び出しはかなり重いです。呼び出し回数を減らすためにMINRET定数を入れました。1日前(24 * 60 * 60秒)になるまで削除の対象となるファイルはありません-ニーズに合わせて調整してください。おそらく、ジョブを分割したり、一般的にその効率を改善したりするためにできることは他にもありますが、まだ必要はありませんでした。

7
IBam