Monday, June 28, 2010

How to merge log files cluster?

ในระบบคอมพิวเตอร์ที่มีผู้ใช้จำนวนมากเข้าใช้งาน application ใดอันใดพร้อมๆกัน ย่อมหนีไม่พ้นที่จะมีการออกแบบให้โครงสร้างมีการแบ่งงานกันทำ
ไม่ว่าจะอยู่ในรูปของ cluster ตลอดไปถึง load balancer ก็ตามสิ่งเหล่านี้ส่งผลดีต่อระบบแต่สร้างความหนักใจให้กับ developer หรือแม้กระทั่ง
Administrator ไม่ใช้น้อยเนื่องจาก log files ที่ได้จากการทำงานมักกระจัดกระจายกันอยู่ทำให้ยากแก่การวิเคราะห์เหตุการณ์ต่างๆ
ตัวอย่างเช่น Java Web Application 1 ตัวถูกแบ่งออกเป็น 2 server แล้วเขียน log file ออกมาในแต่ละ server ดังนี้
[server1]
2010-04-01 20:00:17.015 - Loading data from some table...
2010-04-01 20:00:17.567 - ***[Error Terminate.]
2010-04-01 20:00:20.833 - Calculating balance...

[server2]
2010-04-01 20:00:16.015 - Update coporate data ...
2010-04-01 20:00:17.507 - Update success
2010-04-01 20:00:18.476 - Delete user name id GOD

เราสามารถใช้ command ในการ merge files ทั้งสองเข้าได้กันได้ดังนี้

$cat server1.log server2.log
2010-04-01 20:00:17.015 - Loading data from some table...
2010-04-01 20:00:17.567 - ***[Error Terminate.]
2010-04-01 20:00:20.833 - Calculating balance...

2010-04-01 20:00:16.015 - Update coporate data ...
2010-04-01 20:00:17.507 - Update success
2010-04-01 20:00:18.476 - Delete user name id GOD

$cat server1.log server2.log | sort
2010-04-01 20:00:16.015 - Update coporate data ...
2010-04-01 20:00:17.015 - Loading data from some table...
2010-04-01 20:00:17.507 - Update success
2010-04-01 20:00:17.567 - ***[Error Terminate.]
2010-04-01 20:00:18.476 - Delete user name id GOD
2010-04-01 20:00:20.833 - Calculating balance...

$cat server1.log server2.log | sort > serverlog.log

หรืออาจใช้ควบคู่กันกับ uniq เพื่อช่วยจัดการข้อมูลที่ซ้ำซ้อนก็ได้ครับ

สำหรับ MS-DOS ก็คงทำเป็นบรรทัดลำบากถ้าเขียนเป็นทีละคำสั่งน่าจะง่ายกว่าดังนี้
c:\>type server1.log > temp.log
c:\>type server2.log >> temp.log
c:\>sort temp.log > serverlog.log


1 comment:

Benz said...

มัน merge โดยดูจาก เวลาเหรอครับ เก่งจัง