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


89

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

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

しかし、これは面倒なので、どうすればよいですか?


1
彼らはそれらを削除した後、再び現れる場合には、この他の質問を確認してください。stackoverflow.com/questions/15501677/...
knocte

回答:


72

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

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

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

answer.launchpad.net/graphiteに関する同様の質問


3
私はグラファイト+ statsdを使用しています。この方法を試してみましたが、しばらくするとバケットが再作成されます。なぜ、どうやってそれを止めるのか?
Davide Vernizzi 2013年

1
どのようにstatsdを再起動しますか?プロセスのリストにstatsdが見つかりませんが、この問題が発生しています。
Jeff

未使用のパスを削除した後、グラファイト自体を再起動する必要がないことに注意してください。Statsdは別の問題です。先に進んで再起動してください。ただし、Graphiteは削除されたパスを問題なく処理します。これは、ある時点で私にとってつまずきのつもりだったので、明確にすべきだと思いました。
Florin Andrei 14

search_indexについてはどうですか?それも削除または切り捨てるべきですか?
mirelon 2014

2
すべてのデータの有効期限が切れているかどうかを確認する方法はありません(たとえば、最後の更新からmaxRetentionが経過した)。古い期限切れの.wspファイルを削除するには?
docwhat

49

これはサーバー障害領域に入ると思いますが、次の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

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


24
最近のほとんどすべてのUnixシステムでは、findビルトインを使用してこれを圧縮することができるはずです-例find /opt/graphite/storage/whisper -type f -mtime +120 -name \*.wsp -delete; find /opt/graphite/storage/whisper -depth -type d -empty -delete
Chris Adams 14

4
ubuntuのFYIパスは/ var / lib / graphite / whisperです
knocte

tmpreaperを使用してこれを行うことができない理由はありますか?
ゼキ2016年

7

人々が指摘しているように、ファイルを削除するのがよい方法です。以前の回答を拡張して、最大保存期間を超えたファイルを削除するこのスクリプトを作成しました。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秒)削除の対象とはなりません-必要に応じて調整してください。おそらく、ジョブをシャーディングしたり、一般にその効率を改善したりするために実行できる他のことがいくつかありますが、私はまだその必要がありませんでした。


nit:Must specify a directory to cleanはエラーメッセージです。そのため、正しい場所に書き込む必要がありますecho "Must ..." >&2
William Pursell

これは素晴らしいtyvmです!
ゼロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.