7 ธ.ค. 2553

Log rotate ตามพรบ. 90 วัน

ในเซิฟเวอร์ให้บริการต่างๆนั้น เมื่อมีการให้บริการใดๆ ก็จะมีการเก็บ ข้อมูลการใช้งานไว้ใน 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

สร้าง squid logrotate เพื่อก็บ access.log แยกเป็นวันจำนวน 90 วัน เพื่อให้ตรวจสอบได้ง่ายขึ้น
cd /home
mkdir log-squid


แก้ไข 2 จุด เพื่อแปลงวันที่และเวลาเป็นแบบที่สามารถตรวจสอบได้ง่าย
nano /etc/squid/squid.conf


http://www.hadyaiinternet.com/index.php?topic=254.0

แก้ไข 2 จุด เพื่อแปลงวันที่และเวลาเป็นแบบที่สามารถตรวจสอบได้ง่าย
nano /etc/logrotate.d/squid


/var/squid/logs/access.log {
daily
rotate 1
copytruncate
notifempty
ifempty
missingok

postrotate
#!/bin/sh
LIMIT=90
timeaccess=`date +%Y-%m-%d`
cp /var/squid/logs/access.log.1 /home/log-squid/$timeaccess-access.log
find /home/log-squid -maxdepth 1 -type f \( -ctime $LIMIT \) -print \-exec rm {} \; > /dev/null
endscript
}

สร้าง iptables logrotate เพื่อก็บ message.log แยกเป็นวันจำนวน 90 วัน เพื่อให้ตรวจสอบได้ง่ายขึ้น

แก้ไข 2 จุด เพื่อแปลงวันที่และเวลาเป็นแบบที่สามารถตรวจสอบได้ง่าย
nano /etc/logrotate.d/iptables


/var/log/message.log {
daily
rotate 1
copytruncate
notifempty
ifempty
missingok

postrotate
#!/bin/sh
LIMIT=90
timeaccess=`date +%Y-%m-%d`
cp /var/log/message.log.1 /home/log-squid/$timeaccess-message.log
find /home/log-squid -maxdepth 1 -type f \( -ctime $LIMIT \) -print \-exec rm {} \; > /dev/null
endscript
}

ทดสอบและดีบัก

/usr/sbin/logrotate -d /etc/logrotate.conf
/usr/sbin/logrotate -f /etc/logrotate.conf

ที่มา http://www.thaislack.com

ไม่มีความคิดเห็น:

แสดงความคิดเห็น