グラファイトのストレージウィスパーのデータを削除したいのですが、グラファイトのドキュメントには何もありません。
私がした1つの方法は、ファイルを/opt/graphite...../whispers/stats...
手動で削除することです。
しかし、これは面倒なので、どうすればよいですか?
グラファイトのストレージウィスパーのデータを削除したいのですが、グラファイトのドキュメントには何もありません。
私がした1つの方法は、ファイルを/opt/graphite...../whispers/stats...
手動で削除することです。
しかし、これは面倒なので、どうすればよいですか?
回答:
現在/ opt / graphite / storage / whisper /からファイルを削除することが、ウィスパーデータを削除する正しい方法です。
プロセスの面倒な面については、削除しようとしている特定のパターンがある場合は、findコマンドを使用できます。
/ opt / graphite / storage / whisper -name loadavg.wsp -deleteを見つけます
.wsp
ファイルを削除するには?
これはサーバー障害領域に入ると思いますが、次の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
新しい空のディレクトリが残る可能性があるため、この最後の手順を繰り返す必要があります。
find /opt/graphite/storage/whisper -type f -mtime +120 -name \*.wsp -delete; find /opt/graphite/storage/whisper -depth -type d -empty -delete
人々が指摘しているように、ファイルを削除するのがよい方法です。以前の回答を拡張して、最大保存期間を超えたファイルを削除するこのスクリプトを作成しました。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秒)削除の対象とはなりません-必要に応じて調整してください。おそらく、ジョブをシャーディングしたり、一般にその効率を改善したりするために実行できる他のことがいくつかありますが、私はまだその必要がありませんでした。
Must specify a directory to clean
はエラーメッセージです。そのため、正しい場所に書き込む必要がありますecho "Must ..." >&2
。