Thursday, November 20, 2014

การเก็บ Log apache ให้แยกเป็นวัน

  • ประเด็นปัญหาของโพสนี้คือ error กับ access log ของ apache มันมีขนาดใหญ่มากเกินไปแล้ว
  • 10 กว่า GB เลยล่ะ
  • และอีกอย่าง พื้นที่เก็บ log เราจะเต็มแล้ว ย้ายพาธไปวางที่ partition อื่นดีกว่า
Solved
  • แก้ปัญหาการเก็บ Log ให้ได้ขนาด หรือ เวลา ตามแต่เราต้องการโดย rotatelogs
  • ตรวจสอบดูก่อนว่า Linux เราในที่นี้คือ Debian 7 Wheezy พาธของ rotatelogs อยู่หนใดโดยคำสั่งนี้
whereis rotatelogs
  • ผลลัพธ์ในที่นี้ rotatelogs จะอยู่ที่ /usr/sbin/ นะจ้ะ
  • จากนั้นตามหาคอนฟิกของ site เรา ของผู้โพสจะอยู่ที่ /etc/apache2/sites-available/myhost.com
  • เปิดมันขึ้นมาแก้ไขซะหน่อย
  • คำเตือนก่อนทำตามด้านล่างนี้ ให้เราทำการสำรองไฟล์ site เราไว้ก่อนนะเดี๋ยวจะหาว่าไม่เตือน
cp /etc/apache2/sites-available/myhost.com /etc/apache2/sites-available/myhost.com.org
อันนี้เป็นการแก้การเก็บ Error log
nano /etc/apache2/sites-available/myhost.com
  • มองหาประมาณนี้ ErrorLog คอมเม้นของเก่าไว้โดยเติม # นำหน้าบรรทัดเดิม แล้วแก้ใหม่เป็นประมาณนี้
#ErrorLog /var/log/apache2/error.log
ErrorLog "|/usr/sbin/rotatelogs /newpath/error.%Y-%m-%d.log  86400"
  • อธิบายคือ ให้เก็บ error log ไว้ที่ /newpath/ ไฟล์ error log จะได้ชื่อประมาณนี้ error.yyyy-mm-dd.log ตัวอย่างเช่น error.2014-11-20.log 
อันนี้เป็นการแก้การเก็บ Access log
nano /etc/apache2/sites-available/myhost.com
  • มองหาประมาณนี้ CustomLog คอมเม้นของเก่าไว้โดยเติม # นำหน้าบรรทัดเดิม แล้วแก้ใหม่เป็นประมาณนี้
#CustomLog /var/log/apache2/access.log combined
 CustomLog "|/usr/sbin/rotatelogs /newpath/access.%Y-%m-%d.log  5M" common 
  • อธิบายคือ ให้เก็บ access log ไว้ที่ /newpath/ ไฟล์ access log จะได้ชื่อประมาณนี้ access.yyyy-mm-dd.log ตัวอย่างเช่น access.2014-11-20.log 

อธิบายเพิ่มเติมจากอ้างอิง
  • เราสามารถตั้งค่า Config ของการ Rotate Log ของ Apache โดยระบุเงื่อนไขในการ Rotate เป็นตามขนาดของไฟล์ก็ได้ครับ
  • จากเดิมที่ยกตัวอย่างการตั้งค่าเป็น
CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common 
  • ก็ให้ลองเปลี่ยนเป็น
CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 5M" common
  • อันนี้เป็นการ Rotate Log file ทุก 5MB ครับ
เพิ่มเติมอีกวิธีใน pantip
  • งั้นคุณอาจจะเขียนใส่ใน crontab ของระบบก็ได้ครับ โดยเขียน script ขึ้นมาง่าย ๆ ตัวนึง สมมติว่าชื่อ rotate_apache_log.sh
#!/bin/sh
mv /usr/local/apache/logs/acccess_log /usr/local/apache/logs/access_log.`date +'%y%m%d'`
  • แล้วเขียนใน crontab โดย login เข้าไปเป็น root แล้วสั่ง crontab -e จากนั้นก็เพิ่มเข้าไปว่า
0 0 * * * * /usr/local/apache/bin/rotate_apache_log.sh
  • เท่านี้มันก็จะเปลี่ยนทุก ๆ เที่ยงคืน โดย log ของวันที่แล้วจะอยู่ในรูปแบบ access_log.ปี เดือน วันเช่น access.log.001103
อ้างอิง 
  • http://www.thaiadmin.org/board/index.php?topic=97193.0
  • https://www.gotoknow.org/posts/110670
  • http://www.atriumtech.com/cgi-bin/hilightcgi?Home=/home/InterWeb2000&File=/home2/searchdata/Forums/http/www.pantip.inet.co.th/tech/xchange/internet/topic/ID566234.html
  • http://httpd.apache.org/docs/2.2/logs.html

No comments:

Post a Comment

Popular Posts