Як очистити дані графітового шепіту?


89

Я хочу видалити дані шепіту сховища графіту, але в графітових документах нічого немає.

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

Але це нудно, то як мені це зробити?


1
в разі , якщо вони з'являються знову після їх видалення, перевірте цей інше питання: stackoverflow.com/questions/15501677 / ...
knocte

Відповіді:


72

в даний час видалення файлів з / opt / graphite / storage / whisper / є правильним способом видалення даних шепіту.

Що стосується нудної сторони процесу, ви можете використовувати команду find, якщо існує певний шаблон, який ви намагаєтеся видалити.

знайти / вибрати / графіт / зберігання / шепіт -ім'я loadavg.wsp -видалити

Подібне запитання щодо answer.launchpad.net/graphite


3
Я використовую графіт + statsd. Я спробував таким чином, і це працює, але через деякий час відро відтворено. Будь-яка ідея, чому і як це зупинити?
Давіде Верніцці

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
FYI в 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 секунд) - налаштуйте відповідно до своїх потреб. Ймовірно, є й інші речі, які можна зробити, щоб змусити роботу або взагалі поліпшити її ефективність, але мені поки що не потрібно було.


nit: Must specify a directory to cleanце повідомлення про помилку. Як таке, воно повинно бути написано в правильному місці: echo "Must ..." >&2.
Вільям Перселл,

це чудова тивм!
xero
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.