我想删除石墨的存储数据,但石墨文档中没有任何内容。
我做的一种方法是/opt/graphite...../whispers/stats...
手动删除文件。
但这很乏味,那么我该怎么办呢?
Answers:
当前从/ opt / graphite / storage / whisper /中删除文件是删除耳语数据的正确方法。
至于该过程的繁琐部分,如果您要删除某个特定模式,则可以使用find命令。
找到/ opt / graphite / storage / whisper -name loadavg.wsp -delete
.wsp
文件?
我想这将进入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
应该重复最后一步,因为可能会留下新的空目录。
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
。