ควบคุม logfile ด้วย logrotate

ในเซิฟเวอร์ให้บริการต่างๆนั้น เมื่อมีการให้บริการใดๆ ก็จะมีการเก็บ
ข้อมูลการใช้งานไว้ใน Log ไฟล์ ซึ่งหากมีการสะสมของ Logfile
ไปเรื่อยๆ โดยไม่มีวิธีการบริหารจัดการที่ดี ก็อาจเป็นสาเหตุที่ทำให้
ดิสก์เต็มจนเซิฟเวอร์หยุดให้บริการได้

ซอฟต์แวร์ให้บริการส่วนใหญ่ รวมไปถึงโพรเซสต่างๆ ในระบบปฏิบัติการ
มักจะมีการบริหารจัดการ Log File ที่ดีอยู่แล้ว แต่ก็ไม่ใช่ทั้งหมด
ที่ทำได้ดีอย่างนั้น ซึ่งบทความนี้จะขอแนะนำการใช้งาน logrotate
ซึ่งเป็นโปรแกรมที่มีอยู่แล้วในระบบ Unix และ Linux ทั่วไป
ที่จะช่วยย้าย log file เก่าๆ ไปยังไฟล์ใหม่ และทำการบีบอัดข้อมูลให้
และลบ log ที่เก่ามากๆทิ้งไปโดยอัตโนมัติ

การใช้งาน Log Rotate ทำได้โดยการเพิ่ม Config ไฟล์ที่ไดเรกทอรี

/etc/logrotate.d/

ซึ่งโปรแกรม logrotate จะเข้ามาอ่าน config file แล้วรันเป็นประจำทุกวัน

โดยใน Config file มีคำสั่งดังนี้ (ตัวอย่างการจัดการ log ของ my_program)

file : /etc/logrotate.d/my_program
/var/log/my_program.log { # ตำแหน่งของ log file
rotate 10 # สั่งให้ rotate 10 ครั้ง ก่อนลบไฟล์เก่าทิ้งไป
daily # สั่งให้มีการ rotate วันละ 1 ครั้ง
compress # สั่งให้มีการบีบอัดไฟล์ที่ถูก rotate ไปแล้ว
delaycompress # สั่งให้ชะลอการบีบอัดข้อมูลไป 1 ครั้ง ทำให้การ rotate ครั้งแรกเป็นการเปลี่ยนชื่อไฟล์เพียงอย่างเดียว และจะถูกบีบอัดในการ rotate ครั้งต่อไป
create 644 root root # เป็นคำสั่งในการกำหนด permission , user , group ของไฟล์ใหม่
postrotate # เป็นกำหนดให้มีการการรันคำสั่ง หลังจากที่มีการ rotate ไปแล้ว
kill -HUP `cat /var/run/my_program.pid` # เป็นคำสั่งที่สั่งให้รัน ในตัวอย่างนี้คือคำสั่ง reload process
endscript # เป็นการจบคำสั่งของ postrotate

}

คอนฟิกอื่นๆที่สำคัญของ logrotate มีดังนี้

weekly,monthly # เป็นการกำหนดให้มีการ rotate เป็นรายสัปดาห์และรายเดือน
mail <address> # เป็นการสั่งให้ระบบส่ง log file ให้ผู้ดูแลระบบทางอีเมล์

prerotate/endscript # เป็นการกำหนดให้มีการรันคำสั่ง ห่อนที่จะมีการ rotate ซึ่งมีวิธีใช้แบบเดียวกับ postrotate/endscript

นอกจากนี้ ท่านยังสามารถอ่าน config อื่นๆได้เพิ่มเติมได้โดยการรันคำสั่ง man logrotate

ไฟล์อื่นๆที่เกี่ยวข้องกับ logrotate

/etc/cron.daily/logrotate
เป็นไฟล์คำสั่ง ที่เรียก logrotate ทำงานทุกวัน

/etc/crontab
เป็น config ของ cron มีหน้าที่กำหนดเวลาที่จะให้ cron ต่างๆทำงาน

/var/lib/logrotate/status
เป็นสถานะการทำงานของ logrotate ครั้งล่าสุด

Reference: mailcleaner.in.th

Leave a comment