Làm thế nào để xóa dữ liệu của lời thì thầm than chì?


89

Tôi muốn xóa dữ liệu thì thầm lưu trữ của graphite nhưng không có bất kỳ thứ gì trong tài liệu graphite.

Một cách tôi đã làm là xóa các tệp /opt/graphite...../whispers/stats...theo cách thủ công.

Nhưng điều này thật tẻ nhạt, vậy tôi phải làm như thế nào?


1
trong trường hợp chúng xuất hiện lại sau khi xóa chúng, hãy kiểm tra câu hỏi khác này: stackoverflow.com/questions/15501677/…
knocte

Câu trả lời:


72

hiện đang xóa các tệp khỏi / opt / graphite / Storage / thì thầm / là cách chính xác để xóa dữ liệu thì thầm.

Đối với mặt tẻ nhạt của quy trình, bạn có thể sử dụng lệnh find nếu có một mẫu nào đó mà bạn đang cố gắng loại bỏ.

tìm / opt / graphite / lưu trữ / thì thầm -name loadavg.wsp -delete

Câu hỏi tương tự trên answer.launchpad.net/graphite


3
Tôi đang sử dụng graphite + statsd. Tôi đã thử theo cách này và nó hoạt động, nhưng sau một thời gian, xô được tạo lại. Bất kỳ ý tưởng tại sao và làm thế nào để ngăn chặn nó?
Davide Vernizzi

1
Làm thế nào để bạn khởi động lại statsd? Tôi không tìm thấy số liệu thống kê trong danh sách các quy trình, nhưng tôi đang gặp sự cố này.
Jeff

Cần lưu ý rằng sau khi xóa các đường dẫn không sử dụng, bản thân Graphite không cần phải khởi động lại. Statsd là một vấn đề riêng biệt, hãy tiếp tục và khởi động lại nó, nhưng Graphite sẽ xử lý tốt các đường dẫn bị xóa. Tôi nghĩ rằng tôi nên làm rõ điều này vì nó là một trở ngại cho tôi tại một số thời điểm.
Florin Andrei

Còn search_index thì sao? Nó cũng nên bị xóa hoặc cắt bớt?
mirelon

2
Không có cách nào để xem liệu tất cả dữ liệu đã hết hạn chưa (ví dụ: maxRetention đã qua kể từ lần cập nhật cuối cùng)? Để xóa .wspcác tệp cũ đã hết hạn ?
docwhat

49

Tôi cho rằng điều này đang đi vào lãnh thổ Lỗi máy chủ, nhưng tôi đã thêm công việc cron sau để xóa các chỉ số cũ của chúng tôi chưa được ghi trong hơn 30 ngày (ví dụ: các phiên bản đám mây đã bị xử lý):

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

Thao tác này sẽ xóa các thư mục có dữ liệu hợp lệ.

Đầu tiên:

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

Và sau đó xóa các dirs trống

find . -type d -empty | xargs rmdir

Bước cuối cùng này nên được lặp lại, vì có thể thư mục trống mới sẽ bị bỏ lại.


24
Trên hầu hết các hệ thống Unix hiện đại này ta có thể ngưng tụ sử dụng dựng sẵn find - ví dụ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 trong ubuntu con đường là / var / lib / graphite / thì thầm
knocte

Có lý do gì chúng ta không thể sử dụng tmpreaper để làm điều này?
Zeki

7

Như mọi người đã chỉ ra, xóa các tệp là cách để thực hiện. Mở rộng trên các câu trả lời trước, tôi đã tạo tập lệnh này để xóa bất kỳ tệp nào đã vượt quá độ tuổi lưu giữ tối đa. Chạy nó một cronjobcách khá thường xuyên.

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

Một vài điều cần lưu ý - whisper-infocuộc gọi khá nặng. Để giảm số lần gọi đến nó, tôi đã đặt hằng số MINRET, để không có tệp nào được xem xét xóa cho đến khi nó được 1 ngày tuổi (24 * 60 * 60 giây) - điều chỉnh để phù hợp với nhu cầu của bạn. Có thể có những thứ khác có thể được thực hiện để phá vỡ công việc hoặc nói chung là cải thiện hiệu quả của nó, nhưng tôi vẫn chưa cần làm.


nit: Must specify a directory to cleanlà một thông báo lỗi. Như vậy, nó nên được ghi vào địa điểm chính xác: echo "Must ..." >&2.
William Pursell

đây là tyvm tuyệt vời!
xero
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.