Thứ hai, 26/01/2015 | 00:00 GMT+7

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 .

Postfix - 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 .

Postfix - đặt tên thư hệ thống

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:


Tags:

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.04
2015-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