Giám sát LEMP với Monit trên Ubuntu 14.04
Monit là một ứng dụng giám sát dịch vụ open-souce và miễn phí có thể thực hiện các hành động dựa trên sự kiện khác nhau. Monit có thể gửi thông báo qua email, khởi động lại dịch vụ hoặc ứng dụng hoặc thực hiện các hành động đáp ứng khác.Hướng dẫn này sẽ xây dựng trên một LEMP stack cơ bản (Linux, Nginx, MySQL, PHP). Monit sẽ được kết hợp để giám sát tất cả các dịch vụ trong ngăn xếp và cảnh báo cho user root về bất kỳ điều kiện bất lợi nào.
Một server Monit bên ngoài tùy chọn cũng được dùng để giám sát từ xa ứng dụng web hoặc các dịch vụ khác.
Yêu cầu
- Trước khi ta bắt đầu, trước tiên bạn cần cài đặt một server Ubuntu 14.04
- Bạn cần một account user chuẩn có các quyền sudo
- Hướng dẫn này thêm Monit vào LEMP hiện có. Để có hướng dẫn về cách tạo LEMP ban đầu, hãy xem Cách cài đặt ngăn xếp Linux, nginx, MySQL, PHP (LEMP) trên Ubuntu 14.04
- Tùy chọn: Nếu bạn muốn giám sát một trang web, DNS hoặc server thư từ xa, bạn phải cài đặt server đó với domain hoặc địa chỉ IP có thể truy cập công cộng (thêm ở Bước 6)
Bước 1 - Cấu hình Gửi email cho Thông báo Monit
Một phần của giám sát hệ thống thường liên quan đến thông báo qua email cho các cảnh báo. Do đó, phải gửi email thích hợp để Monit gửi thông báo qua email. Một email cảnh báo Monit điển hình sẽ giống như sau:
From: monit@example.com To: root@yourserver.com Resource limit matched Service example.com Date: Mon, 22 Dec 2014 03:04:06 Action: alert Host: example.com Description: cpu user usage of 79.8% matches resource limit [cpu user usage>70.0%] Your faithful employee, Monit
Hướng dẫn này sẽ cài đặt Monit để gửi email cho bạn mỗi khi cảnh báo được kích hoạt.
Lưu ý: Các thông báo của Monit có thể sẽ chuyển đến folder spam của bạn theo mặc định. Reverse DNS (được gọi là bản ghi PTR) phải được cấu hình đúng cách đảm bảo thư có khả năng cao nhất sẽ được gửi thành công. Tên server của Server phải trùng với domain đủ điều kiện (FQDN), vì vậy, ví dụ: cả hai đều có thể là hostname.example.com . Để chỉnh sửa bản ghi PTR của server DigitalOcean, hãy truy cập Control panel DigitalOcean. Điều hướng đến Cài đặt và chọn tab Đổi tên . Nhập tên server mới và nhấp vào Đổi tên .
Hướng dẫn này giả định bạn không có một đại lý chuyển thư (MTA) có sẵn, vì vậy ta sẽ cài đặt Postfix. Cài đặt local của Postfix cho phép hệ thống gửi email thông báo đến nhà cung cấp thư bên ngoài như Gmail hoặc Yahoo.
Để bắt đầu cài đặt Postfix làm MTA của bạn, trước tiên hãy cập nhật danh sách nguồn repository của hệ thống.
sudo apt-get update
Sau đó cài đặt gói Postfix và GNU Mailutils từ kho của Ubuntu.
sudo apt-get install postfix mailutils
Gần cuối quá trình cài đặt, bạn sẽ được yêu cầu chọn kiểu cấu hình server như thể hiện trong ảnh chụp màn hình bên dưới. Chọn Trang web Internet .
Khi được yêu cầu nhập Tên Thư Hệ thống , hãy sử dụng domain đủ điều kiện (FQDN) của Server. Lưu ý: Tên Thư Hệ thống cũng có thể được thay đổi sau này trong /etc/mailname
.
Tiếp theo, mở file / etc / aliases để chỉnh sửa. Hướng dẫn này sẽ sử dụng Nano nhưng bạn có thể sử dụng bất kỳ editor nào bạn thích.
sudo nano /etc/aliases
Tại đây, ta sẽ thêm một địa chỉ email cá nhân, nơi ta sẽ nhận được các email thông báo của Monit. Các thông báo thư này sẽ đến từ user root của server LEMP của ta .
postmaster: root root: myemail@gmail.com
Cũng có thể thêm nhiều điểm đến nếu muốn:
root: username, itstaff@mycompany.com, otherperson@other.com
Lưu các thay đổi và thoát khỏi Nano. Sau đó, chạy phần sau để cập nhật file alias :
sudo newaliases
Một tin nhắn thử nghiệm có thể được gửi từ Server để kiểm tra việc gửi thư. Vui lòng kiểm tra folder spam nếu thư kiểm tra không được nhìn thấy lần đầu tiên trong hộp thư đến của bạn.
echo test | mail -s "test message from my VPS" root
Bước 2 - Cài đặt và cấu hình Monit
Monit cũng có sẵn trong repository Ubuntu. Để có hướng dẫn tham khảo ngắn gọn về Monit, vui lòng xem hướng dẫn này .
Monit có thể được cài đặt trên server LEMP của bạn với:
sudo apt-get install monit
Trên Ubuntu 14.04, các file cấu hình Monit nằm trong / etc /osystem / và file cấu hình Monit chính là /etc/monit/monitrc
.
Để mở monitrc trong Nano để chỉnh sửa:
sudo nano /etc/monit/monitrc
Bỏ ghi chú các dòng sau và thay đổi chúng để phù hợp với những gì được hiển thị bên dưới:
set mailserver localhost #Use localhost for email alert delivery. set mail-format { from: monit@$HOST subject: monit alert -- $EVENT $SERVICE message: $EVENT Service $SERVICE Date: $DATE Action: $ACTION Host: $HOST Description: $DESCRIPTION Your faithful employee, Monit } set alert root@localhost not on { instance, action } #Set email address to receive alerts. This guide uses root mail.
Vẫn còn trong file monitrc , bây giờ bỏ ghi chú các dòng sau và thay đổi example.com để trùng với domain hoặc địa chỉ IP của server của bạn.
check system example.com if loadavg (1min) > 4 then alert if loadavg (5min) > 2 then alert if memory usage > 75% then alert if swap usage > 25% then alert if cpu usage (user) > 70% then alert if cpu usage (system) > 30% then alert if cpu usage (wait) > 20% then alert
Ta cũng sẽ thêm mục này vào cuối file :
check filesystem rootfs with path / #Alert if low on disk space. if space usage > 90% then alert
Lưu các thay đổi và thoát khỏi Nano.
Bước 3 - Cấu hình Giám sát dịch vụ cho Dịch vụ LEMP trong Monit
Trên Ubuntu 14.04, cấu hình Monit có thể được chỉ định trực tiếp trong file /etc/monit/monitrc
hoặc qua các file riêng lẻ trong /etc/monit/conf.d/
. Trong hướng dẫn này, các file riêng lẻ sẽ được tạo trong folder /etc/monit/conf.d/
.
Đầu tiên, ta sẽ cung cấp cho Monit các phương tiện để quản lý một dịch vụ. Để đơn giản hơn trong hướng dẫn này, ta sẽ đặt tất cả giám sát quá trình vào một file duy nhất có tại /etc/monit/conf.d/lemp-services
. Sử dụng các mục sau, Monit sẽ xem Nginx, MySQL và PHP-FPM và khởi động lại các dịch vụ này nếu chúng bị dừng bất thường vì bất kỳ lý do gì.
Ta có thể tạo file làm việc với Nano:
sudo nano /etc/monit/conf.d/lemp-services
Thêm các mục sau cho các dịch vụ trong LEMP của ta :
check process nginx with pidfile /var/run/nginx.pid group www-data start program = "/etc/init.d/nginx start" stop program = "/etc/init.d/nginx stop" check process mysql with pidfile /var/run/mysqld/mysqld.pid start program = "/etc/init.d/mysql start" stop program = "/etc/init.d/mysql stop" check process php5-fpm with pidfile /var/run/php5-fpm.pid start program = "/etc/init.d/php5-fpm start" stop program = "/etc/init.d/php5-fpm stop"
Sau đó, lưu các thay đổi .
Bước 4 - Thêm hành động để khởi động lại các dịch vụ LEMP không lành mạnh
Như vậy, Monit đã có thể quản lý các dịch vụ được chọn, các hành động có thể được thêm vào để khởi động lại dịch vụ như mong muốn. Ví dụ, Monit có khả năng giám sát các kết nối TCP. Nếu server không còn chứng minh kết nối HTTP, Monit có thể khởi động lại PHP-FPM hoặc Nginx để tự động giải quyết sự cố.
Để xây dựng trên cấu hình hiện có của ta , bây giờ ta sẽ chỉnh sửa thêm /etc/monit/conf.d/lemp-services
. Các bổ sung mà ta sẽ thực hiện bên dưới được hiển thị bằng màu đỏ và ta sẽ yêu cầu Monit khởi động lại Nginx và PHP-FPM nếu kết nối HTTP không còn nữa. Ngoài ra, ta sẽ có Monit khởi động lại MySQL nếu socket không khả dụng.
Lưu ý: Đảm bảo sử dụng domain hoặc địa chỉ IP của Server nơi bạn thấy example.com trong mục đầu tiên và mục thứ ba.
check process nginx with pidfile /var/run/nginx.pid group www-data start program = "/etc/init.d/nginx start" stop program = "/etc/init.d/nginx stop" if failed host example.com port 80 protocol http then restart if 5 restarts within 5 cycles then timeout check process mysql with pidfile /var/run/mysqld/mysqld.pid start program = "/etc/init.d/mysql start" stop program = "/etc/init.d/mysql stop" if failed unixsocket /var/run/mysqld/mysqld.sock then restart if 5 restarts within 5 cycles then timeout check process php5-fpm with pidfile /var/run/php5-fpm.pid start program = "/etc/init.d/php5-fpm start" stop program = "/etc/init.d/php5-fpm stop" if failed host example.com port 80 protocol http then restart if 5 restarts within 5 cycles then timeout
Lưu các thay đổi và đóng Nano. Sau đó khởi động lại Monit để áp dụng các thay đổi cấu hình bạn đã thực hiện cho đến nay.
sudo service monit restart
Bước 5 (Tùy chọn) - Theo dõi Nhật ký để tìm lỗi và từ khóa
Monit cũng có thể theo dõi log cho các từ khóa cụ thể và sau đó thực hiện một hành động hoặc gửi cảnh báo. Điều này rất hữu ích trong trường hợp ứng dụng web gặp sự cố hoặc khi group yêu cầu thông báo về một sự kiện hoặc dấu vết cụ thể từ log .
Dưới đây là ví dụ về log Nginx với lỗi hết thời gian chờ mà Monit có thể theo dõi và cảnh báo:
2014/12/22 11:03:54 [error] 21913#0: *202571 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 2600:3c01::f03c:91ff:fe6e:5a91, server: example.com, request: "GET /wp-admin/admin-ajax.php?action=wordfence_doScan&isFork=1&cronKey=40cb51ccsdfsf322fs35 HTTP/1.0", upstream: "fastcgi://unix:/var/run/example.com.sock", host: "example.com"
Dựa trên cấu hình hiện có của ta , hãy mở lại file cấu hình dịch vụ LEMP của bạn trong Nano.
sudo nano /etc/monit/conf.d/lemp-services
Thêm mục sau. Thao tác này sẽ gửi thông báo khi bất kỳ thời gian chờ nào xảy ra từ Nginx giao tiếp với PHP-FPM.
check file nginx-error with path /var/log/nginx/error.log if match "^timed out" then alert
Lưu thay đổi và đóng Nano. Sau đó khởi động lại Monit để thay đổi có hiệu lực:
sudo service monit restart
Bước 6 (Tùy chọn) - Sử dụng Monit để giám sát trang web từ xa và các dịch vụ khác
Ngoài việc sử dụng Monit local , Monit có thể xem nhiều dịch vụ và kết nối bên ngoài. Trong ví dụ này, ta sẽ sử dụng version local của Monit mà ta đã cài đặt và thêm một số cấu hình giám sát mới cho các dịch vụ bên ngoài.
Tốt hơn là có một hệ thống Monit bên ngoài trong một trung tâm dữ liệu hoàn toàn khác cho các mục đích ngoài băng tần. Nếu một ứng dụng web có trụ sở tại New York, có một server Monit nhỏ bên ngoài ở San Francisco sẽ là lý tưởng.
Dưới đây là các ví dụ về kiểm tra Monit bên ngoài có thể được triển khai trên server thứ hai đang chạy Monit. Các ví dụ này sẽ được đặt trong file /etc/monit/conf.d/lemp-external
của server bên ngoài để kiểm tra từ xa LEMP của ta tại remote-example.com .
Sử dụng Nano để tạo file cấu hình này:
sudo nano /etc/monit/conf.d/lemp-external
Giám sát phản hồi ICMP và kết nối HTTP & HTTPS:
# ICMP check check host remote-example.com with address remote-example.com if failed icmp type echo for 5 times within 5 cycles then alert # HTTP check if failed port 80 protocol http for 5 times within 5 cycles then alert # HTTPS check if failed port 443 type tcpSSL protocol http for 5 times within 5 cycles then alert
Giám sát DNS:
check host ns1.example.com with address ns1.example.com if failed port 53 type udp protocol dns then alert
Giám sát SMTP:
check host smtp.example.com with address smtp.example.com if failed port 25 type tcp protocol smtp then alert
Theo dõi kiểm tra sức khỏe URL của ứng dụng web
Đối với các ứng dụng web, Monit cũng có thể thực hiện một yêu cầu cụ thể trên URL kiểm tra sức khỏe. Dưới đây là ví dụ về trang web remote-example.com với URL kiểm tra sức khỏe là: https://remote-example.com/healthcheck
.
check host remote-example.com with address remote-example.com if failed port 443 type tcpSSL protocol http request "/healthcheck" for 5 times within 5 cycles then alert
Bước 7 - Quản lý Monit từ Dòng lệnh
Monit cũng cung cấp một tiện ích dòng lệnh. Từ đó, các lệnh đơn giản được dùng để kiểm tra trạng thái Monit tổng thể và hoàn thành các việc hữu ích như tạm thời bắt đầu hoặc dừng giám sát.
Để chạy kiểm tra trạng thái Monit từ dòng lệnh, dịch vụ web Monit phải được bật. Để thực hiện việc này, hãy mở /etc/monit/monitrc
để chỉnh sửa trong Nano.
sudo nano /etc/monit/monitrc
Bỏ ghi chú các dòng sau để bật dịch vụ web local :
set httpd port 2812 and use address localhost allow localhost
Lưu các thay đổi và thoát khỏi Nano. Sau đó khởi động lại Monit:
sudo service monit restart
Bây giờ có thể kiểm tra trạng thái của Monit từ dòng lệnh.
Dưới đây là các lệnh để tạm thời tắt và bật tính năng giám sát:
sudo monit unmonitor all sudo monit monitor all
Bước 8 - Xem báo cáo
Hãy xem các báo cáo cho tất cả các kiểm tra mà ta đã cài đặt .
sudo monit status
Đến đây bạn sẽ thấy kết quả cho mọi thứ bạn đã cấu hình Monit để kiểm tra, bao gồm các dịch vụ LEMP local và bất kỳ kiểm tra bên ngoài nào:
sudo monit status The Monit daemon 5.6 uptime: 0m System 'example.com' status Running monitoring status Monitored load average [0.00] [0.01] [0.05] cpu 0.5%us 0.4%sy 0.0%wa memory usage 115132 kB [22.9%] swap usage 0 kB [0.0%] data collected Mon, 22 Dec 2014 16:50:42 Filesystem 'rootfs' status Accessible monitoring status Monitored permission 755 uid 0 gid 0 filesystem flags 0x1000 block size 4096 B blocks total 5127839 [20030.6 MB] blocks free for non superuser 4315564 [16857.7 MB] [84.2%] blocks free total 4581803 [17897.7 MB] [89.4%] inodes total 1310720 inodes free 1184340 [90.4%] data collected Mon, 22 Dec 2014 16:50:42 Process 'nginx' status Running monitoring status Monitored pid 14373 parent pid 1 uptime 28m children 4 memory kilobytes 1364 memory kilobytes total 9228 memory percent 0.2% memory percent total 1.8% cpu percent 0.0% cpu percent total 0.0% port response time 0.018s to example.com:80 [HTTP via TCP] data collected Mon, 22 Dec 2014 16:50:42 Process 'mysql' status Running monitoring status Monitored pid 12882 parent pid 1 uptime 32m children 0 memory kilobytes 44464 memory kilobytes total 44464 memory percent 8.8% memory percent total 8.8% cpu percent 0.0% cpu percent total 0.0% unix socket response time 0.000s to /var/run/mysqld/mysqld.sock [DEFAULT] data collected Mon, 22 Dec 2014 16:50:42 Process 'php5-fpm' status Running monitoring status Monitored pid 17033 parent pid 1 uptime 0m children 2 memory kilobytes 13836 memory kilobytes total 22772 memory percent 2.7% memory percent total 4.5% cpu percent 0.0% cpu percent total 0.0% port response time 0.018s to example.com:80 [HTTP via TCP] data collected Mon, 22 Dec 2014 16:50:42 File 'nginx-error' status Accessible monitoring status Monitored permission 644 uid 0 gid 0 timestamp Mon, 22 Dec 2014 16:18:21 size 0 B data collected Mon, 22 Dec 2014 16:50:42 Remote Host 'example.com' status Online with all services monitoring status Monitored icmp response time 0.021s [Echo Request] port response time 0.107s to example.com:443 [HTTP via TCPSSL] port response time 0.062s to example.com:80 [HTTP via TCP] data collected Mon, 22 Dec 2014 16:50:42
Sử dụng dữ liệu này để kiểm tra tình trạng dịch vụ của bạn và xem các số liệu thống kê hữu ích.
Xử lý sự cố
Nếu có bất kỳ vấn đề nào phát sinh, trước tiên hãy kiểm tra log của Monit tại /var/log/monit.log
. Điều này sẽ cung cấp cho bạn thêm thông tin về bản chất của vấn đề.
Ví dụ về các mục log lỗi:
[UTC Dec 22 13:59:54] error : ICMP echo response for example.com 1/3 timed out -- no response within 5 seconds [UTC Dec 22 14:10:16] error : ICMP echo response for example.com 1/3 timed out -- no response within 5 seconds [UTC Dec 22 15:24:19] error : 'example.com' failed protocol test [HTTP] at INET[example.com:80] via TCP -- HTTP: Error receiving data -- Resource temporarily unavailable [UTC Dec 22 15:57:15] error : ICMP echo response for example.com 1/3 timed out -- no response within 5 seconds [UTC Dec 22 17:00:57] error : ICMP echo response for example.com 1/3 timed out -- no response within 5 seconds [UTC Dec 22 17:49:00] error : 'example.com' failed, cannot open a connection to INET[example.com:443/API] via TCPSSL
Kết luận
Sau khi hoàn thành hướng dẫn này, bây giờ bạn sẽ được cấu hình Monit để theo dõi LEMP trên Ubuntu 14.04. Monit khá dễ mở rộng và có thể dễ dàng tùy chỉnh hoặc mở rộng để giám sát tất cả các loại dịch vụ cho các mạng lớn và nhỏ.
Dưới đây là một số liên kết bổ sung cho Monit:
Các tin liên quan
Cách đồng bộ hóa lịch và danh bạ bằng chuẩn CardDAV và CalDAV với Baïkal trên Ubuntu 14.042015-01-23
Cách cài đặt Webmin với SSL trên Ubuntu 14.04
2015-01-19
Cách bắt đầu với Silex trên Ubuntu 14.04
2015-01-15
Cách triển khai ứng dụng DocPad trên Ubuntu 14.04
2015-01-14
Cách tạo một Playbook Ansible để tự động cài đặt Drupal trên Ubuntu 14.04
2014-12-23
Cách cài đặt Thư viện ảnh Piwigo trên Ubuntu 14.04
2014-12-18
Cách cài đặt Hệ thống thông tin sinh viên SchoolTool trên Ubuntu 14.04
2014-12-18
Cách thiết lập ứng dụng Node.js để sản xuất trên Ubuntu 14.04
2014-12-03
Cách cài đặt và cấu hình PowerDNS với MariaDB Backend trên Ubuntu 14.04
2014-12-02
Cách cài đặt và cấu hình Magento trên Ubuntu 14.04
2014-12-02