NerdLog - Trình xem log TUI đa máy chủ nhanh với biểu đồ histogram dòng thời gian
(github.com/dimonomid)- 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,PgDnv.v. - Phím kiểu Vim:
h,j,k,l,g,G,Ctrl+U,Ctrl+D,i,av.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
:xchoặc:xclip: sao chép trạng thái truy vấn hiện tại thành chuỗi lệnh vào clipboardnerdlog --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,timezonev.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ư
rsyslogphả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
Ý kiến trên Hacker News
awkkhô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ùngawkmột chút nhưng không biết điều nàyjournalctlmộ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ũlogrotatejournaldđã 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)