25 สิงหาคม 2551

Apache log rotation

ตอนนี้ Server ที่สำนักงานยัง run Apache2 บน Appserv
การให้บริการต่าง ๆ เพิ่มขึ้นอย่างเห็นได้ชัด ไฟล์ที่เก็บ log ก็โตขึ้นตามไปด้วย
โดยปกติแล้ว ก็จะตามอ่าน log ไฟล์ เป็นประจำ เพื่อดูว่ามีใครมาประทุษร้าย ด้านหลังหรือเปล่า
แต่เนื่องจากยิ่งนานวันเข้าไฟล์ที่เก็บ log จะมีขนาดใหญ่ขึ้นทุกวันตามปริมาณการเข้าใช้งาน
ทีนี้เวลาจะเปิดก็ยากเพราะไฟล์มันใหญ่มาก (ปัจจุบัน 47 Mb)

วันนี้เลยเอาประสบการณ์การปรับแต่ง Apache2 ให้เก็บ Access log file แยกเป็นวันมานำเสนอ

เทคนิคคือ การหมุน log เก็บแยกแต่ละวัน หรือ log rotation วิธีการของเราคือ การแก้ไขไฟล์
httpd.conf ซึ่งอยู่ในโฟลเดอร์ Apache2/conf

บริเวณบรรทัดที่ 331 น่าจะเห็น ifmodule log_conf_module ซึ่งเป็นการบอกว่า ถ้า module log_conf ถูกเปิดใช้งาน ให้ทำตามคำสั่งที่อยู่ระหว่าง ifmodule ถึง /ifmodule

เพื่อความง่าย ไม่ต้องคิดอะไรมาก ให้แทรก คำสั่งต่อไปนี้ไว้ก่อน /ifmodule

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
CustomLog "| bin/rotatelogs.exe C:/AppServ/Apache2.2/logs/access_log.%d-%m-%Y-%H_%M_%S 86400" combined

อันที่จริงแล้วคำสั่ง logFormat แล้วตามด้วยพารามิเตอร์มากมาย ให้ไปศึกษาเพิ่มเติมเอาเองครับ ส่วนคำสั่ง CustomLog เป็นการคำหนดรูปแบบการเก็บ log file เอง ตัวอย่างของผมสั่งให้โปรแกรม rotatelogs.exe ทำการเก็บ log โดยระบุชื่อต้นเป็น access_log แล้วตามด้วยวันเดือนปี และเวลา ตัวเลข 86400 หมายถึง จำนวนรอของวินาที (60 x 60 x 24)

เมื่อกำหนดได้แล้วสั่ง restart Apache2 แค่นี้ระบบก็จะเริ่มเก็บข้อมูลตามรูปแบบที่ต้องการแล้ว
แสดงความคิดเห็น