Cách cài đặt và cấu hình Monit để theo dõi và giám sát các máy chủ của bạn

Bài viết này giả định rằng bạn sẽ sử dụng Ubuntu Server 20.04 hoặc 24.04.

Động lực

Monit là một công cụ đơn giản và nhẹ, dùng để giám sát và quản lý các dịch vụ, tiến trình, tệp tin và hệ thống tệp trên máy chủ Linux của bạn. Nhờ khả năng giám sát chủ động, Monit là một lựa chọn tuyệt vời cho việc tự động hóa máy chủ. Dưới đây là các bước chi tiết về cách cài đặt, cấu hình và sử dụng Monit trên Ubuntu Server 20.04 và 24.04.

Các lựa chọn thay thế

Netdata được tích hợp sẵn WordOps và hiển thị các số liệu thống kê của máy chủ một cách rất hiệu quả. Tuy nhiên, nó không có các tính năng giám sát chủ động như Monit. Các công cụ khác như Kibana, Zabbix và Nagios cũng rất phổ biến, nhưng chúng khó cài đặt hơn và tiêu tốn nhiều tài nguyên hệ thống hơn.

Cài đặt Monit

May mắn thay, Monit đã có sẵn trong kho phần mềm của Ubuntu, vậy nên hãy cài đặt bằng lệnh sau:

sudo apt update
sudo apt install monit

Cấu hình cơ bản

Tệp cấu hình chính của Monit nằm tại /etc/monit/monitrc. Trước khi chỉnh sửa, bạn nên tạo một bản sao lưu:

sudo cp /etc/monit/monitrc /etc/monit/monitrc.backup

Theo mặc định, Monit kiểm tra các dịch vụ cứ sau 2 phút (120 giây). Bạn có thể điều chỉnh giá trị này trong tệp bằng cách chỉnh sửa dòng dưới đây. Chúng tôi muốn các lần kiểm tra diễn ra cứ sau 1 phút:

đặt daemon thành 60

Monit đi kèm với máy chủ thư riêng, nhưng vì chúng ta cần một giải pháp ổn định hơn và đã cấu hình sẵn Sendmail, hãy sử dụng Sendmail làm MTA của chúng ta, đồng thời điều chỉnh cài đặt để trỏ đến localhost (tham số này mặc định bị bình luận, nên bạn chỉ cần dán đoạn mã vào phía trên nó):

đặt máy chủ thư là localhost

Các định dạng thư Các tham số này xác định mọi khía cạnh của cấu trúc email của bạn, do đó bạn cần phải bỏ chú thích khỏi tất cả các dòng liên quan; và cấu hình tối thiểu chỉ là thay đổi địa chỉ email trong trường “FROM”:

từ:    Monit <mo************@*****le.com>

Đặt một địa chỉ email để nhận tất cả các thông báo từ Monit, thường là địa chỉ email công việc của bạn:

đặt cảnh báo al****@*****le.com

Monit sử dụng giao diện HTTP tích hợp sẵn của mình để vừa cung cấp trang trạng thái dựa trên web, vừa xử lý các lệnh từ dòng lệnh. Ngay cả khi bạn không muốn kích hoạt giao diện web, bạn vẫn phải cung cấp một khối cấu hình hợp lệ và đầy đủ để thiết lập điểm cuối và quản lý Monit một cách đúng đắn.

đặt cổng httpd là 2812 và sử dụng địa chỉ localhost 
 cho phép truy cập từ localhost
 cho phép admin:monit # yêu cầu người dùng 'admin' với mật khẩu 'monit'

Để cho phép truy cập từ xa, hãy thay đổi localhost đến địa chỉ IP hoặc tên miền của máy chủ tương ứng, và thiết lập thông tin xác thực an toàn.

Thêm các tệp cấu hình khác:

Ngoài tệp cấu hình chính, Monit có thể bao gồm các tệp cấu hình bổ sung từ /etc/monit/conf-enabled/. Chúng ta sẽ thêm một số công cụ giám sát vào thư mục này, bao quát hầu hết các dịch vụ mà chúng ta đang sử dụng trên máy chủ, nhưng trước tiên hãy bắt đầu với vấn đề quan trọng nhất: bảo mật.

Theo dõi các lần đăng nhập SSH thành công

Đây là một cảnh báo đầu tiên vô cùng quan trọng, vì chúng ta cần biết ngay khi có ai đó đăng nhập thành công vào máy chủ của chúng ta qua SSH. Cảnh báo này được cung cấp bởi Shireesh tại Elitmus và chúng ta sẽ đặt tên cho nó là ssh_logins.conf:

kiểm tra tệp ssh_logins tại đường dẫn /var/log/auth.log
  bỏ qua nếu khớp với "/etc/monit/whitelist_ips.regex"
  nếu khớp với "Accepted publickey" thì gửi cảnh báo

Thêm một địa chỉ IP vào mỗi dòng trong tệp /etc/monit/whitelist_ips.regex hoặc bình luận/xóa nó nếu bạn muốn nhận tất cả các thông báo.

Giám sát hệ thống LEMP

Tên gọi rất phù hợp lemp.conf Bộ giám sát này theo dõi các tài nguyên hệ thống của chúng tôi, như dung lượng lưu trữ, CPU và RAM, cũng như NGINX, PHP và MySQL (trong trường hợp của chúng tôi là MariaDB). Công thức để loadavg bằng 1,5 nhân với số nhân CPU:

# Kiểm tra mức sử dụng hệ thống tệp trên hệ thống tệp gốc
kiểm tra hệ thống tệp rootfs với đường dẫn /
    nếu mức sử dụng dung lượng > 90% thì gửi cảnh báo  # Gửi cảnh báo nếu mức sử dụng dung lượng đĩa vượt quá 90%

# Kiểm tra các chỉ số hiệu suất hệ thống trên localhost
kiểm tra hệ thống localhost
    nếu loadavg (1 phút) > 6 thì gửi cảnh báo  # Gửi cảnh báo nếu giá trị trung bình tải trong 1 phút vượt quá 6
    nếu loadavg (5 phút) > 4 thì gửi cảnh báo  # Gửi cảnh báo nếu giá trị trung bình tải trong 5 phút vượt quá 4
    nếu mức sử dụng bộ nhớ > 90% thì gửi cảnh báo  # Gửi cảnh báo nếu mức sử dụng bộ nhớ vượt quá 90%
    # Cảnh báo nếu mức sử dụng CPU vượt quá 80% trong 15 lần kiểm tra liên tiếp
    nếu mức sử dụng CPU > 80% trong 15 chu kỳ thì gửi cảnh báo # Tổng mức sử dụng CPU
    nếu mức sử dụng CPU (người dùng) > 70% thì gửi cảnh báo # Mức sử dụng CPU của người dùng
    nếu mức sử dụng CPU (hệ thống) > 30% thì cảnh báo # Mức sử dụng CPU hệ thống
    nếu mức sử dụng CPU (chờ) > 20% thì cảnh báo # Mức sử dụng CPU do chờ I/O

# Kiểm tra tiến trình máy chủ web Nginx (HTTPS)
kiểm tra tiến trình nginx với tệp PID /var/run/nginx.pid
    chương trình khởi động = "/usr/sbin/service nginx start"
    chương trình dừng  = "/usr/sbin/service nginx stop"
    nếu CPU > 80% trong 2 chu kỳ thì gửi cảnh báo  # Cảnh báo nếu mức sử dụng CPU vượt quá 80% trong 2 lần kiểm tra liên tiếp
    nếu máy chủ 127.0.0.1 cổng 443 giao thức https bị lỗi thì khởi động lại  # Khởi động lại nếu Nginx không phản hồi trên HTTPS

# Kiểm tra tiến trình máy chủ cơ sở dữ liệu MySQL
kiểm tra tiến trình mysqld với tệp PID /var/run/mysqld/mysqld.pid
    chương trình khởi động = "/usr/sbin/service mysql start"
    chương trình dừng  = "/usr/sbin/service mysql stop"
    nếu CPU > 80% trong 2 chu kỳ thì gửi cảnh báo  # Gửi cảnh báo nếu mức sử dụng CPU vượt quá 80% trong 2 lần kiểm tra liên tiếp
    nếu unixsocket /var/run/mysqld/mysqld.sock không hoạt động thì khởi động lại  # Khởi động lại MySQL nếu Unix socket không phản hồi

# Kiểm tra tiến trình PHP-FPM cho PHP 8.3
kiểm tra tiến trình php8.3-fpm với tệp PID /var/run/php/php8.3-fpm.pid
    chương trình khởi động = "/usr/sbin/service php8.3-fpm start"
    chương trình dừng  = "/usr/sbin/service php8.3-fpm stop"
    nếu cpu > 80% trong 2 chu kỳ thì cảnh báo  # Cảnh báo nếu mức sử dụng CPU vượt quá 80% trong 2 lần kiểm tra liên tiếp

Giám sát Redis

Hãy thêm phần giám sát Redis vào một tệp riêng biệt, redis.conf, vì tính năng này không phải là yếu tố thiết yếu để vận hành WordPress và có thể được tắt nếu cần:

# Giám sát Redis (sử dụng Unix socket)
kiểm tra tiến trình redis bằng tệp pid /var/run/redis/redis-server.pid
    chương trình khởi động = "/usr/sbin/service redis-server start"
    chương trình dừng = "/usr/sbin/service redis-server stop"
    
    # Giám sát tài nguyên quá trình
    nếu mức sử dụng CPU > 80% trong 5 chu kỳ thì gửi cảnh báo
    nếu mức sử dụng bộ nhớ > 75% thì gửi cảnh báo
    nếu số tiến trình con > 255 trong 5 chu kỳ thì gửi cảnh báo
 
 nhóm redis

# Kiểm tra tệp nhật ký Redis để tìm lỗi
kiểm tra tệp redis_log tại đường dẫn /var/log/redis/redis-server.log
    nếu tìm thấy "ERROR" thì gửi cảnh báo
    nếu tìm thấy "CRITICAL" thì gửi cảnh báo
    nhóm redis

Màn hình Fail2Ban

Sử dụng cùng phương pháp này, chúng ta hãy thêm fail2ban.conf:

kiểm tra tiến trình fail2ban với tệp PID /var/run/fail2ban/fail2ban.pid
    nhóm dịch vụ
    chạy chương trình = "/etc/init.d/fail2ban force-start"
    dừng chương trình = "/etc/init.d/fail2ban stop"
    nếu không kết nối được với unixsocket /var/run/fail2ban/fail2ban.sock thì khởi động lại
    nếu có 5 lần khởi động lại trong vòng 5 chu kỳ thì hết thời gian chờ

kiểm tra tệp fail2ban_log tại đường dẫn /var/log/fail2ban.log
    nếu tìm thấy chuỗi "ERROR|WARNING" thì gửi cảnh báo

Giám sát ClamAV

Chúng ta cần biết liệu ClamAV, phần mềm mà chúng ta đã cài đặt trước đó, có phát hiện ra virus hay phần mềm độc hại nào trên máy chủ của chúng ta hay không, vì vậy clamav.conf trông như thế này:

# Theo dõi tệp nhật ký ClamAV để phát hiện các thay đổi cho thấy có sự phát hiện
kiểm tra tệp clamav_log tại đường dẫn /var/log/clamav/clamav.log
  nếu tìm thấy "FOUND" thì gửi cảnh báo

Giám sát tính toàn vẹn của các tệp tin nhạy cảm

Monit có thể theo dõi các tệp quan trọng hoặc những tệp mà lẽ ra không nên thay đổi quá thường xuyên và sẽ cảnh báo cho chúng ta mỗi khi điều đó xảy ra. Hoạt động này thường được gọi là “giám sát tính toàn vẹn tệp”, do đó tệp cấu hình của chúng ta có tên là fim.conf và bên trong đó, bạn có thể liệt kê các tệp của mình như sau:

# Theo dõi các thay đổi trong tệp cấu hình WordPress
kiểm tra tệp wp_config tại đường dẫn /var/www/example.com/wp-config.php
    nếu tổng kiểm tra thay đổi thì gửi cảnh báo

kiểm tra tệp whitelist_ips tại đường dẫn /etc/monit/whitelist_ips.regex
    nếu tổng kiểm tra thay đổi thì gửi cảnh báo

Kích hoạt và khởi động dịch vụ Monit

Kích hoạt tính năng tự động khởi động Monit khi khởi động hệ thống:

sudo systemctl enable monit

Sau đó, khởi động dịch vụ Monit:

sudo systemctl start monit

Bạn có thể kiểm tra trạng thái của dịch vụ Monit bằng cách:

sudo systemctl status monit

Kiểm tra cấu hình Monit

Trước khi đưa cấu hình Monit vào môi trường sản xuất, hãy kiểm tra nó:

sudo monit -t
sudo monit reload
sudo monit status

Các trạng thái monit Lệnh này sẽ liệt kê tất cả các dịch vụ và tiến trình hiện đang được Monit giám sát.

Nếu có lỗi cấu hình, Monit sẽ hiển thị các lỗi đó và bạn có thể khắc phục chúng cho phù hợp.

Trang này có hữu ích không?

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *