Thaiadmin

Log File Capture Script -- Unix ครับ

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

kai

Log File Capture Script -- Unix ครับ
« เมื่อ: 13 กรกฎาคม 2005, 11:50:05 »
####################################################
# Log File Capture Script
# by tharayuth@gmail.com
# v.1 [13/07/2005]
####################################################

LOGFILE=/var/log/messages
TMPDIR=/tmp

TO_LOGDIR=/var/log
TO_LOG_LINENUM=1000
TO_LOGFILE_NUM=5
TO_LOGFILE_NAME="MessageLogFromRestart_"
TO_LOGFILE_TIME_FORMAT="date +%Y-%m-%d_%H:%M:%S"

#####################################################

tail -n $TO_LOG_LINENUM $LOGFILE > $TO_LOGDIR/$TO_LOGFILE_NAME`$TO_LOGFILE_TIME_FORMAT`

TMPNoDelFILE=$TMPDIR/NotDelList.txt
FILE_NOW_NUM=`ls $TO_LOGDIR/$TO_LOGFILE_NAME* | wc -l`


ls -1 $TO_LOGDIR/$TO_LOGFILE_NAME* | sort | tail -n $TO_LOGFILE_NUM > $TMPNoDelFILE
rm -f $TMPDIR/$TO_LOGFILE_NAME*

while read LINE
do
        mv $LINE $TMPDIR

done < $TMPNoDelFILE

rm -f $TO_LOGDIR/$TO_LOGFILE_NAME*
mv $TMPDIR/$TO_LOGFILE_NAME* $TO_LOGDIR

###################################################################################

สาเหตุที่สร้างขึ้นมาคือ เวลาที่เครื่องดาวไปแต่ละครั้งอยากจะบันทึก /var/log/messages เฉพาะช่วงที่มันดาวแยกไว้เปรียบเทียบดู ว่าเกิดอะไรขึ้นถึงได้ดาวในแต่ละครั้ง จะได้หาต้นตอและแก้ได้ถูกจุด เพราะหลังจากบูตขึ้นมาแล้ว log ก็จะเพิ่มมากขึ้น จนหาช่วงที่เครื่องดาวยากครับ
หรือเวลาที่ httpd มันดาวก็เช่นกัน อยากจะแยกเก็บ access.log error.log มาเก็บไว้

---

ใช้ก๊อบข้อมูลในไฟล์ log ที่เราต้องการแยกมาใส่ไฟล์ตามวันเวลาที่รันเป็นจำนวนบรรทัดที่เรากำหนด เช่น 1000 บรรทัดล่าสุด (TO_LOG_LINENUM)
สามารถกำหนดได้ว่าเก็บไว้ไม่ให้เกินกี่ไฟล์ เช่น ถ้าเกิน 5 ไฟล์ ไฟล์เก่าๆก็จะถูกลบ (TO_LOGFILE_NUM)
กำหนดว่าจะเอาไฟล์ log ที่แยกมาไว้ที่ไหน (TO_LOGDIR)
กำหนดชื่อเริ่มต้นของ log ที่แยกมา (TO_LOGFILE_NAME)
กำหนดรูปแบบชื่อไฟล์ด้านหลังที่ทำให้ชื่อไม่ซ้ำ ควรใช้เป็น date time (TO_LOGFILE_TIME_FORMAT)

LOGFILE=/var/log/messages คือ log ที่เราจะเข้าไปก๊อปข้อมูลมา อาจเป็น access.log หรืออื่นๆ
TMPDIR=/tmp เป็นที่อยู่ของ tmp dir เอาไว้พักไฟล์ชั่วคราวของสคริป

-----

วิธีประยุกต์ใช้ก็เช่น
1. สั่งให้รันตอนบูตระบบทุกครั้ง ( >> /etc/rc.local ) เพื่อจะได้เก็บ log เฉพาะเวลาที่บูตนั้นๆไว้ดูว่าเกิดปัญหาอะไร ทำให้เปรียบเทียบได้ว่าทุกครั้งที่ดาวไปมีอะไรเกิดขึ้นคล้ายๆกันบ้าง
2. สั่งให้รันพร้อมสคริป start service ต่างๆ เพราะถุกครั้งที่มีการ start service แสดงว่าต้องมีอะไรเกิดปัญหา จะได้แยก log ของโปรแกรมนั้นๆออกมาพักไว้วิเคราะห์ดูได้
3. นำไปทำเป็นสคริปคำสั่งเพื่อรัน manual เพื่อใช้แยก log  ไฟล์ที่ต้องการในขณะนั้นๆได้

----

ลองทดสอบดูครับ จะได้
/var/log/MessageLogFromRestart_2005-07-13_11:25:26
/var/log/MessageLogFromRestart_2005-07-13_11:25:27
/var/log/MessageLogFromRestart_2005-07-13_11:25:32
/var/log/MessageLogFromRestart_2005-07-13_11:25:33
/var/log/MessageLogFromRestart_2005-07-13_11:25:34
ออกมา รันกี่ทีก็ได้ไม่เกิน 5 ไฟล์ครับ