Cấu hình Monit: ‘Vị cứu tinh’ tự động restart service trên Linux lúc 3 giờ sáng

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

Nỗi ám ảnh mang tên: Server “ngất” lúc nửa đêm

Hãy tưởng tượng: 3 giờ sáng, điện thoại bạn rung bần bật. Website sập, khách hàng gọi cháy máy. Bạn lóp ngóp bò dậy, mở laptop và SSH vào server chỉ để gõ đúng một lệnh: systemctl restart nginx. Mọi thứ hoạt động trở lại, nhưng giấc ngủ của bạn thì không.

Tại sao phải làm thủ công một việc mà máy tính có thể xử lý trong 5 giây? Trong khi Prometheus hay Zabbix rất mạnh về vẽ biểu đồ và thu thập metrics, chúng thường thiên về hậu chẩn. Monit thì khác. Nó giống như một anh bảo vệ túc trực ngay tại cổng. Thấy dịch vụ nào “ngất” là ngay lập tức hô hấp nhân tạo (restart) để đưa nó trở lại hoạt động ngay lập tức.

Điểm ăn tiền nhất của Monit là sự nhỏ gọn. Nó chiếm chưa đến 2MB RAM và gần như không tiêu tốn CPU, cực kỳ phù hợp cho cả những con VPS yếu nhất.

Triển khai nhanh Monit trong 5 phút

Dưới đây là các bước để bạn đưa “người gác đền” này vào hoạt động trên Ubuntu/Debian hoặc CentOS/RHEL.

1. Cài đặt

# Cho Ubuntu/Debian
sudo apt update && sudo apt install monit -y

# Cho CentOS/RHEL
sudo yum install epel-release -y
sudo yum install monit -y

2. Mở Web Interface

Giao diện web giúp bạn theo dõi trạng thái nhanh mà không cần gõ lệnh. Mở file cấu hình /etc/monit/monitrc (Ubuntu) hoặc /etc/monitrc (CentOS) và bỏ comment các dòng sau:

set httpd port 2812 and
    use address 0.0.0.0     # Cho phép truy cập từ bên ngoài
    allow admin:monit      # Bạn nên đổi user/pass này ngay lập tức

3. Kích hoạt dịch vụ

sudo systemctl enable --now monit
# Kiểm tra xem Monit đã sống chưa
sudo monit status

Tại sao Monit lại ‘out trình’ Systemd?

Nhiều bạn thắc mắc: “Systemd có Restart=always rồi, cài Monit làm gì cho rác máy?”.

Thực tế, Systemd chỉ biết restart khi process biến mất hoàn toàn. Monit thông minh hơn thế. Nó có thể kiểm tra trạng thái sức khỏe thực tế của dịch vụ. Chẳng hạn, Nginx vẫn đang chạy (process tồn tại) nhưng lại trả về lỗi 502 hoặc ngốn sạch 90% RAM. Systemd sẽ đứng nhìn, nhưng Monit sẽ can thiệp ngay dựa trên các điều kiện bạn thiết lập.

Kinh nghiệm thực tế từ mình: Khi quản lý cụm 20 server, Monit đóng vai trò là lớp phòng thủ đầu tiên. Nó xử lý 90% các lỗi vặt như tràn RAM hay treo service. Chỉ khi Monit không cứu được, mình mới cần nhận cảnh báo Telegram để can thiệp thủ công.

Cấu hình giám sát các dịch vụ thiết yếu

Đừng viết hết vào file main. Hãy tạo các file riêng trong /etc/monit/conf-enabled/ để dễ quản lý.

Giám sát Nginx (Web Server)

Tạo file /etc/monit/conf-enabled/nginx:

check process nginx with pidfile /run/nginx.pid
    start program = "/usr/bin/systemctl start nginx"
    stop program  = "/usr/bin/systemctl stop nginx"
    if failed port 80 protocol http then restart
    if failed port 443 protocol https then restart
    if 3 restarts within 5 cycles then alert

Đoạn script này sẽ kiểm tra port 80 và 443. Nếu Nginx không phản hồi đúng giao thức HTTP/HTTPS, Monit tự restart nó. Nếu restart 3 lần vẫn hỏng, nó sẽ ngừng lại và bắn cảnh báo cho bạn.

Giám sát MySQL/MariaDB

check process mysql with pidfile /var/run/mysqld/mysqld.pid
    if failed host 127.0.0.1 port 3306 protocol mysql then restart
    if cpu usage > 80% for 5 cycles then alert

Giám sát tài nguyên hệ thống

Monit còn có thể canh chừng cả phần cứng ảo hóa của bạn:

check system $HOST
    if loadavg (1min) > 4 then alert
    if memory usage > 85% then alert

check filesystem rootfs with path /
    if space usage > 90% then alert

Xử lý sự cố tự động bằng Custom Script

Đây là tính năng cực hay. Giả sử log file của ứng dụng phình to quá nhanh làm đầy ổ cứng. Bạn có thể bắt Monit tự chạy script dọn dẹp:

check file app_log with path /var/log/myapp.log
    if size > 1 GB then exec "/usr/local/bin/cleanup_logs.sh"

Lưu ý sống còn khi triển khai

  • Tránh chu kỳ quá ngắn: Mặc định Monit kiểm tra mỗi 2 phút (set daemon 120). Đừng set xuống 5 giây vì dễ gây ra hiện tượng “false positive” khi dịch vụ chưa kịp khởi động xong.
  • Luôn check cú pháp: Trước khi reload, hãy chạy sudo monit -t. Một lỗi nhỏ trong file config có thể khiến toàn bộ hệ thống giám sát ngừng hoạt động.
  • Sử dụng M/Monit nếu có nhiều server: Nếu quản lý trên 5 server, hãy cân nhắc dùng M/Monit để gom tất cả về một dashboard tập trung.

Monit không phải là công cụ thay thế các hệ thống monitoring chuyên sâu. Nó là lớp bảo hiểm cuối cùng, nằm cục bộ trên server và âm thầm sửa lỗi. Nếu bạn muốn một giải pháp “cấu hình một lần rồi thôi” để giữ server luôn sống khỏe, Monit chính là lựa chọn số một.

Share: