Logrotate

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

  1. Weekly-daily-monthly  หมายถึง  ให้มีการ  rotate  ใน ทุกๆ อาทิตย์ (weekly) หรือ ทุกๆ วัน (daily)  หรือ  เดือน (monthly)
  2. rotate xx  หมายถึง สั่งให้มีการ  rotate xx ครั้ง ก่อนลบไฟล์เก่าทิ้งไป
  3. compress  หมายถึง สั่งให้มีการ  zip  ไฟล์ที่ถูก  rotate ไปแล้ว
  4. delaycompress  หมายถึง สั่งให้มีการชะลอการ  zip  ไป 1 ครั้ง ทำให้การ  rotate ครั้งแรกเป็นการเปลี่ยนชื่อไฟล์เพียงอย่างเดี่ยว และจะถูก  zip ในการ rotate  ในครั้งต่อไป
  5. notifemply-ifemply  หมายถึง ไม่ให้มีการ  rotate  เมื่อ  log file  นั้นว่าง
  6. postrotate  เป็นการกำหนดให้มีการรันคำสั่ง หลังจาก ที่มีการ  rotate ไปแล้ว
  7. endscript เป็นการจบคำสั่งของ  postrotate
  8. mail(address) เป็นการสั่งให้ระบบส่ง  log file  ให้ผู้ดูแลระบบทาง  E-mail
  9. 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  เป็นข้อมูลการใช้งาน อินเตอร์เน็ต ภายในร้าน  ซึ่งเรามีวิธีการเก็บให้เป็นไปตามวัน สามารถทำดังนี้

  1. แก้ใน  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  นะครับ)

Home


จัดทำโดย  ร้านใบละพันอินเตอร์เน็ต

42/16 ซอย 9  ถ. สุดบรรทัด  อ. เมือง จ. สระบุร

ติดต่อกับเรา : linuxthailand@hotmail.com