Làm chủ lnav: Kỹ thuật xem và phân tích log real-time đỉnh cao trên Linux

Monitoring tutorial - IT technology blog
Monitoring tutorial - IT technology blog

Khi log không còn là mớ bòng bong

Nếu bạn đang quản trị hệ thống hoặc làm DevOps, chắc hẳn bạn đã quen với cảnh server báo lỗi 500 giữa đêm. Việc đầu tiên chúng ta làm thường là SSH vào máy chủ để kiểm tra log. Tuy nhiên, một ứng dụng microservices hiện đại có thể đẩy log ra cả chục file: từ access.log, error.log của Nginx đến log riêng của Java, Python hay /var/log/syslog.

Tôi từng tốn cả tiếng đồng hồ mở 4 cửa sổ Terminal, chạy tail -f trên từng file rồi căng mắt khớp mốc thời gian (timestamp) giữa chúng. Cách làm thủ công này cực kỳ dễ sót lỗi. Dù hệ thống có Prometheus hay Grafana để cảnh báo, nhưng để tìm ra nguyên nhân gốc rễ (root cause) ở tầng code, bạn vẫn phải trực tiếp “lặn” vào log.

Tại sao combo tail -f và grep là chưa đủ?

Nhiều anh em vẫn trung thành với bộ tail -f | grep "ERROR". Cách này ổn cho task nhỏ, nhưng khi sự cố phức tạp, nó bộc lộ 4 điểm yếu chí mạng:

  • Thiếu trực quan: Log đổ ra trắng xóa, không phân biệt được đâu là INFO, WARN hay ERROR.
  • Dữ liệu rời rạc: Bạn không thể xem log Nginx và log App lồng ghép vào nhau theo đúng trình tự thời gian thực.
  • Khó truy vết: Việc cuộn ngược lên tìm lại dữ liệu đã trôi qua trong tail -f là một cực hình.
  • Format hỗn loạn: Phải đọc song song cả JSON log và Plain Text log khiến não bộ quá tải.

lnav – Trợ thủ đắc lực cho dân kỹ thuật

lnav (The Log File Navigator) không chỉ là trình xem log đơn thuần. Nó là công cụ phân tích log thông minh, tự động nhận diện định dạng và sắp xếp dữ liệu cực kỳ khoa học ngay trên Terminal.

1. Cài đặt nhanh trong 30 giây

lnav rất nhẹ và có sẵn trên hầu hết các bản phân phối Linux hiện nay:

# Ubuntu/Debian
sudo apt install lnav

# CentOS/RHEL (cần bật EPEL)
sudo yum install lnav

# macOS
brew install lnav

2. Gộp mọi nguồn log vào một màn hình duy nhất

Tính năng “ăn tiền” nhất của lnav là khả năng gộp (merge) log. Thay vì mở từng file, bạn chỉ cần trỏ đến thư mục:

lnav /var/log/nginx/

lnav sẽ quét toàn bộ file, tự động giải nén các file .gz cũ và sắp xếp tất cả theo thứ tự thời gian. Những dòng ERROR sẽ được bôi đỏ, WARN màu vàng. Bạn sẽ thấy dòng log của Nginx ngay sát dòng log của ứng dụng, giúp việc tái hiện luồng lỗi chính xác hơn bao giờ hết.

3. Phím tắt giúp bạn thao tác như Pro

Để tối ưu tốc độ xử lý khi hệ thống đang “cháy”, bạn cần nhớ các phím sau:

  • e / E: Nhảy nhanh đến lỗi (Error) tiếp theo hoặc trước đó.
  • w / W: Tìm nhanh các cảnh báo (Warning).
  • /: Tìm kiếm bằng Regex (tương tự như trong Vim).
  • Shift + I: Hiển thị biểu đồ tần suất (Histogram) để biết lúc nào log đổ về nhiều nhất.
  • o / O: Di chuyển qua lại giữa các mốc thời gian quan trọng.

Kỹ thuật nâng cao: Lọc dữ liệu và truy vấn SQL

lnav cho phép bạn tương tác với log như một cơ sở dữ liệu thực thụ.

Loại bỏ nhiễu bằng Filter

Nếu log bị ngập bởi các request từ bot, bạn có thể ẩn chúng ngay lập tức bằng lệnh:

:filter-out (Googlebot|UptimeRobot)

Màn hình sẽ sạch bóng các dòng log rác, giúp bạn tập trung 100% vào hành vi của người dùng thật.

Truy vấn log bằng SQL

Ít ai ngờ lnav tích hợp sẵn SQLite bên dưới. Với các log có format chuẩn (Nginx, Apache, Syslog), bạn có thể nhấn phím ; và gõ lệnh SQL để thống kê dữ liệu:

SELECT remote_ip, count(*) AS total 
FROM nginx_access 
WHERE status = 404 
GROUP BY remote_ip 
ORDER BY total DESC 
LIMIT 5;

Lệnh này sẽ trả về 5 IP gặp lỗi 404 nhiều nhất. Đây là cách cực nhanh để phát hiện các cuộc tấn công dò đường (scanning) hoặc lỗi link hỏng trên website.

Theo dõi log từ xa qua SSH

Bạn không cần cài lnav trên mọi server. Chỉ cần pipe dữ liệu từ SSH về máy cá nhân:

ssh user@server-production "tail -f /var/log/app.log" | lnav

Chiến lược quản trị log hiệu quả

lnav cực mạnh nhưng nó không thay thế hoàn toàn các hệ thống lớn. Kinh nghiệm thực tế của tôi là phối hợp “kiềng ba chân”:

  1. Prometheus + Grafana: Theo dõi chỉ số tổng quát (CPU, RAM, Error Rate).
  2. ELK Stack hoặc Graylog: Lưu trữ log tập trung để tra cứu lịch sử từ nhiều tháng trước (Audit).
  3. lnav: Dùng để debug trực tiếp khi có sự cố đang xảy ra (Live Troubleshooting).

Việc sử dụng lnav giúp tôi giảm thời gian tìm lỗi từ 15-20 phút xuống còn chưa đầy 2 phút trong các ca trực vận hành.

Tóm lại, nếu bạn vẫn đang lặn ngụp trong mớ log đen trắng của tail -f, hãy thử lnav ngay hôm nay. Nó giống như việc nâng cấp từ một chiếc xe đạp lên một chiếc xe phân khối lớn – giúp bạn xử lý công việc nhanh, chuẩn và chuyên nghiệp hơn rất nhiều.

Share: