Jak wyczyścić dane szeptu grafitowego?

89

Chcę usunąć dane szeptu pamięci grafitu, ale w dokumentacji grafitu nie ma nic.

Jednym ze sposobów jest /opt/graphite...../whispers/stats...ręczne usunięcie plików pod adresem .

Ale to jest uciążliwe, więc jak mam to zrobić?

Samouk
źródło
1
jeśli pojawią się ponownie po ich usunięciu, sprawdź to drugie pytanie: stackoverflow.com/questions/15501677/…
knocte

Odpowiedzi:

72

obecnie usuwanie plików z / opt / graphite / storage / whisper / jest prawidłowym sposobem na usunięcie danych whisper.

Jeśli chodzi o żmudną stronę procesu, możesz użyć polecenia find, jeśli istnieje pewien wzorzec, który próbujesz usunąć.

find / opt / graphite / storage / whisper -name loadavg.wsp -delete

Podobne pytanie na answer.launchpad.net/graphite

dannyla
źródło
3
Używam grafitu + statsd. Próbowałem w ten sposób i działa, ale po chwili wiadro jest odtwarzane. Masz jakiś pomysł, dlaczego i jak to zatrzymać?
Davide Vernizzi,
1
Jak zrestartować statsd? Nie znajduję statystyk na liście procesów, ale mam ten problem.
Jeff
Należy zaznaczyć, że po usunięciu nieużywanych ścieżek samego Graphite nie trzeba restartować. Statsd to osobny problem, śmiało i zrestartuj go, ale Graphite poradzi sobie z usuniętymi ścieżkami. Pomyślałem, że powinienem to wyjaśnić, ponieważ w pewnym momencie było to dla mnie przeszkodą.
Florin Andrei,
A co z search_index? Czy powinien być również usunięty czy obcięty?
mirelon
2
Czy nie ma sposobu, aby sprawdzić, czy wszystkie dane wygasły (np. MaxRetention minęło od ostatniej aktualizacji)? Usunąć stare, wygasłe .wsppliki?
docwhat
49

Przypuszczam, że idzie to na terytorium błędów serwera, ale dodałem następujące zadanie cron, aby usunąć nasze stare metryki, które nie były zapisywane przez ponad 30 dni (np. Instancje chmury, które zostały usunięte):

find /mnt/graphite/storage -mtime +30 | grep -E \
"/mnt/graphite/storage/whisper/collectd/app_name/[^/]*" -o \
| uniq | xargs rm -rf

Spowoduje to usunięcie katalogów, które mają prawidłowe dane.

Pierwszy:

find whisperDir -mtime +30 -type f | xargs rm 

A następnie usuń puste książki

find . -type d -empty | xargs rmdir

Ten ostatni krok należy powtórzyć, ponieważ mogą być nowe puste katalogi.

yoniLavi
źródło
24
W prawie wszystkich nowoczesnych systemach uniksowych powinno być możliwe skondensowanie tego za pomocą wbudowanych funkcji find - np.find /opt/graphite/storage/whisper -type f -mtime +120 -name \*.wsp -delete; find /opt/graphite/storage/whisper -depth -type d -empty -delete
Chris Adams,
4
FYI w Ubuntu ścieżka to / var / lib / graphite / whisper
knocte
Czy istnieje powód, dla którego nie możemy użyć do tego programu tmpreaper?
Zeki
7

Jak ludzie zauważyli, usunięcie plików jest właściwą drogą. Rozwijając poprzednie odpowiedzi, stworzyłem ten skrypt, który usuwa każdy plik, który przekroczył maksymalny wiek przechowywania. Uruchom go jako cronjobdość regularnie.

#!/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

Kilka bitów, o których należy pamiętać - whisper-inforozmowa jest dość ciężka. Aby zmniejszyć liczbę wywołań do niego, wprowadziłem stałą MINRET, dzięki czemu żaden plik nie będzie rozpatrywany do usunięcia, dopóki nie będzie miał 1 dnia (24 * 60 * 60 sekund) - dostosuj do swoich potrzeb. Prawdopodobnie są inne rzeczy, które można zrobić, aby odciąć pracę lub ogólnie poprawić jej wydajność, ale jeszcze nie musiałem tego robić.

IBam
źródło
nit: Must specify a directory to cleanto komunikat o błędzie. Jako takie powinny być zapisywane w odpowiednim miejscu: echo "Must ..." >&2.
William Pursell
to jest świetny tyvm!
xero