Ám ảnh mang tên “soi log” mỗi sáng
Hồi đầu quản trị server cho một startup, mình hay rơi vào cảnh “nước đến chân mới nhảy”. Có lần sáng sớm mở mắt ra, thấy website báo lỗi 502 trắng xóa. Vào kiểm tra, mình mới tá hỏa: server bị brute-force SSH suốt đêm với hơn 20.000 lượt thử mật khẩu. Lúc đó, mình mới cuống cuồng dùng grep và tail -f để lục lọi trong đống /var/log/auth.log dài dằng dặc.
Cảm giác nhìn hàng ngàn dòng log chạy vù vù trên màn hình console thực sự là một cực hình. Nó vừa hại mắt, vừa dễ bỏ sót dấu hiệu bất thường. Nếu anh em quản lý từ 3-5 con VPS trở lên, việc đăng nhập thủ công vào từng con để check log mỗi ngày là điều bất khả thi.
Tại sao chúng ta thường lờ đi các cảnh báo nguy hiểm?
Hệ thống Linux ghi lại mọi thứ: từ việc login thành công đến lỗi kernel. Tuy nhiên, chúng ta thường bỏ qua vì ba lý do chính:
- Biển dữ liệu: Một server chạy Nginx bình thường có thể sinh ra 50-100MB log mỗi ngày. 99% trong số đó là thông tin vô thưởng vô phạt.
- Sự phân tán: Mỗi dịch vụ (MySQL, SSH, Cron) lại cất giấu log ở một góc riêng.
- Thiếu tính chủ động: Log chỉ nằm yên một chỗ. Nếu không có sự cố, chẳng mấy ai rảnh rỗi vào xem.
Kết quả là những dấu hiệu như ổ cứng còn dưới 10% dung lượng, hay một IP lạ đang dò mật khẩu thường bị lờ đi cho đến khi hệ thống sập hoàn toàn.
Giải pháp nào để kiểm soát log hiệu quả?
Để xử lý đống dữ liệu này, anh em thường cân nhắc ba hướng:
- ELK Stack hoặc Graylog: Giải pháp này cực xịn với biểu đồ dashboard đẹp mắt. Nhưng lưu ý: nó ngốn RAM kinh khủng. Chạy ELK trên VPS 2GB RAM là tự sát, chưa kể cấu hình mất cả ngày trời.
- Tự viết script Bash/Python: Bạn có thể viết script để
greptừ khóa “Error” rồi bắn qua Telegram. Cách này linh hoạt nhưng tốn công bảo trì khi định dạng log thay đổi. - Công cụ phân tích log tinh gọn: Đây là lựa chọn tối ưu cho các server vừa và nhỏ.
Logwatch – Trợ lý tóm tắt log siêu nhẹ
Sau nhiều lần thử sai, mình chọn Logwatch. Đây là script Perl cực nhẹ, hoạt động theo cơ chế: quét toàn bộ file log trong 24 giờ qua, lọc ra những ý chính và gửi báo cáo súc tích qua email. Thay vì đọc 10.000 dòng log thô, bạn chỉ cần lướt qua một email dài khoảng 2 màn hình điện thoại. Quá hời đúng không?
Bước 1: Cài đặt Logwatch và Postfix
Để gửi được email, server cần một trình chuyển phát thư (Mail Transfer Agent). Mình khuyến khích dùng Postfix vì nó ổn định và dễ relay qua Gmail hoặc SendGrid.
sudo apt update
sudo apt install logwatch postfix -y
Khi cài Postfix, màn hình cấu hình hiện ra, anh em chọn “Internet Site”. Sau đó, hãy điền tên miền của server (ví dụ: server.itfromzero.com) vào mục system mail name.
Bước 2: Cấu hình nhận báo cáo qua Email
Mặc định, Logwatch chỉ in báo cáo ra màn hình terminal. Để tự động gửi mail, chúng ta cần chỉnh sửa file cấu hình. Đừng sửa trực tiếp file trong /usr/share/logwatch. Hãy copy sang /etc/logwatch để tránh bị ghi đè khi update package.
sudo cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/
Bây giờ, hãy mở file lên bằng nano và tinh chỉnh các dòng sau:
sudo nano /etc/logwatch/conf/logwatch.conf
Các thông số cần ưu tiên:
- Output = mail (Chuyển từ in ra màn hình sang gửi email)
- Format = html (Gửi dạng HTML giúp giao diện báo cáo chuyên nghiệp, dễ đọc hơn text thuần)
- MailTo = [email protected] (Địa chỉ nhận báo cáo mỗi sáng)
- Detail = Low (Mới dùng nên để Low hoặc Med để nắm bao quát, khi nào cần soi kỹ mới để High)
- Range = yesterday (Tổng hợp dữ liệu của ngày hôm trước)
Bước 3: Chạy thử và kiểm tra Inbox
Đừng đợi đến sáng mai. Anh em hãy chạy ngay lệnh này để kiểm tra cấu hình:
sudo logwatch --output mail
Nếu lệnh chạy êm và email xuất hiện trong Inbox (hoặc mục Spam), bạn đã thành công 90% rồi đấy.
Bước 4: Thiết lập Relay Email (Chìa khóa thành công)
Mail gửi trực tiếp từ IP của VPS rất dễ bị Gmail chặn vì nghi ngờ spam. Cách khắc phục tốt nhất là cấu hình Postfix để relay qua SendGrid hoặc Amazon SES. Với nhu cầu cá nhân, bạn có thể dùng chính SMTP của Gmail thông qua tính năng “App Password”. Việc này đảm bảo báo cáo log luôn đến tay bạn đúng giờ mà không bị thất lạc.
Mẹo thực chiến để dùng Logwatch hiệu quả hơn
Dưới đây là vài kinh nghiệm mình đúc kết được sau vài năm sử dụng:
1. Chỉ tập trung vào dịch vụ trọng yếu: Nếu server chạy nhiều thứ nhưng bạn chỉ lo cho SSH và Nginx, hãy chỉ định cụ thể dịch vụ trong file config bằng biến Service để báo cáo ngắn gọn hơn.
2. Điều chỉnh giờ gửi báo cáo: Ubuntu tự tạo cron job tại /etc/cron.daily/00logwatch. Mình thường đổi giờ chạy cron sang 7 giờ sáng. Như vậy, vừa ngủ dậy nhâm nhi cafe là có báo cáo nóng hổi để đọc luôn.
3. Cảnh giác với SSH: Hãy soi kỹ phần “SSH Begin”. Nếu thấy số lượng “Failed password” vọt lên mức hàng nghìn từ một IP lạ, hãy cài ngay Fail2ban hoặc đổi cổng SSH để bảo vệ server.
Quản trị server sẽ bớt mệt mỏi nếu bạn biết tận dụng công cụ đúng cách. Logwatch không thay thế các hệ thống giám sát thời gian thực, nhưng nó là lớp bảo vệ tổng quát tuyệt vời. Bạn chỉ mất chưa đầy 5 phút mỗi ngày để nắm trọn tình hình sức khỏe server.
Chúc anh em quản lý server nhàn hạ hơn. Nếu gặp khó khăn khi cấu hình Postfix relay, đừng ngần ngại để lại câu hỏi ở phần bình luận nhé!

