ค้นหาเว็บไซต์

lnav - ดูและวิเคราะห์บันทึก Apache จาก Linux Terminal


ไม่ถึงสองสัปดาห์ที่ผ่านมา การโจมตีของแรนซัมแวร์ Wannacry ได้โจมตีคอมพิวเตอร์หลายพันเครื่อง ทำให้เกิดความเสียหายอย่างมากต่อบริษัทขนาดใหญ่และบุคคลทั่วไป พร้อมด้วยช่องโหว่อื่น ๆ ที่พบในไม่กี่ปีที่ผ่านมา (เช่นข้อบกพร่องของ Shellshock) เน้นย้ำถึงความสำคัญของการอยู่เหนือระบบที่มีความสำคัญต่อภารกิจของคุณ

แม้ว่าช่องโหว่มักจะมุ่งเป้าไปที่ระบบปฏิบัติการหรือส่วนประกอบซอฟต์แวร์ที่เฉพาะเจาะจง แต่การตรวจสอบการรับส่งข้อมูลที่เข้าและออกจากเครือข่ายของคุณสามารถช่วยได้อย่างมากในการปกป้องทรัพย์สินที่คุณรับผิดชอบ

การอ่านที่แนะนำ: 4 เครื่องมือตรวจสอบและจัดการบันทึกโอเพ่นซอร์สที่ดีสำหรับ Linux

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

การติดตั้งและเปิดใช้งาน lnav ใน Linux

หากต้องการติดตั้ง lnav ให้ใช้ระบบการจัดการแพ็กเกจของการแจกจ่ายของคุณ

aptitude install lnav          [Debian and derivatives]
yum install epel-release lnav  [CentOS 7 and similar]

เมื่อการติดตั้งเสร็จสมบูรณ์ ให้เปิด lnav ตามด้วยเส้นทางที่แน่นอนไปยังไดเร็กทอรีที่มีบันทึกที่จะตรวจสอบ เนื่องจากโดยปกติแล้วจะเป็น /var/log เรามาทำกันดีกว่า:

lnav /var/log/httpd

เพื่อตรวจสอบบันทึกของเว็บเซิร์ฟเวอร์ Apache ใน CentOS 7:

มาตรวจสอบผลลัพธ์ที่แสดงในรูปภาพก่อนหน้าโดยย่อ:

  • มุมขวาบนแสดงไฟล์ที่กำลังตรวจสอบอยู่ (access_log-20170519 และ access_log) เมื่อคุณเลื่อนลงหรือขึ้น คุณจะสังเกตว่าชื่อไฟล์อาจเปลี่ยนแปลงเมื่อคุณเลื่อนจากที่หนึ่งไปยังอีกที่หนึ่ง
  • การตอบสนอง 40x HTTP (เช่น ไม่พบ หรือ ต้องห้าม) จะแสดงเป็นตัวหนา ในขณะที่การตอบสนอง 20x จะแสดงเป็นตัวหนา ในข้อความปกติ
  • ที่อยู่ IP จะปรากฏเป็นสีเขียวตัวหนา

นั่นดูดีอย่างแน่นอนใช่ไหม? แต่มาเจาะลึกลงไปอีกหน่อยแล้วเราจะเห็นว่า lnav ให้มากกว่าเอาท์พุตที่มีสีสวย

หากคุณสงสัยว่าเหตุใดจึงไม่แสดงบันทึกข้อผิดพลาด คุณจะพบคำตอบได้ในบทความนี้ ดังนั้นอ่านต่อ!

การแก้ไขเอาต์พุตด้วยตัวเลือกและปุ่มลัด

ก่อนที่เราจะดำเนินการต่อ เรามาแสดงรายการปุ่มลัดสองสามปุ่มที่จะช่วยให้เราเลื่อนผ่านเอาต์พุตของ lnav และมุมมองที่มีอยู่ได้ง่ายขึ้น:

  • e หรือ E เพื่อข้ามไปยังข้อความแสดงข้อผิดพลาดถัดไป/ก่อนหน้า
  • w หรือ W เพื่อข้ามไปยังข้อความเตือนถัดไป/ก่อนหน้า
  • b หรือ Backspace เพื่อเลื่อนไปยังหน้าก่อนหน้า
  • พื้นที่สำหรับเลื่อนไปยังหน้าถัดไป
  • g หรือ G เพื่อเลื่อนไปที่ด้านบน/ล่างของมุมมองปัจจุบัน

เมื่อหมุนเวียนบันทึก ไฟล์เก่าอาจถูกบีบอัด (หรือไม่) ขึ้นอยู่กับการตั้งค่าที่ระบุในไฟล์การกำหนดค่าล็อก หากต้องการรวมไฟล์บีบอัดไว้ในเอาต์พุต ให้เรียกใช้งาน lnav ดังต่อไปนี้:

lnav -r /var/log/httpd

หากคุณต้องการดูวิธีการทำงานของ lnav ให้ละเอียดยิ่งขึ้น คุณสามารถเปิดโปรแกรมด้วยตัวเลือก -d ตามด้วยชื่อไฟล์ที่จะเขียนข้อมูลการดีบัก เช่น:

lnav /var/log/httpd -d lnav.txt

ในตัวอย่างนี้ ข้อมูลการดีบักที่สร้างขึ้นเมื่อ lnav เริ่มต้นจะถูกเขียนลงในไฟล์ชื่อ lnav.txt ภายในไดเร็กทอรีการทำงานปัจจุบัน

สองสามบรรทัดแรกของไฟล์นั้นจะแสดงในภาพต่อไปนี้:

ข้อความที่ไฮไลต์ระบุว่า lnav โหลดไฟล์รูปแบบเริ่มต้น และโดยเฉพาะอย่างยิ่งคือรูปแบบ access_log เพื่อแยกวิเคราะห์บันทึกการเข้าถึง Apache นอกจากนี้ lnav ยังอนุญาตให้แยกวิเคราะห์แต่ละบรรทัดเอาต์พุตเพื่อให้เอาต์พุตมองเห็นและเข้าใจได้ง่ายขึ้น

การอ่านที่แนะนำ: GoAccess (A Real-Time Apache และ Nginx) Web Server Log Analyzer

หากต้องการใช้คุณสมบัตินี้ ให้เปิดโปรแกรมและเลือกบรรทัดที่คุณต้องการแยกวิเคราะห์ บรรทัดที่เลือกจะเป็นบรรทัดที่ด้านบนของหน้าต่างเสมอ จากนั้นกด p แล้วคุณจะเห็นผลลัพธ์ต่อไปนี้:

หากต้องการกลับสู่โหมดปกติ ให้กด p อีกครั้ง

ตอนนี้ หากคุณต้องการดูสรุปบันทึกตามวันที่และเวลา ให้กด i ตัวอย่างเช่น ข้อความที่ไฮไลต์ระบุว่าในวันจันทร์ที่ 10 เมษายน ระหว่างเวลา 22.00 น. ถึง 23.00 น. มีคำขอ HTTP 37 รายการ โดย 14 รายการทำให้เกิดข้อผิดพลาด

เมื่อคุณระบุปัญหาที่อาจเกิดขึ้นตามฮิสโตแกรมดังที่แสดงด้านบนแล้ว คุณสามารถกด i เพื่อออกจากมุมมองเพื่อตรวจสอบรายละเอียดเพิ่มเติมโดยใช้ parser ตามที่อธิบายไว้ก่อนหน้านี้ หรือคุณสามารถใช้ความสามารถ SQL ที่มีอยู่แล้วภายในโดยการพิมพ์เครื่องหมายอัฒภาคและเขียนแบบสอบถามมาตรฐาน ตัวอย่างเช่น ทำ:

;.schema

เพื่อดูตารางที่มีอยู่ในสคีมาฐานข้อมูล หลังจากระบุตารางที่ถูกต้องแล้ว (access_log ในกรณีของเรา) ให้กด q จากนั้นใช้แบบสอบถามต่อไปนี้เพื่อส่งคืนข้อมูลที่มีอยู่ทั้งหมดเกี่ยวกับคำขอที่มาจาก 195.154.230.31:

;SELECT * FROM access_log WHERE c_ip='195.154.230.31'

โปรดทราบว่าเราสามารถกรองผลลัพธ์ตาม log_time ได้ด้วย ประเด็นก็คือ ใส่ SQL เข้าไปสักหน่อย และมันก็มีขีดจำกัดว่าคุณจะทำอะไรกับ lnav ได้บ้าง

รูปแบบบันทึกเริ่มต้นของ Apache

รูปแบบบันทึกจำนวนมากถูกโหลดโดยค่าเริ่มต้นด้วย lnav และจะถูกแยกวิเคราะห์โดยที่เราไม่ต้องดำเนินการใดๆ คุณสามารถดูรายการได้ในส่วนรูปแบบบันทึกในเอกสารอย่างเป็นทางการ

รูปแบบเริ่มต้นระบุไว้ใน ~/.lnav/formats/default/default-formats.json.sample และรูปแบบอื่นๆ สามารถเพิ่มได้ ~/.lnav/formats โดยใช้ < รหัส>.json ส่วนขยาย

อย่างไรก็ตาม การแก้ไขไฟล์เหล่านี้จำเป็นต้องมีความคุ้นเคยกับ JSON (Javascript Object Notation) และไลบรารี PCRE (Perl-Compatible Regular Expressions) ในระดับหนึ่ง

เหตุใด lnav จึงไม่แสดงไฟล์บันทึกข้อผิดพลาดของ Apache? เหตุผลก็คือ บันทึกเหล่านั้นไม่ตรงกับนิพจน์ทั่วไปในไฟล์รูปแบบที่มีอยู่ ดังนั้นจึงถือเป็นไฟล์ข้อความปกติ (หมายถึงไฟล์ที่ไม่มีรูปแบบบันทึกที่กำหนด)

การอ่านที่แนะนำ: วิธีตรวจสอบสถิติการโหลดเว็บเซิร์ฟเวอร์ Apache และสถิติเพจ

ตามที่กล่าวไว้ข้างต้น คุณสามารถสร้างรูปแบบของคุณเองได้เมื่อคุณคุ้นเคยกับ JSON และ PCRE บ้างแล้ว สิ่งนี้อาจมีประโยชน์ ตัวอย่างเช่น หากคุณได้กำหนดบันทึก Apache แบบกำหนดเอง

สรุป

แม้ว่าเราจะใช้บันทึกการเข้าถึง Apache เพื่อสาธิตวิธีใช้ lnav โปรดจำไว้ว่ายังมีบันทึกประเภทอื่นๆ อีกหลายประเภทที่สามารถดูและแยกวิเคราะห์ได้โดยใช้เครื่องมือนี้ หากเครื่องมือไม่รู้จักบันทึกเฉพาะ คุณสามารถสร้างรูปแบบเพิ่มเติมและติดตั้งได้ตามข้อบ่งชี้ที่ให้ไว้ที่นี่

คุณมีคำถามหรือความคิดเห็นเกี่ยวกับบทความนี้หรือไม่? และเช่นเคย โปรดแจ้งให้เราทราบโดยใช้แบบฟอร์มด้านล่าง เราหวังว่าจะได้ยินจากคุณ!