Đừng mất công lục lọi Log nữa: Sử dụng Logwatch để nhận báo cáo tình trạng Linux hàng ngày

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

Nỗi ám ảnh từ những sự cố máy chủ âm thầm

Vài tháng trước, tôi thức dậy với một loạt tin nhắn dồn dập trên Slack. Một trong những cơ sở dữ liệu staging của tôi đã bị sập chập chờn trong suốt ba ngày. Vì đó không phải là môi trường production nên không ai để ý cho đến khi một lập trình viên cố gắng chạy migration và gặp lỗi. Khi tôi đăng nhập vào để kiểm tra, những bằng chứng trong /var/log/syslog như đang hét vào mặt tôi: các lỗi OOM (Out of Memory) kills, cảnh báo dung lượng đĩa và hơn 4.500 lần thử đăng nhập SSH thất bại từ một địa chỉ IP botnet duy nhất.

Dữ liệu vẫn ở đó, nhưng tôi đã không để mắt tới. Thành thật mà nói: kiểm tra log thủ công là công việc mà tất cả chúng ta đều hứa sẽ làm nhưng hiếm khi thực hiện đầy đủ. Log thô thường lộn xộn, dài dòng và gây mệt mỏi. Nếu bạn quản lý ba hoặc bốn máy chủ, việc chạy grep hoặc tail trên mọi máy hàng ngày là con đường ngắn nhất dẫn đến sự kiệt sức.

Tại sao chúng ta thường bỏ lỡ các sự kiện hệ thống quan trọng

Vấn đề không phải là thiếu dữ liệu, mà là khối lượng lớn các thông tin nhiễu. Một máy chủ Ubuntu tiêu chuẩn có thể tạo ra hơn 10.000 dòng log mỗi ngày. Hầu hết trong số đó là các hoạt động định kỳ—các tiến trình cron bắt đầu, mở phiên làm việc hoặc các tín hiệu heartbeat tiêu chuẩn của dịch vụ. Chôn vùi trong núi văn bản đó là những dấu hiệu cảnh báo nguy hiểm, chẳng hạn như một phân vùng ổ cứng bị lỗi hoặc lỗi kernel panic.

Các lập trình viên ít kinh nghiệm thường nghĩ rằng họ cần một hệ thống giám sát đồ sộ như ELK (Elasticsearch, Logstash, Kibana) để giải quyết vấn đề này. Mặc dù những công cụ đó rất mạnh mẽ, nhưng chúng thường là quá mức cần thiết (overkill) cho một VPS đơn lẻ. Một hệ thống ELK có thể dễ dàng tiêu tốn từ 2GB đến 4GB RAM chỉ để chạy không tải. Nếu công cụ giám sát của bạn sử dụng nhiều tài nguyên hơn cả ứng dụng thực tế, bạn đang tự tạo ra một vấn đề mới cần quản lý.

So sánh các chiến lược quản lý Log

Trước khi đi sâu vào thiết lập, hãy xem xét các phương pháp khác nhau so với nhau như thế nào:

  • Kiểm tra thủ công: Miễn phí và không cần thiết lập. Tuy nhiên, nó phụ thuộc hoàn toàn vào tính kỷ luật của con người, điều mà cuối cùng cũng sẽ có lúc lơ là.
  • Quản lý Log tập trung (ELK/Loki): Cung cấp bảng điều khiển thời gian thực và khả năng tìm kiếm chuyên sâu. Rất tuyệt vời cho các đội ngũ lớn, nhưng nặng về CPU và phức tạp trong việc bảo mật.
  • Logwatch: Một tập lệnh Perl nhẹ nhàng giúp phân tích log, loại bỏ các thông tin rác và gửi cho bạn một bản tóm tắt sạch sẽ qua email. Đây là lựa chọn “thiết lập một lần rồi thôi” cho các quản trị viên hệ thống bận rộn.

Điểm cân bằng: Logwatch cho trí tuệ tự động

Tôi sử dụng Logwatch cho hầu hết các dự án cá nhân và các đợt triển khai quy mô vừa. Nó nằm ở điểm cân bằng hoàn hảo giữa việc không làm gì và việc phải quản lý một cụm giám sát nặng nề. Vì nó không chạy như một daemon thường trực, nó sẽ không ngốn chu kỳ CPU của bạn. Thay vào đó, nó chạy như một công việc cron nhanh chóng, thường là một lần một ngày, và gửi bản tóm tắt thẳng đến hộp thư đến của bạn.

Trên các máy chủ Ubuntu 22.04 có 4GB RAM của tôi, Logwatch mất khoảng 15 giây để xử lý toàn bộ log của một ngày. Nó cung cấp chính xác những gì tôi cần: một bản tóm tắt đọc trong 2 phút cùng với ly cà phê sáng để đảm bảo hạ tầng của mình vẫn đang hoạt động ổn định.

Bước 1: Cài đặt Logwatch

Logwatch có sẵn trong kho lưu trữ mặc định của hầu hết các bản phân phối Linux lớn. Tôi sẽ tập trung vào Debian/Ubuntu, nhưng logic cấu hình vẫn tương tự cho RHEL hoặc CentOS.

sudo apt update
sudo apt install logwatch

Trong quá trình cài đặt, bạn có thể được yêu cầu cấu hình thư điện tử. Logwatch cần một cách để gửi thư ra ngoài. Nếu bạn chưa có máy chủ thư, tôi khuyên bạn nên cài đặt postfix hoặc bsd-mailx để xử lý việc này.

Bước 2: Cấu hình gửi Email

Logwatch sử dụng trình gửi thư cục bộ theo mặc định. Để đảm bảo bạn thực sự thấy các báo cáo này, máy chủ của bạn phải có khả năng gửi thư đi. Các nhà cung cấp đám mây như AWS hoặc DigitalOcean thường chặn cổng 25. Nếu email không đến, bạn có thể cần cấu hình Postfix để sử dụng một SMTP relay như SendGrid, Mailgun, hoặc thậm chí là Gmail.

Kiểm tra khả năng gửi thư của máy chủ bằng lệnh đơn giản này:

echo "Thư thử nghiệm từ máy chủ" | mail -s "Tiêu đề thử nghiệm" [email protected]

Nếu email thử nghiệm đó không đến, Logwatch cũng sẽ không thể tiếp cận bạn. Hãy giải quyết xong cài đặt SMTP trước khi chuyển sang bước tiếp theo.

Bước 3: Tùy chỉnh cài đặt Logwatch

Cấu hình mặc định nằm tại /usr/share/logwatch/default.conf/logwatch.conf. Đừng bao giờ chỉnh sửa trực tiếp tệp này. Các bản cập nhật sẽ ghi đè lên các thay đổi của bạn. Thay vào đó, hãy sao chép nó vào thư mục /etc/ để các chỉnh sửa của bạn có hiệu lực vĩnh viễn.

sudo cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/logwatch.conf
sudo nano /etc/logwatch/conf/logwatch.conf

Cập nhật các biến cụ thể này để phù hợp với nhu cầu của bạn:

# Người nhận báo cáo
MailTo = [email protected]

# Tên người gửi hiển thị trong hộp thư
MailFrom = Logwatch-Server01

# Mức độ chi tiết: Low, Medium, hoặc High
Detail = Low

# Khoảng thời gian cần phân tích
Range = yesterday

# Định dạng đầu ra
Format = text

# Các dịch vụ cần theo dõi
Service = All

Tôi khuyên bạn nên bắt đầu với Detail = Low. Nếu bạn đặt thành High, email có thể dài tới 500 dòng. Bạn có thể sẽ ngừng đọc nó sau tuần đầu tiên, điều này làm mất đi mục đích ban đầu.

Bước 4: Chạy báo cáo đầu tiên thủ công

Bạn không cần phải đợi đến công việc cron hàng ngày để xác minh cài đặt của mình. Hãy kích hoạt báo cáo thủ công và xuất trực tiếp ra terminal để xem dữ liệu ngay lập tức.

sudo logwatch --detail Low --range yesterday --stdout

Đầu ra sẽ hiển thị các phần về đăng nhập SSH, sử dụng Sudo và dung lượng đĩa. Để kiểm tra việc gửi email thực tế, hãy chạy:

sudo logwatch --detail Low --range yesterday --mailto [email protected]

Bước 5: Tự động hóa báo cáo hàng ngày

Trên Ubuntu, việc cài đặt thường tự động tạo một công việc cron hàng ngày tại /etc/cron.daily/00logwatch. Xác nhận nó tồn tại bằng lệnh này:

ls -l /etc/cron.daily/00logwatch

Nếu bạn muốn kiểm soát thời gian chính xác—ví dụ: nhận báo cáo vào lúc 7:30 sáng mỗi ngày—bạn có thể thêm một mục crontab tùy chỉnh. Chạy sudo crontab -e và thêm:

30 7 * * * /usr/sbin/logwatch --output mail

Loại bỏ các thông tin nhiễu

Thỉnh thoảng Logwatch sẽ báo cáo những thứ bạn không quan tâm. Nếu bạn chạy một máy chủ Nginx có lưu lượng truy cập cao, bạn có thể nhận được hàng ngàn thông báo lỗi 404 từ các bot quét lỗ hổng. Bạn có thể tắt các dịch vụ cụ thể trong logwatch.conf bằng cách thêm dấu trừ:

Service = "-http"
Service = "-postfix"

Điều này giúp bạn tập trung vào tình trạng sức khỏe và bảo mật ở cấp độ hệ thống, như sshd và pam_unix, mà không bị sa lầy vào các thông tin nhiễu ở cấp độ ứng dụng.

Lời kết

Thiết lập Logwatch chỉ mất khoảng 10 phút. Đổi lại, bạn có được một mạng lưới an toàn khổng lồ. Nó chuyển đổi quy trình làm việc của bạn từ phản ứng sang chủ động. Thay vì tự hỏi tại sao máy chủ bị chậm, bạn sẽ thấy dung lượng đĩa đang tăng dần lên 90% trong báo cáo sáng thứ Ba của mình.

Đừng lo lắng về các bảng điều khiển phức tạp vội. Hãy để các bản log được gửi đến hộp thư của bạn và đọc chúng mỗi sáng. Bạn sẽ học được nhiều điều về cách thức vận hành bên dưới của Linux hơn bất kỳ cuốn sách giáo khoa nào có thể dạy bạn.

Share: