จะล้างข้อมูลของแกรไฟต์กระซิบได้อย่างไร?


90

ฉันต้องการลบข้อมูลกระซิบของที่เก็บข้อมูลของแกรไฟต์ แต่ไม่มีอะไรในเอกสารกราไฟท์

วิธีหนึ่งที่ฉันทำคือการลบไฟล์/opt/graphite...../whispers/stats...ด้วยตนเอง

แต่มันน่าเบื่อฉันจะทำอย่างไร?


1
ในกรณีที่ปรากฏขึ้นอีกครั้งหลังจากลบออกให้ตรวจสอบคำถามอื่น ๆ : stackoverflow.com/questions/15501677/…
knocte

คำตอบ:


73

ปัจจุบันการลบไฟล์จาก / opt / graphite / storage / กระซิบ / เป็นวิธีที่ถูกต้องในการล้างข้อมูลกระซิบ

สำหรับด้านที่น่าเบื่อของกระบวนการคุณสามารถใช้คำสั่ง find หากมีรูปแบบบางอย่างที่คุณพยายามจะลบออก

ค้นหา / opt / graphite / storage / กระซิบ - ชื่อ loadavg.wsp -delete

คำถามที่คล้ายกันใน answers.launchpad.net/graphite


3
ฉันใช้แกรไฟต์ + statsd ฉันลองวิธีนี้และได้ผล แต่หลังจากนั้นไม่นานถังจะถูกสร้างขึ้นใหม่ มีความคิดว่าทำไมและจะหยุดได้อย่างไร
Davide Vernizzi

1
คุณจะรีสตาร์ท statsd ได้อย่างไร? ฉันไม่พบ statsd ในรายการกระบวนการ แต่ฉันมีปัญหานี้
Jeff

ควรสังเกตว่าหลังจากลบเส้นทางที่ไม่ได้ใช้แล้ว Graphite เองก็ไม่จำเป็นต้องเริ่มต้นใหม่ Statsd เป็นปัญหาที่แยกจากกันดำเนินการต่อและเริ่มต้นใหม่ แต่ Graphite จะจัดการกับเส้นทางที่ถูกลบได้ดี ฉันคิดว่าฉันควรชี้แจงเรื่องนี้เพราะมันทำให้ฉันสะดุดในบางจุด
Florin Andrei

แล้ว search_index ล่ะ ควรลบหรือตัดทอนด้วย?
mirelon

2
ไม่มีวิธีดูว่าข้อมูลทั้งหมดหมดอายุหรือไม่ (เช่น maxRetention ผ่านไปแล้วตั้งแต่การอัปเดตครั้งล่าสุด) หากต้องการลบ.wspไฟล์เก่าที่หมดอายุแล้ว?
docwhat

49

ฉันคิดว่าสิ่งนี้จะเข้าสู่พื้นที่ Server Fault แต่ฉันได้เพิ่มงาน 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 

แล้วลบ dirs ที่ว่างเปล่า

find . -type d -empty | xargs rmdir

ขั้นตอนสุดท้ายนี้ควรทำซ้ำเพราะอาจจะมีไดเร็กทอรีว่างใหม่เหลืออยู่


24
ในระบบ Unix ที่ทันสมัยเกือบทั้งหมดสิ่งนี้ควรเป็นไปได้ที่จะควบแน่นโดยใช้ find builtins เช่น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 ใน Ubuntu เส้นทางคือ / var / lib / แกรไฟต์ / กระซิบ
knocte

มีเหตุผลที่เราไม่สามารถใช้ tmpreaper เพื่อทำสิ่งนี้ได้หรือไม่?
Zeki

8

ตามที่ผู้คนได้ชี้ให้เห็นการลบไฟล์เป็นวิธีที่จะไป ขยายคำตอบก่อนหน้านี้ฉันสร้างสคริปต์นี้เพื่อลบไฟล์ใด ๆ ที่เกินอายุการเก็บรักษาสูงสุด เรียกใช้เป็น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.
William Pursell

นี่คือ tyvm ที่ยอดเยี่ยม!
xero
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.