10 điểm bởi GN⁺ 2025-04-23 | 1 bình luận | Chia sẻ qua WhatsApp
  • Trình xem log TUI đa máy chủ nhanh và tiết kiệm tài nguyên, có thể thu thập và phân tích log từ xa chỉ bằng kết nối SSH mà không cần máy chủ trung tâm
  • Dễ nắm bắt luồng log nhờ trực quan hóa histogram dòng thời gian và lọc theo thời gian
  • Hỗ trợ xử lý tốc độ cao và triển khai đơn giản bằng cách kết hợp cơ bản awk, tail, head
  • Truy vấn log được xử lý từ xa mà không cần tải về cục bộ, giảm thiểu sử dụng mạng và tối ưu cho xử lý log dung lượng lớn
  • Mặc định đơn giản nhưng có khả năng mở rộng thông qua nhiều tệp cấu hình, SSH config và thao tác UI

Giới thiệu Nerdlog

  • Nerdlog là trình xem log giao diện văn bản hoạt động không cần máy chủ trung tâm
  • Có thể phân tích log giống Graylog/Kibana, nhưng là công cụ thay thế gọn nhẹ, không có gánh nặng cài đặt và bảo trì
    • Động lực phát triển ban đầu bắt đầu từ sự thất vọng với Splunk chậm và kém hiệu quả
  • Được tối ưu để lọc và trực quan hóa log đồng thời từ nhiều máy chủ từ xa
  • Chủ yếu được thiết kế để xử lý log hệ thống (/var/log/messages, /var/log/syslog), nhưng cũng hỗ trợ các định dạng khác
  • Có thể xử lý nhanh cả log dung lượng lớn trên 1GB
  • Mục tiêu cốt lõi là tối đa hóa tốc độ và hiệu quả khi xem log đa nút

Đặc điểm thiết kế

  • Hoạt động không cần máy chủ trung tâm, tạo kết nối ssh cho từng nút và giữ ở trạng thái chờ
  • Không tải xuống toàn bộ log, chỉ truyền tối đa 250 thông điệp log và dữ liệu histogram cho mỗi truy vấn
  • Hợp nhất mọi phản hồi để cung cấp một chế độ xem thống nhất
  • Sử dụng nén Gzip khi truyền để giảm chi phí mạng

Trạng thái và lịch sử dự án

  • Được tạo trong một hackathon cá nhân năm 2022 để thay thế Splunk chậm, và được công bố mã nguồn mở vào năm 2025
  • Được triển khai nhanh nên có mã spaghetti và thiếu độ bao phủ kiểm thử
  • Mới chỉ được kiểm thử trong sử dụng thực tế trên môi trường Linux
  • Đang ở giai đoạn proof-of-concept, nhưng đủ nhanh và ổn định để sử dụng thực tế

Tóm tắt cách sử dụng

  • Khi chạy ứng dụng, cửa sổ nhập truy vấn sẽ xuất hiện
  • Logstream là các tệp log liên tiếp trên những máy chủ có thể truy cập qua ssh
  • Có thể chỉ định cổng ssh, đường dẫn tệp log, hoặc dùng ssh config và tệp cấu hình riêng
  • Select field expression dùng kiểu SQL để chỉ định các trường sẽ hiển thị trong UI

Ví dụ:

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

Ví dụ tệp cấu hình (~/.config/nerdlog/logstreams.yaml):

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

Cấu trúc UI

  • Bộ lọc nhập mẫu Awk: hỗ trợ /foo/, ( /bar/ || /baz/ ) && !/qux/ v.v.
  • Nút Edit: mở cửa sổ nhập toàn bộ truy vấn
  • Nút Menu: cung cấp các chức năng như quay lại, tiến tới, sao chép truy vấn
  • Histogram: trực quan hóa mật độ log theo thời gian và cho phép chọn khoảng thời gian
  • Bảng log: log mới nhất nằm ở dưới cùng, có thể cuộn sang phải để xem các trường chi tiết
  • Thanh trạng thái:
    • Màu xanh lá: số logstream đã kết nối và đang chờ
    • Màu cam: số logstream đang được truy vấn
    • Màu đỏ: số logstream đang trong quá trình kết nối
    • Các số bên phải: tổng số log khớp / số log hiện đã tải / vị trí con trỏ
  • Dòng lệnh: truy cập bằng phím :, có thể nhập lệnh theo kiểu Vim

Cách điều hướng

  • Phím thông thường: Tab, Shift+Tab, Enter, Esc, PgUp, PgDn v.v.
  • Phím kiểu Vim: h, j, k, l, g, G, Ctrl+U, Ctrl+D, i, a v.v.
  • Trong trường nhập liệu, dùng Up, Down, Ctrl+P, Ctrl+N để duyệt lịch sử
  • Ctrl+K, Ctrl+J: duyệt toàn bộ lịch sử truy vấn

Các lệnh chính

  • :xc hoặc :xclip: sao chép trạng thái truy vấn hiện tại thành chuỗi lệnh vào clipboard
    nerdlog --lstreams 'localhost' --time -3h --pattern '/something/'  
    
  • :back, :fwd: di chuyển tới truy vấn trước/sau như trình duyệt
  • :edit: mở cửa sổ chỉnh sửa truy vấn
  • :write [filename]: lưu log hiện đã tải vào tệp
  • :reconnect, :disconnect: kết nối lại / ngắt kết nối logstream
  • :set 옵션=값: thay đổi cài đặt (hỗ trợ numlines, timezone v.v.)
  • :q: thoát chương trình

Yêu cầu

  • Cần quyền truy cập SSH tới các máy chủ từ xa
  • SSH agent phải đang chạy trên máy cục bộ
  • Máy chủ phải cài đặt gawk, và mawk không được hỗ trợ
  • Dịch vụ ghi log hệ thống như rsyslog phải đang chạy thì mới có thể dùng /var/log/syslog
  • Xem thêm tại mục Yêu cầu và giới hạn

Kết luận

  • Nerdlog là công cụ hiệu quả giúp kiểm tra log từ xa nhanh chóng và trực quan mà không cần cài đặt
  • Không cần cấu hình phức tạp, vẫn có thể phân tích theo thời gian thực trong khi tiết kiệm tài nguyên mạng
  • Đặc biệt là công cụ phân tích log lý tưởng cho người dùng Vim hoặc những ai ưa chuộng công cụ CLI

1 bình luận

 
GN⁺ 2025-04-23
Ý kiến trên Hacker News
  • Làm rất tuyệt. TUI thực sự gọn gàng và tôi thích biểu đồ histogram ở phía trên. Hôm nay tôi sẽ thử nghịch cái này
  • Điều tôi học được hôm nay: mẫu awk không chỉ là các biểu thức chính quy đơn giản mà còn có thể kết hợp với các toán tử boolean. Tôi đã dùng awk một chút nhưng không biết điều này
  • Dự án thực sự rất tuyệt. Tôi đặc biệt thích sự đơn giản của biểu đồ histogram theo dòng thời gian, thiết kế ưu tiên từ xa và cách tiếp cận TUI
    • Tôi cũng từng gặp những khó khăn tương tự khi xử lý log từ nhiều host, và kết quả là đã tạo ra một công cụ tên là Logdy
    • Logdy là công cụ dựa trên web, tập trung vào tail thời gian thực, tìm kiếm log có cấu trúc và lọc nhanh trên nhiều nguồn. Không cần máy chủ trung tâm
    • Không phải để so sánh trực tiếp, nhưng nếu bạn đang khám phá lĩnh vực này thì đây có thể là một cách tiếp cận bổ sung hoặc hữu ích cho các kịch bản khác
    • Cần thêm công việc để bổ sung chức năng truy vấn trên nhiều host
    • Dù sao thì cũng xin khen nerdlog. Lúc nào cũng vui khi thấy một công cụ gọn nhẹ không cần chạy nhiều dịch vụ
  • Trên landing page có nhắc đến journalctl một lần, và có hàm ý rằng log phải được lưu dạng văn bản thuần trong syslog kiểu cũ
    • Tôi không muốn lưu log dạng văn bản thuần và dùng các giải pháp cũ như logrotate
    • Bản thân journald đã có tính năng tích hợp để nhận log từ host từ xa và có thể tìm kiếm chúng (dùng --merge)
  • Tôi chắc chắn sẽ nghịch cái này sau. Không hỗ trợ kho lưu trữ log nén gzip làm giảm đáng kể trường hợp sử dụng của tôi
    • Có vẻ tác giả đã cân nhắc đầy đủ khi nêu đây là một hạn chế mà mọi người có thể sẽ chú ý. Tôi tự hỏi cuối cùng có kế hoạch hỗ trợ không
  • Trông ổn đấy. Nếu muốn có thêm người dùng, bạn có thể nhận được sự hỗ trợ từ cộng đồng để đóng gói cho các bản phân phối Linux chính
  • Rất tốt. Tôi đã thêm nó vào danh sách nhỏ các trình xem log của mình https://github.com/dloss/klp#alternative-tools
  • Tốt đấy. Tôi đã cần nó vài năm trước. Không có tệp license à?
  • Có vẻ hay. Tôi tự hỏi liệu có cách nào dùng định dạng ngày/giờ RFC 3339 mà không cần sửa mã nguồn không
    • Cũng không biết nó có hoạt động với runit (Void Linux) không
  • Tuyệt vời. Tôi đã tìm thứ như thế này
  • Tôi tự hỏi liệu có thể xem log trong AWS CloudWatch không