เครื่องมือบรรทัดคำสั่งเพื่อวิเคราะห์ไฟล์บันทึก Apache [ปิด]


16

ฉันมีไฟล์บันทึกของ Apache มากมายที่ฉันต้องการวิเคราะห์ ฉันกำลังมองหาเครื่องมือที่ไม่ต้องการการตั้งค่ามากนัก สิ่งที่ฉันสามารถเรียกใช้บันทึกผ่านบรรทัดคำสั่งโดยไม่ต้องยุ่งเกี่ยวกับเว็บเซิร์ฟเวอร์สดของเรา

คำแนะนำใด ๆ


และระบบปฏิบัติการที่คุณจะต้องใช้คือ ...
อิซซี่

Linux หรือ MacOSX ...
mmattax

1
"วิเคราะห์" ไม่พูดมาก คุณพยายามจะทำอะไร? มองหาสตริงตัวเลขที่มีการบีบอัด?
David

คำตอบ:


7

ในขณะที่เครื่องมือต่าง ๆ ข้างต้นนั้นยอดเยี่ยมฉันคิดว่าฉันรู้ว่าผู้ถามถามอะไร บ่อยครั้งที่ฉันไม่สามารถดึงข้อมูลออกจากบันทึกการเข้าถึงในแบบที่ฉันสามารถทำได้กับไฟล์อื่น ๆ

เป็นเพราะรูปแบบบันทึกการเข้าถึงที่เป็นใบ้:

127.0.0.1 - - [16/Aug/2014:20:47:29 +0100] "GET /manual/elisp/index.html HTTP/1.1" 200 37230 "http://testlocalhost/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0"

ทำไมพวกเขาใช้ [] สำหรับวันที่และ "" เพื่อสิ่งอื่น ๆ พวกเขาคิดว่าเราไม่รู้ว่าวันที่อยู่ในเขต 4 หรือไม่? มันน่าผิดหวังอย่างไม่น่าเชื่อ

เครื่องมือที่ดีที่สุดในตอนนี้คือ gawk:

gawk 'BEGIN { FPAT="([^ ]+)|(\"[^\"]+\")|(\\[[^\\]]+\\])" } { print $5 }'

จากข้อมูลข้างต้นสิ่งนี้จะทำให้คุณ:

"GET /manual/elisp/index.html HTTP/1.1"

กล่าวอีกนัยหนึ่ง FPAT ช่วยให้คุณสามารถดึงฟิลด์ของ apache-log ออกมาราวกับว่ามันเป็นฟิลด์จริงแทนที่จะเป็นเอนทิตีที่คั่นด้วยช่องว่าง นี่คือสิ่งที่ฉันต้องการเสมอ จากนั้นฉันสามารถแยกวิเคราะห์ได้อีกเล็กน้อยด้วยการวางท่อ

ทำให้การกำหนด FSPAT ทำงานได้ที่นี่: http://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html

คุณสามารถตั้งค่านามแฝงเพื่อสร้าง gawk ที่สามารถวิเคราะห์บันทึก apache:

alias apacheawk="gawk -vFPAT='([^ ]+)|(\"[^\"]+\")|(\\\\[[^\\\\]]+\\\\])' " apacheawk '$6 ~ /200/ { print $5 } | sort | uniq

ทำสิ่งนี้สำหรับฉัน:

"GET / HTTP/1.1"
"GET /manual/elisp/index.html HTTP/1.1"
"GET /manual/elisp/Index.html HTTP/1.1"
"GET /scripts/app.js HTTP/1.1"
"GET /style.css HTTP/1.1"

และแน่นอนเกือบทุกอย่างเป็นไปได้ตอนนี้

สนุก!


1
2 หมายเหตุ: วันที่ไม่ได้อยู่ในเขต 4 จริงๆ แต่ในเขต 4 + 5 ^^ (โดยไม่ต้องเปลี่ยนจาก GMT วันที่มีค่าน้อย) และ access_log มีเวลาส่วนใหญ่ 12 รูปแบบ (ที่จริงแล้วอาจมีมากกว่า 12 สาขาเนื่องจากที่ 12 คือเอเจนต์ http ซึ่งสามารถมีช่องว่างมากมายในชื่อของมันได้เช่นกัน .. 11 ฟิลด์แรกนั้นง่ายต่อการแยกวิเคราะห์ และฟิลด์ที่ 12 (และอาจมากกว่า) ที่เหลือควรเป็นเอเจนต์ http) ดังนั้นคุณสามารถ: awk '($9 == 200) {print $6,$7,$8}'เพื่อแสดงสิ่งเดียวกับในตัวอย่างของคุณ ไม่จำเป็นต้องใช้ FPAT ที่นั่น (แม้ว่าวิธีนี้สามารถใช้งานได้เต็มในกรณีอื่น ๆ )
Olivier Dulac

ฉันคิดว่าคุณกำลังวิจารณ์มากกว่า วันที่อยู่ในฟิลด์ 4 หากคุณพิจารณาว่าฟิลด์นั้นถูกล้อมด้วย [] เวลาส่วนใหญ่ของไฟล์บันทึกอยู่ในเขตเวลาเดียวดังนั้นจึงไม่จำเป็นต้องใช้โซน จุดประสงค์ในการแสดงตัวอย่างไม่ได้แสดงให้เห็นว่ามีบางสิ่งที่เป็นไปได้โดยวิธีนี้เท่านั้น แต่เพื่อแสดงกลอุบายทั่วไป
nic ferrier

1
ฉันประหลาดใจมาก ... ฉันไม่ได้ "วิพากษ์วิจารณ์" เลยเพียงแค่กล่าวข้อสังเกต 2 ข้อ (และบอกว่าวิธีที่คุณใช้สามารถเป็นประโยชน์ได้ในกรณีอื่น แต่นี่ไม่จำเป็นเลย) ...
Olivier Dulac

6

wtopนั้นยอดเยี่ยม มีสาธารณูปโภคอื่น ๆ เช่นกัน บ่อยครั้งที่ฉันจะแยกวิเคราะห์บันทึกโดยใช้ bash, sed และ awk


WTOP และโดยเฉพาะวิเคราะห์เข้าสู่ระบบของพวกเขา logrep ที่ดีเมื่อคุณปรับตัว .conf ในรูปแบบบันทึกของคุณก็จะให้เป็นวิธีที่รวดเร็วที่จะได้รับสิ่งที่คุณต้องการ (URL ด้านบน, การจราจร, ฯลฯ .. )
aseques


1

เอาท์พุทแบบไหนที่คุณต้องการ?

หากคุณเป็นเพียงแค่มองหาสิ่งที่นับแล้วgrep บางสิ่งบางอย่าง logfile.txt | wc -l ใช้งานได้ดี ถ้าคุณต้องการกราฟสวย ... ไม่มาก


สำหรับ windows คำสั่งfind จะเลียนแบบ grep ในระดับหนึ่ง
Chris Nava

0

หากคุณมี windows เวิร์กสเตชันที่คุณสามารถใช้งานแล้ว logparser เป็นเครื่องมือที่เลือก!


0

อะนาล็อกทำงานได้ดีนอกกรอบและไม่ต้องตั้งค่ามากนัก logwrangler เป็นแพคเกจที่ทำงานร่วมกับระบบอนาล็อกเพื่อสร้างเอาต์พุตที่ดีกว่าและยังต้องมีการตั้งค่าเล็กน้อย


0

แทนที่จะใช้เครื่องมือบรรทัดคำสั่งฉันจะแนะนำให้ลองใช้ Apache Logs Viewer เป็นเครื่องมือฟรีที่สามารถตรวจสอบและวิเคราะห์ Apache Log File มันสามารถสร้างกราฟและรายงานที่น่าสนใจได้

ข้อมูลเพิ่มเติมจากhttp://www.apacheviewer.com

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.