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.
Để lại một bình luận