Я хочу видалити дані шепіту сховища графіту, але в графітових документах нічого немає.
Один із способів, який я зробив, - це видалення файлів /opt/graphite...../whispers/stats...
вручну.
Але це нудно, то як мені це зробити?
Я хочу видалити дані шепіту сховища графіту, але в графітових документах нічого немає.
Один із способів, який я зробив, - це видалення файлів /opt/graphite...../whispers/stats...
вручну.
Але це нудно, то як мені це зробити?
Відповіді:
в даний час видалення файлів з / opt / graphite / storage / whisper / є правильним способом видалення даних шепіту.
Що стосується нудної сторони процесу, ви можете використовувати команду find, якщо існує певний шаблон, який ви намагаєтеся видалити.
знайти / вибрати / графіт / зберігання / шепіт -ім'я loadavg.wsp -видалити
.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
.