10 คะแนน โดย GN⁺ 2025-04-23 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • โปรแกรมดูล็อกหลายโฮสต์แบบ TUI ที่รวดเร็วและใช้ทรัพยากรอย่างมีประสิทธิภาพ ซึ่งสามารถ รวบรวมและวิเคราะห์ล็อกระยะไกลได้ด้วยการเชื่อมต่อ SSH เพียงอย่างเดียว โดยไม่ต้องมีเซิร์ฟเวอร์กลาง
  • เข้าใจการไหลของล็อกได้ง่ายด้วย การแสดงผลฮิสโตแกรมไทม์ไลน์และการกรองตามเวลา
  • รองรับ การประมวลผลความเร็วสูงและการติดตั้งที่เรียบง่าย โดยใช้การผสมผสานพื้นฐานของ awk, tail, head
  • คำสั่งคิวรีล็อกจะ ประมวลผลบนเครื่องระยะไกลโดยไม่ต้องดาวน์โหลดลงเครื่องโลคัล ช่วยลดการใช้เครือข่ายและเหมาะกับการจัดการล็อกขนาดใหญ่
  • พื้นฐานเรียบง่าย แต่มีความยืดหยุ่นผ่าน ไฟล์ตั้งค่าหลากหลาย, SSH config, และการควบคุม UI

แนะนำ Nerdlog

  • Nerdlog คือ โปรแกรมดูล็อกแบบ UI บนข้อความที่ทำงานได้โดยไม่ต้องมีเซิร์ฟเวอร์กลาง
  • สามารถวิเคราะห์ล็อกได้คล้าย Graylog/Kibana แต่เป็น เครื่องมือทางเลือกแบบเบาที่ไม่สร้างภาระด้านการติดตั้งและการบำรุงรักษา
    • แรงบันดาลใจเริ่มต้นของการพัฒนามาจากความผิดหวังกับ Splunk ที่ช้าและไม่มีประสิทธิภาพ
  • เหมาะอย่างยิ่งสำหรับการ กรองและแสดงผลล็อกจากหลายเซิร์ฟเวอร์ระยะไกลพร้อมกัน
  • ออกแบบมาหลัก ๆ เพื่อจัดการ system log (/var/log/messages, /var/log/syslog) แต่รองรับฟอร์แมตอื่นด้วย
  • ประมวลผลล็อกขนาดใหญ่เกิน 1GB ได้อย่างรวดเร็ว
  • เป้าหมายหลักคือ เพิ่มความเร็วและประสิทธิภาพสูงสุดในการดูล็อกจากหลายโหนด

ลักษณะการออกแบบ

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

สถานะและประวัติโครงการ

  • สร้างขึ้นในปี 2022 ระหว่างแฮกกาธอนส่วนตัวเพื่อใช้แทน Splunk ที่ช้า และเปิดซอร์สในปี 2025
  • พัฒนาอย่างรวดเร็ว จึงมีโค้ดแบบสปาเกตตีอยู่และมี test coverage ไม่มาก
  • ผ่านการทดสอบใช้งานจริงเฉพาะบนสภาพแวดล้อม Linux
  • แม้อยู่ในขั้น proof-of-concept แต่ก็เร็วและเสถียรพอสำหรับการใช้งานจริง

สรุปการใช้งาน

  • เมื่อรันแอป จะมีช่องป้อนคิวรีปรากฏขึ้น
  • logstream หมายถึงไฟล์ล็อกแบบต่อเนื่องของเซิร์ฟเวอร์ที่เข้าถึงได้ผ่าน ssh
  • สามารถระบุพอร์ต ssh หรือพาธไฟล์ล็อกได้โดยตรง หรือใช้ ssh config และไฟล์ตั้งค่าแยกต่างหากก็ได้
  • Select field expression ใช้ระบุฟิลด์ที่จะแสดงใน UI ในรูปแบบสไตล์ SQL

ตัวอย่าง:

myuser@myserver.com  
myuser@myserver.com:1234:/some/other/logfile  

ตัวอย่างไฟล์ตั้งค่า (~/.config/nerdlog/logstreams.yaml):

log_streams:  
  myhost-01:  
    hostname: actualhost1.com  
    port: 1234  
    user: myuser  
    log_files:  
      - /some/custom/logfile  

องค์ประกอบของ UI

  • ตัวกรองอินพุตแพตเทิร์น Awk: รองรับ /foo/, ( /bar/ || /baz/ ) && !/qux/ เป็นต้น
  • ปุ่ม Edit: เปิดหน้าต่างป้อนคิวรีแบบเต็ม
  • ปุ่ม Menu: มีฟังก์ชันย้อนกลับ ไปข้างหน้า คัดลอกคิวรี เป็นต้น
  • ฮิสโตแกรม: แสดงความหนาแน่นของล็อกตามช่วงเวลาและเลือกช่วงเวลาได้
  • ตารางล็อก: ล็อกล่าสุดอยู่ด้านล่าง และสามารถเลื่อนแนวนอนทางขวาเพื่อดูฟิลด์รายละเอียดได้
  • แถบสถานะ:
    • สีเขียว: จำนวน logstream ที่เชื่อมต่อและอยู่ในสถานะรอ
    • สีส้ม: จำนวน logstream ที่กำลังถูกคิวรีอยู่ในขณะนี้
    • สีแดง: จำนวน logstream ที่กำลังเชื่อมต่อ
    • ตัวเลขด้านขวา: จำนวนล็อกที่ตรงทั้งหมด / จำนวนล็อกที่โหลดอยู่ตอนนี้ / ตำแหน่งเคอร์เซอร์
  • บรรทัดคำสั่ง: เข้าถึงด้วยปุ่ม : และสามารถป้อนคำสั่งสไตล์ Vim ได้

วิธีนำทาง

  • ปุ่มทั่วไป: Tab, Shift+Tab, Enter, Esc, PgUp, PgDn เป็นต้น
  • ปุ่มสไตล์ Vim: h, j, k, l, g, G, Ctrl+U, Ctrl+D, i, a เป็นต้น
  • ภายในช่องป้อนข้อมูล ใช้ Up, Down, Ctrl+P, Ctrl+N เพื่อดูประวัติ
  • Ctrl+K, Ctrl+J: วนดูประวัติคิวรีทั้งหมด

คำสั่งหลัก

  • :xc หรือ :xclip: คัดลอกสถานะคิวรีปัจจุบันเป็นสตริงคำสั่งไปยังคลิปบอร์ด
    nerdlog --lstreams 'localhost' --time -3h --pattern '/something/'  
    
  • :back, :fwd: ย้ายไปยังคิวรีก่อนหน้า/ถัดไปเหมือนเบราว์เซอร์
  • :edit: เปิดหน้าต่างแก้ไขคิวรี
  • :write [filename]: บันทึกล็อกที่โหลดอยู่ในปัจจุบันลงไฟล์
  • :reconnect, :disconnect: เชื่อมต่อ logstream ใหม่ / ตัดการเชื่อมต่อ
  • :set 옵션=값: เปลี่ยนการตั้งค่า (numlines, timezone เป็นต้น)
  • :q: ปิดโปรแกรม

ข้อกำหนด

  • ต้องมีสิทธิ์เข้าถึงโฮสต์ระยะไกลผ่าน SSH
  • บนเครื่องโลคัล ต้องมี SSH agent ทำงานอยู่
  • บนโฮสต์ ต้องติดตั้ง gawk และ ไม่รองรับ mawk
  • ต้องมีบริการบันทึก system log เช่น rsyslog ทำงานอยู่ จึงจะสามารถใช้ /var/log/syslog ได้
  • รายละเอียดเพิ่มเติมดูได้ที่หัวข้อ Requirements and limitations

สรุป

  • Nerdlog เป็นเครื่องมือที่มีประสิทธิภาพสำหรับการดูล็อกระยะไกลได้อย่างรวดเร็วและเป็นภาพโดยไม่ต้องติดตั้ง
  • ไม่ต้องมีการตั้งค่าซับซ้อน และสามารถวิเคราะห์แบบเรียลไทม์ได้พร้อมทั้งประหยัดทรัพยากรเครือข่าย
  • เหมาะอย่างยิ่งสำหรับ ผู้ใช้ Vim หรือผู้ที่ชื่นชอบเครื่องมือ CLI

1 ความคิดเห็น

 
GN⁺ 2025-04-23
ความคิดเห็นบน Hacker News
  • งานเจ๋งมาก TUI ดูสะอาดตาจริง ๆ และชอบฮิสโตแกรมด้านบนมาก วันนี้กะว่าจะลองเล่นกับมัน
  • สิ่งที่ได้เรียนรู้วันนี้: แพตเทิร์นของ awk เป็นมากกว่า regular expression แบบง่าย ๆ และสามารถรวมกับตัวดำเนินการบูลีนได้ เคยใช้ awk มาบ้างแต่ไม่เคยรู้เรื่องนี้
  • เป็นโปรเจ็กต์ที่เจ๋งมาก ชอบทั้งฮิสโตแกรมไทม์ไลน์ ความเรียบง่ายของการออกแบบแบบ remote-first และแนวทางแบบ TUI โดยเฉพาะ
    • ตอนจัดการล็อกจากหลายโฮสต์ก็เคยเจอความยากคล้ายกัน และสุดท้ายเลยทำเครื่องมือชื่อ Logdy ขึ้นมา
    • Logdy เป็นแบบเว็บ เน้นการ tail แบบเรียลไทม์ การค้นหา structured logs และการกรองอย่างรวดเร็วจากหลายแหล่งข้อมูล โดยไม่ต้องมีเซิร์ฟเวอร์กลาง
    • ไม่ได้ตั้งใจจะเปรียบเทียบตรง ๆ แต่ถ้ากำลังสำรวจพื้นที่นี้อยู่ มันอาจมีประโยชน์ในฐานะแนวทางที่เสริมกันหรือเหมาะกับคนละสถานการณ์
    • ยังต้องทำงานเพิ่มเพื่อรองรับความสามารถในการ query ข้ามหลายโฮสต์
    • ยังไงก็ขอชื่นชม nerdlog ด้วย เป็นเรื่องดีเสมอที่ได้เห็นเครื่องมือกระชับ ๆ ที่ไม่ต้องรันหลายบริการ
  • ในหน้า landing page มีการพูดถึง journalctl ครั้งหนึ่ง และมีนัยว่าล็อกต้องถูกเก็บเป็นข้อความล้วนใน syslog แบบเก่า
    • ไม่อยากเก็บล็อกแบบข้อความล้วนและใช้วิธีแก้ปัญหาเก่า ๆ อย่าง logrotate
    • ตัว journald เองก็มีความสามารถในตัวสำหรับรับล็อกจากโฮสต์ระยะไกลและค้นหาได้ (โดยใช้ --merge)
  • เดี๋ยวสักพักจะต้องลองเล่นกับมันแน่ ๆ การที่ยังไม่รองรับ gzipped log archive ทำให้กรณีใช้งานของผมลดลงพอสมควร
    • ดูเหมือนเขาจะคิดเรื่องนี้ไว้ดีแล้ว เพราะยกมันขึ้นมาเป็นข้อจำกัดที่คิดว่าคนจะสนใจ เลยสงสัยว่าสุดท้ายมีแผนจะรองรับไหม
  • ดูดีมาก ถ้าอยากได้ผู้ใช้มากขึ้น อาจขอความช่วยเหลือจากชุมชนเพื่อทำแพ็กเกจสำหรับลินุกซ์ดิสโทรหลัก ๆ ได้
  • ดีมาก เพิ่มเข้าไปในลิสต์ log viewer เล็ก ๆ ของผมแล้ว https://github.com/dloss/klp#alternative-tools
  • ดีเลย เคยต้องการสิ่งนี้เมื่อหลายปีก่อน ไม่มีไฟล์ไลเซนส์เหรอ?
  • ดูดีนะ สงสัยว่ามีวิธีใช้วันที่/เวลาในรูปแบบ RFC 3339 โดยไม่ต้องแก้ซอร์สโค้ดไหม
    • สงสัยว่าจะใช้กับ runit (Void Linux) ได้ไหม
  • ยอดเยี่ยม กำลังหาของแบบนี้อยู่พอดี
  • สงสัยว่าสามารถดูล็อกจาก AWS CloudWatch ได้ไหม