Cài đặt GoAccess: Phân tích log Nginx Real-time “nhẹ tênh” thay thế ELK stack

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

Vượt qua giới hạn của lệnh tail -f

Dân quản trị server chắc chẳng lạ gì cảnh mở Terminal và gõ tail -f /var/log/nginx/access.log. Nhìn dòng text chạy vù vù trông khá “nguy hiểm” và vui mắt. Thế nhưng, khi cần lọc nhanh IP nào đang spam, tìm bot xấu hay thống kê lỗi 404 nhiều nhất, bạn sẽ thấy đây là một cực hình thực sự.

Kinh nghiệm xương máu của mình: Đừng cố dựng cụm ELK (Elasticsearch, Logstash, Kibana) chỉ để soi log cho vài cái blog cá nhân. Mình từng thử và kết quả là RAM 4GB bị nuốt sạch trong nốt nhạc. Đôi khi chúng ta không cần xe tải để chở một bao gạo. GoAccess chính là chiếc xe máy lách qua đám tắc đường mà bạn đang tìm kiếm.

Công cụ này được viết bằng C nên tốc độ xử lý cực đáng nể. Nó có thể nhai gọn 100.000 dòng log chỉ trong vài giây. Bạn có thể xem báo cáo ngay tại Terminal hoặc xuất ra file HTML Dashboard cập nhật real-time qua WebSocket.

Cài đặt GoAccess: Xong trong một nốt nhạc

Mặc dù các distro Linux đều có sẵn GoAccess, mình khuyên bạn nên cài bản chính chủ để dùng được các tính năng mới nhất, đặc biệt là hỗ trợ WebSocket ổn định.

Hệ điều hành Ubuntu/Debian

wget -O - https://deb.goaccess.io/gnugpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/goaccess.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/goaccess.gpg arch=$(dpkg --print-architecture)] https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/goaccess.list
sudo apt-get update
sudo apt-get install goaccess

Hệ điều hành CentOS/RHEL

sudo yum install goaccess

goaccess --version để kiểm tra. Nếu thấy phiên bản 1.x trở lên là bạn đã sẵn sàng “vào việc”.

Soi log trực tiếp trên Terminal

Đây là cách nhanh nhất để chẩn đoán bệnh cho server ngay khi vừa SSH vào. Bạn chỉ cần trỏ lệnh đến file log của Nginx:

goaccess /var/log/nginx/access.log -c

Sau khi chạy, bảng Log Format Configuration sẽ hiện ra. Với cấu hình Nginx tiêu chuẩn, bạn chỉ cần nhấn Space chọn dòng NCSA Combined Log Format rồi nhấn Enter.

Giao diện hiện ra cực kỳ chi tiết với các chỉ số quan trọng:

  • Unique visitors: Lọc khách truy cập thực tế, loại bỏ bớt nhiễu từ bot.
  • 404 Not Found: Phát hiện ngay các link hỏng hoặc các đợt quét lỗ hổng từ hacker.
  • Visitor Hostnames & IPs: Nhìn tận mặt những IP đang “dập” server với tần suất bất thường.

Mẹo nhỏ: Nhấn phím s để sắp xếp dữ liệu hoặc dùng các phím số từ 1-9 để nhảy nhanh qua các bảng thống kê khác nhau.

Biến GoAccess thành Web Dashboard chuyên nghiệp

Xem Terminal thì ngầu, nhưng để báo cáo hoặc theo dõi liên tục thì giao diện Web vẫn là chân á. GoAccess tích hợp sẵn server WebSocket để đẩy dữ liệu mới nhất xuống trình duyệt mà không cần tải lại trang.

Sử dụng lệnh sau để bắt đầu render dashboard:

goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED --real-time-html

Lưu ý: Tham số -o phải trỏ vào đúng thư mục mà Nginx của bạn đang làm web server. Bây giờ, chỉ cần mở http://your-server-ip/report.html. Bạn sẽ thấy các biểu đồ nhảy số liên tục mỗi khi có người truy cập.

Kinh nghiệm thực chiến tránh treo server

GoAccess rất nhẹ (thường chỉ tốn 30-50MB RAM), nhưng nếu file log của bạn nặng vài GB, nó sẽ quét rất lâu ở lần đầu tiên. Hãy áp dụng 3 mẹo sau:

1. Chỉ lấy log mới nhất

Thay vì đọc toàn bộ đống log cũ từ năm ngoái, hãy dùng tail để chỉ lấy 100.000 dòng gần nhất. Cách này giúp dashboard load nhanh như chớp:

tail -n 100000 /var/log/nginx/access.log | goaccess - -o /var/www/html/report.html --log-format=COMBINED --real-time-html

2. Chạy ngầm với Systemd

Để dashboard không bị tắt khi bạn thoát Terminal, hãy tạo một file service tại /etc/systemd/system/goaccess.service. Đây là cách làm chuẩn chỉnh nhất cho môi trường Production.

3. Khóa Dashboard bằng mật khẩu

File report.html chứa rất nhiều IP khách hàng và cấu trúc thư mục nhạy cảm. Đừng để nó công khai. Hãy dùng tính năng Basic Auth của Nginx để bảo vệ:

location /report.html {
    auth_basic "Vui lòng đăng nhập";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

Tại sao không dùng Google Analytics cho khỏe?

Nhiều người hỏi mình câu này. Thực tế, Google Analytics (GA) chỉ thấy được những gì diễn ra trên trình duyệt khách hàng. Những cú hit từ bot, lỗi 500 phát sinh từ code, hay các cuộc tấn công Brute-force vào hệ thống thì GA hoàn toàn “mù tịt”.

GoAccess lấp đầy khoảng trống đó. Nó nằm giữa ranh giới của một công cụ debug lỗi và một hệ thống giám sát hiệu năng. Cài đặt trong 1 phút nhưng giá trị mang lại khi server gặp sự cố là cực lớn.

Lời kết

GoAccess là món vũ khí sắc bén cho mọi System Admin hay DevOps thích sự tối giản. Nó giúp việc đọc log Nginx khô khan trở nên trực quan và thú vị hơn. Nếu bạn đang quản lý VPS nhỏ, hãy thử cài ngay để thấy những gì đang thực sự diễn ra phía sau hậu trường website của mình.

Nếu gặp khó khăn khi cấu hình WebSocket trên HTTPS hoặc tùy biến Log Format, bạn cứ để lại bình luận phía dưới nhé!

Share: