การใช้งาน Logrotate

เป็นกลไกของระบบปฏิบัติการลีนุกซ์ที่ช่วยลบ log file ที่เก่ากว่าออกไป แล้วสร้างไฟล์ log ขึ้นใหม่ ซึ่งมีผลทำให้ไฟล์ log ไม่ใหญ่มากเกินไป โดยการสร้าง log file มาใหม่นั้นจะไปสร้างซ้ำกับไฟล์เดิม ในไฟล์ /etc/logrotate.conf จะมี option มากกมายให้เราแก้ไข แต่ พอสรุป ได้ คราวๆ ดังนี้

Weekly-daily-monthly หมายถึง ให้มีการ rotate ใน ทุกๆ อาทิตย์ (weekly) หรือ ทุกๆ วัน (daily) หรือ เดือน (monthly)
rotate xx หมายถึง สั่งให้มีการ rotate xx ครั้ง ก่อนลบไฟล์เก่าทิ้งไป
compress หมายถึง สั่งให้มีการ zip ไฟล์ที่ถูก rotate ไปแล้ว
delaycompress หมายถึง สั่งให้มีการชะลอการ zip ไป 1 ครั้ง ทำให้การ rotate ครั้งแรกเป็นการเปลี่ยนชื่อไฟล์เพียงอย่างเดี่ยว และจะถูก zip ในการ rotate ในครั้งต่อไป
notifemply-ifemply หมายถึง ไม่ให้มีการ rotate เมื่อ log file นั้นว่าง
postrotate เป็นการกำหนดให้มีการรันคำสั่ง หลังจาก ที่มีการ rotate ไปแล้ว
endscript เป็นการจบคำสั่งของ postrotate
mail(address) เป็นการสั่งให้ระบบส่ง log file ให้ผู้ดูแลระบบทาง E-mail
prerotage/endscript เป็นการกำหนดให้มีการรันคำสั่ง ก่อน ที่จะมีการมีการ rotate ซึ่งจะเป็นแบบ postrotate
การประยุกต์การใช้งานใน /etc/logrotate.conf

หลังจากที่เราได้เรียนรู้ option ใน logrotate แล้ว เราจะประยุกต์การปรับแต่งในส่วนของ squid (access.log store.log) เพื่อเตรียมตัวสำหรับการเก็บ log file ให้ดียิ่งขึ้น

# pico /etc/logrotate.conf
ให้เราดูในส่วนของ squid เท่านั้น (อย่าลืม backup ข้อมูลเก่าด้วยนะครับ)

ด้วยคำสั่ง

# cp /ete/logrotage.conf /etc/logrotage.conf.org
เราจะเห็น Config เดิมๆ ดังนี้

/var/log/squid/access.log /var/log/squid/user_agent.log /var/log/squid/referer.log {
weekly
copytruncate
ifempty
missingok
}

/var/log/squid/cache.log {
weekly
rotate 3
copytruncate
compress
missingok
}

แก้เป็น
/var/log/squid/access.log /var/log/squid/user_agent.log /var/log/squid/referer.log {
daily (ลบทุกวัน)
copytruncate
ifempty
missingok
}

/var/log/squid/cache.log {
weekly
rotate 2
copytruncate
compress
missingok
}

การทำเก็บ access.log ไปตามวัน


access.log และ store.log เป็นข้อมูลการใช้งาน อินเตอร์เน็ต ภายในร้าน ซึ่งเรามีวิธีการเก็บให้เป็นไปตามวัน สามารถทำดังนี้

แก้ใน squid.conf เพื่อให้มีการเก็บ access.log และ store.log (โดยปกติใน ipcop จะเก็บอยู่แล้ว)
#pico /etc/squid/squid.conf
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log none
( แล้ว ทำการ save หรือ ใครจะใช้ vi ก็ ได้ นะครับ)

2. pico /home/changeaccess.sh

#!/bin/sh
timeaccess=`date +%Y-%m-%d`
cp /var/log/squid/access.log /home/shared/$timeaccess-access.log
cp /var/log/squid/store.log /home/shared/$timeaccess-store.log
( แล้ว ทำการ save หรือ ใครจะใช้ vi ก็ ได้ นะครับ)
ในที่นี้ผมได้สร้าง folder /home/shared ไว้แล้วนะครับ ใครที่ยังสร้างไม่เป็น ก็สร้างตามนี้เลย
#mkdir /home/shared

3. chmod +x /home/changeaccess.sh ( เพื่อให้ โปรแกรมสามารถ รัน script นี่ ได้)

4. เวลาจะเรียกใช้

# cd /home
# ./changeaccess.log



จากรูป จะเห็น ว่า access.log มัน จะเปลี่ยนไป ตามวัน


ในกรณีนี้เราจะทำเอาไป ไว้ใน folder shared ซึ่งเป็น folder ที่ share ด้วย samba เราจึงสามารถเอาไฟล์ access.log เหล่านี้ไป write ได้ เลย อิอิ



5. เอา ไป สั่ง ใน fcrontab ( ใน ipcop)

# fcrontab -u root –e
เพิ่ม
00 22 * * * sh /home/changeaccess.sh
(ให้ทุกวัน เวลา 22.00 run คำสั่ง นี้ และอย่าลืม save นะครับ)

Comments

Popular posts from this blog

การตั้งเวลาระหว่าง Server และ Client

วิธีตั้งค่า NTP บน Primary Domain Controller

Installation and Run Node.JS on IIS