Я хочу удалить данные из хранилища графита, но в документах по графиту ничего нет.
Один из способов, который я сделал, - это /opt/graphite...../whispers/stats...
вручную удалить файлы .
Но это утомительно, как мне это сделать?
Я хочу удалить данные из хранилища графита, но в документах по графиту ничего нет.
Один из способов, который я сделал, - это /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
.