ฉันต้องการลบข้อมูลกระซิบของที่เก็บข้อมูลของแกรไฟต์ แต่ไม่มีอะไรในเอกสารกราไฟท์
วิธีหนึ่งที่ฉันทำคือการลบไฟล์/opt/graphite...../whispers/stats...
ด้วยตนเอง
แต่มันน่าเบื่อฉันจะทำอย่างไร?
ฉันต้องการลบข้อมูลกระซิบของที่เก็บข้อมูลของแกรไฟต์ แต่ไม่มีอะไรในเอกสารกราไฟท์
วิธีหนึ่งที่ฉันทำคือการลบไฟล์/opt/graphite...../whispers/stats...
ด้วยตนเอง
แต่มันน่าเบื่อฉันจะทำอย่างไร?
คำตอบ:
ปัจจุบันการลบไฟล์จาก / opt / graphite / storage / กระซิบ / เป็นวิธีที่ถูกต้องในการล้างข้อมูลกระซิบ
สำหรับด้านที่น่าเบื่อของกระบวนการคุณสามารถใช้คำสั่ง find หากมีรูปแบบบางอย่างที่คุณพยายามจะลบออก
ค้นหา / opt / graphite / storage / กระซิบ - ชื่อ loadavg.wsp -delete
.wsp
ไฟล์เก่าที่หมดอายุแล้ว?
ฉันคิดว่าสิ่งนี้จะเข้าสู่พื้นที่ 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
ขั้นตอนสุดท้ายนี้ควรทำซ้ำเพราะอาจจะมีไดเร็กทอรีว่างใหม่เหลืออยู่
find /opt/graphite/storage/whisper -type f -mtime +120 -name \*.wsp -delete; find /opt/graphite/storage/whisper -depth -type d -empty -delete
ตามที่ผู้คนได้ชี้ให้เห็นการลบไฟล์เป็นวิธีที่จะไป ขยายคำตอบก่อนหน้านี้ฉันสร้างสคริปต์นี้เพื่อลบไฟล์ใด ๆ ที่เกินอายุการเก็บรักษาสูงสุด เรียกใช้เป็น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 วินาที) - ปรับให้เหมาะกับความต้องการของคุณ อาจมีสิ่งอื่นที่สามารถทำได้เพื่อแบ่งงานหรือปรับปรุงประสิทธิภาพโดยทั่วไป แต่ฉันยังไม่จำเป็นต้องทำ
Must specify a directory to clean
เป็นข้อความแสดงข้อผิดพลาด ดังนั้นควรเขียนให้ถูกตำแหน่ง: echo "Must ..." >&2
.