如何清理石墨耳语的数据?


89

我想删除石墨的存储数据,但石墨文档中没有任何内容。

我做的一种方法是/opt/graphite...../whispers/stats...手动删除文件。

但这很乏味,那么我该怎么办呢?


1
如果它们在删除后再次出现,请检查另一个问题:stackoverflow.com/questions/15501677/…–
knocte

Answers:


72

当前从/ opt / graphite / storage / whisper /中删除文件是删除耳语数据的正确方法。

至于该过程的繁琐部分,如果您要删除某个特定模式,则可以使用find命令。

找到/ opt / graphite / storage / whisper -name loadavg.wsp -delete

在answers.launchpad.net/graphite上也有类似问题


3
我正在使用石墨+ statsd。我尝试过这种方法,它可以正常工作,但是过一会儿重新创建了存储桶。知道为什么以及如何阻止它吗?
Davide Vernizzi 2013年

1
如何重启statsd?我在进程列表中找不到statsd,但是遇到了这个问题。
杰夫

应该注意的是,删除未使用的路径后,Graphite本身不必重新启动。Statsd是一个单独的问题,请继续并重新启动它,但是Graphite将处理删除的路径。我认为我应该澄清这一点,因为在某些时候这是我的绊脚石。
Florin Andrei 2014年

那search_index呢?还应该删除还是删节吗?
mirelon 2014年

2
是否无法查看所有数据是否都已过期(例如,自上次更新以来已通过maxRetention)?要删除旧的过期.wsp文件?
docwhat

49

我想这将进入Server Fault领域,但是我添加了以下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
克里斯·亚当斯

4
仅供参考,在ubuntu中,路径为/ var / lib / graphite / whisper
knocte

我们不能使用tmpreaper这样做是有原因的吗?
Zeki 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
威廉·珀塞尔

这真是太棒了!
xero
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.