¿Cómo limpiar los datos del susurro de grafito?

89

Quiero eliminar los datos del susurro de almacenamiento de grafito, pero no hay nada en los documentos de grafito.

Una forma en que lo hice fue eliminar los archivos /opt/graphite...../whispers/stats...manualmente.

Pero esto es tedioso, entonces, ¿cómo lo hago?

Autodidacta
fuente
1
en caso de que vuelvan a aparecer después de eliminarlos, consulte esta otra pregunta: stackoverflow.com/questions/15501677/…
Knocte

Respuestas:

72

actualmente, eliminar los archivos de / opt / graphite / storage / whisper / es la forma correcta de eliminar los datos de whisper.

En cuanto al lado tedioso del proceso, puede usar el comando de búsqueda si hay un patrón determinado que está tratando de eliminar.

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

Pregunta similar en answers.launchpad.net/graphite

dannyla
fuente
3
Estoy usando grafito + statsd. Intenté de esta manera y funciona, pero después de un tiempo se recrea el cubo. ¿Alguna idea de por qué y cómo detenerlo?
Davide Vernizzi
1
¿Cómo reinicias statsd? No encuentro estadísticas en la lista de procesos, pero tengo este problema.
Jeff
Cabe señalar que después de eliminar las rutas no utilizadas, no es necesario reiniciar Graphite. Statsd es un problema separado, continúe y reinícielo, pero Graphite se encargará de las rutas eliminadas sin problemas. Pensé que debería aclarar esto porque fue un obstáculo para mí en algún momento.
Florin Andrei
¿Qué pasa con search_index? ¿Debería eliminarse o truncarse también?
mirelon
2
¿No hay forma de ver si todos los datos han expirado (por ejemplo, maxRetention ha pasado desde la última actualización)? ¿Eliminar .wsparchivos antiguos caducados ?
docwhat
49

Supongo que esto está entrando en territorio de falla del servidor, pero agregué el siguiente trabajo cron para eliminar nuestras métricas antiguas que no se han escrito durante más de 30 días (por ejemplo, de instancias en la nube que se han eliminado):

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

Esto eliminará los directorios que tengan datos válidos.

Primero:

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

Y luego borre directorios vacíos

find . -type d -empty | xargs rmdir

Este último paso debe repetirse, ya que pueden quedar nuevos directorios vacíos.

yoniLavi
fuente
24
En casi todos los sistemas Unix modernos, esto debería ser posible condensar usando los elementos internos de búsqueda, por ejemplofind /opt/graphite/storage/whisper -type f -mtime +120 -name \*.wsp -delete; find /opt/graphite/storage/whisper -depth -type d -empty -delete
Chris Adams,
4
Para su información en ubuntu, la ruta es / var / lib / graphite / whisper
knocte
¿Hay alguna razón por la que no podamos usar tmpreaper para hacer esto?
Zeki
7

Como la gente ha señalado, eliminar los archivos es el camino a seguir. Ampliando las respuestas anteriores, creé este script que elimina cualquier archivo que haya excedido su edad máxima de retención. Ejecútelo con cronjobbastante regularidad.

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

Un par de bits a tener en cuenta: la whisper-infollamada es bastante pesada. Para reducir la cantidad de llamadas, puse la constante MINRET, de modo que no se considerará la eliminación de ningún archivo hasta que tenga 1 día de antigüedad (24 * 60 * 60 segundos); ajuste para satisfacer sus necesidades. Probablemente hay otras cosas que se pueden hacer para fragmentar el trabajo o, en general, mejorar su eficiencia, pero todavía no he tenido la necesidad de hacerlo.

IBam
fuente
nit: Must specify a directory to cleanes un mensaje de error. Como tal, debe ser escrito en el lugar correcto: echo "Must ..." >&2.
William Pursell
esto es genial tyvm!
xero