Bagaimana cara membersihkan data bisikan grafit?

89

Saya ingin menghapus data whisper penyimpanan grafit tetapi tidak ada apa pun di dokumen grafit.

Salah satu cara yang saya lakukan adalah menghapus file /opt/graphite...../whispers/stats...secara manual.

Tapi ini membosankan, jadi bagaimana cara melakukannya?

Otodidak
sumber
1
seandainya mereka muncul lagi setelah menghapusnya, periksa pertanyaan lain ini: stackoverflow.com/questions/15501677/…
knocte

Jawaban:

72

saat ini menghapus file dari / opt / graphite / storage / whisper / adalah cara yang benar untuk menghapus data whisper.

Adapun sisi proses yang membosankan, Anda dapat menggunakan perintah find jika ada pola tertentu yang Anda coba hapus.

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

Pertanyaan serupa di Answers.launchpad.net/graphite

dannyla
sumber
3
Saya menggunakan grafit + statsd. Saya mencoba cara ini dan berhasil, tetapi setelah beberapa saat ember dibuat ulang. Tahu mengapa dan bagaimana menghentikannya?
Davide Vernizzi
1
Bagaimana Anda memulai ulang statsd? Saya tidak menemukan statsd dalam daftar proses, tetapi saya mengalami masalah ini.
Jeff
Perlu dicatat bahwa setelah menghapus jalur yang tidak digunakan, Graphite sendiri tidak harus direstart. Statsd adalah masalah terpisah, lanjutkan dan mulai ulang, tetapi Graphite akan menangani jalur yang dihapus dengan baik. Saya pikir saya harus mengklarifikasi ini karena itu adalah batu sandungan bagi saya di beberapa titik.
Florin Andrei
Bagaimana dengan search_index? Haruskah itu juga dihapus atau dipotong?
mirelon
2
Apakah tidak ada cara untuk melihat apakah semua data telah kedaluwarsa (mis. MaxRetention telah berlalu sejak pembaruan terakhir)? Untuk menghapus .wspfile lama yang kadaluwarsa ?
docwhat
49

Saya kira ini akan masuk ke wilayah Kesalahan Server, tetapi saya menambahkan tugas cron berikut untuk menghapus metrik lama kami yang belum ditulis selama lebih dari 30 hari (misalnya, instance cloud yang telah dibuang):

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

Ini akan menghapus direktori yang memiliki data yang valid.

Pertama:

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

Dan kemudian hapus dirs kosong

find . -type d -empty | xargs rmdir

Langkah terakhir ini harus diulang, karena mungkin direktori kosong baru akan ditinggalkan.

yoniLavi
sumber
24
Pada hampir semua sistem Unix modern, hal ini semestinya dapat disingkat menggunakan builtins find - misalnyafind /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 di ubuntu jalurnya adalah / var / lib / graphite / whisper
knocte
Apakah ada alasan mengapa kita tidak dapat menggunakan tmpreaper untuk melakukan ini?
Zeki
7

Seperti yang ditunjukkan orang, menghapus file adalah cara yang harus dilakukan. Memperluas jawaban sebelumnya, saya membuat skrip ini yang menghapus file apa pun yang telah melebihi usia retensi maksimalnya. Jalankan cronjobsecara teratur.

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

Beberapa hal yang harus diperhatikan - whisper-infopanggilan ini cukup berat. Untuk mengurangi jumlah panggilan ke sana, saya telah memasukkan konstanta MINRET, sehingga tidak ada file yang akan dipertimbangkan untuk dihapus hingga berumur 1 hari (24 * 60 * 60 detik) - sesuaikan agar sesuai dengan kebutuhan Anda. Mungkin ada hal lain yang dapat dilakukan untuk membagi pekerjaan atau secara umum meningkatkan efisiensinya, tetapi saya belum memerlukannya.

IBam
sumber
nit: Must specify a directory to cleanadalah pesan kesalahan. Karena itu, harus ditulis ke tempat yang benar: echo "Must ..." >&2.
William Pursell
ini tyvm yang bagus!
xero