Как очистить данные графитового шепота?

90

Я хочу удалить данные из хранилища графита, но в документах по графиту ничего нет.

Один из способов, который я сделал, - это /opt/graphite...../whispers/stats...вручную удалить файлы .

Но это утомительно, как мне это сделать?

Самоучка
источник
1
на случай, если они появятся снова после их удаления, проверьте другой вопрос: stackoverflow.com/questions/15501677/…
knocte

Ответы:

73

В настоящее время удаление файлов из / opt / graphite / storage / Whisper / является правильным способом очистки данных шепота.

Что касается утомительной стороны процесса, вы можете использовать команду find, если есть определенный шаблон, который вы пытаетесь удалить.

найти / opt / graphite / storage / Whisper -name loadavg.wsp -delete

Аналогичный вопрос на answers.launchpad.net/graphite

Даннила
источник
3
Использую graphite + statsd. Я пробовал этот способ, и он работает, но через некоторое время ведро воссоздается. Есть идеи, почему и как это остановить?
Davide Vernizzi 05
1
Как перезапустить statsd? Я не нашел statsd в списке процессов, но у меня возникла эта проблема.
Джефф
Следует отметить, что после удаления неиспользуемых путей сам Graphite перезапускать не нужно. Statsd - это отдельная проблема, перезапустите ее, но Graphite отлично справится с удаленными путями. Я подумал, что должен прояснить это, потому что в какой-то момент это было для меня камнем преткновения.
Флорин Андрей
А что насчет search_index? Его также следует удалить или обрезать?
mirelon
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 /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
Есть ли причина, по которой мы не можем использовать tmpreaper для этого?
Зеки
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 секунд) - настройте в соответствии с вашими потребностями. Вероятно, есть другие вещи, которые можно сделать, чтобы разделить работу или в целом повысить ее эффективность, но в этом пока не было необходимости.

IBam
источник
nit: Must specify a directory to cleanэто сообщение об ошибке. Как таковое, оно должно быть написано в правильном месте: echo "Must ..." >&2.
Уильям Перселл
это отличный тывм!
xero