Giới thiệu về monit - công cụ giám sát server mạnh mẽ

Monit là gì?

Monit là một công cụ giám sát mã nguồn mở miễn phí cho Unix và Linux. Monit chạy trên localhost. Điểm nổi bật của Monit so với các công cụ monitoring khác là nó có khả năng thực hiện bảo trì tự động, sửa chữa và chạy các hành động nhân quả có ý nghĩa trong các tình huống lỗi.

Chính nhờ khả năng tác động vào hệ thống, monit được sử dụng khá phổ biến, đặc biệt với cộng đồng Ruby On Rails - khi mà các ứng dụng Ruby on Rails cần quản lí khá nhiều process. Nhiều trang web Rails phổ biến đã sử dụng Monit, như Twitter và scribd.

Đối tượng monitor

1. Processes

Monit đặc biệt hữu ịch trong việc theo dõi các process chạy nền. Ví dụ: apache, mysql, nginx,.. Với monit, chúng ta có thể start service nếu nó không chạy, restart service nếu nó không phản hồi, hoặc kill nósử dụng quá nhiều tài nguyên (RAM, CPU).

Cú pháp:

    CHECK PROCESS <unique name> <PIDFILE <path> | MATCHING <regex>>

2.Files, Directories, Filesystem

Monit có giám sát các tệp, thư mục khi có thay dổi, chẳng hạn như thay đổi dấu thời gian hoặc thay đổi kích thước..v..v

Cú pháp:

    CHECK FILE <unique name> PATH <path>
    CHECK FILESYSTEM <unique name> PATH <string>
    CHECK DIRECTORY <unique name> PATH <path>

3.Network connections

Monit có thể thực hiện Network test ở cấp độ giao thức. Monit được tích hợp giao thức Internet chính, chẳng hạn như HTTP, SMTP, ..v.v. Ngay cả khi giao thức không được hỗ trợ, bạn vẫn có thể config Monit để gửi bất kỳ dữ liệu nào và kiểm tra phản hồi từ server

Cú pháp:

    CHECK NETWORK <unique name> <ADDRESS <ipaddress> | INTERFACE <name>>

4.Programs

Monit có thể thực hiện 1 chương trình hoặc chạy một đoạn scripts tại một số thời điểm nhất định giống như một crontab. Ngoài ra, bạn có thể kiểm tra gía trị trả về của chương trình/scripts để thực hiện một hành động nào đấy. Điều này có nghĩa bạn có thể dùng Monit để kiểm tra mọi thứ mà bạn có thể viết scripts. Về cách viết bash scripts bạn có thể tham khảo thêm ở https://viblo.asia/p/tim-hieu-ve-bash-script-co-ban-07LKXNwklV4

Cú pháp:

    CHECK PROGRAM <unique name> PATH <executable file> [TIMEOUT <number> SECONDS]

5.System

Monit cũng có thể giám sát tài nguyên trên máy. Như các thông số về RAM, CPU, System Load, ..v.v

    CHECK SYSTEM <unique name>

Monit action

Monit cung cấp cho ta một số hành đông có thể thực hiện đối với mỗi giám sát

  • Alert Gửi cảnh báo cho người dùng qua email
  • RESTART Khởi động lại service gửi cảnh báo.
  • START Khởi động service bằng cách gọi phương thức được khai báo trong config gửi cảnh báo
  • STOP Dừng service bằng cách gọi phương thức được khai báo trong config gửi cảnh báo. Nếu monit stop một service, service đó sẽ không được monitor nữa và cũng không được tự khởi động lại. Muốn khởi động lại service, bạn phải khởi động bằng tay
  • EXEC dùng để thực thi một chương trình gửi cảnh báo. Thường dùng để run một đoạn scripts
  • UNMONITOR ngừng giám sát gửi cảnh báo

Cài đặt và sử dụng Monit

Vậy là chúng ta đã có cái nhìn tổng quan về Monit. Bây giờ, hãy thử cài đặt và sử dụng nó.

Install Monit

On RedHat/CentOS/Fedora/

yum install monit

On Ubuntu/Debian/Linux Mint

sudo apt-get install monit

Configuring Monit

Monit rất dễ cấu hình, trên thực tế, các file cấu hình khá dễ đọc vì nó khá sát với ngôn ngữ thông thường.

Mặc định, Monit giám sát các dịch vụ đang chạy trong mỗi 2 phút và ghi lại lịch sử vào file log được đặt tại: /var/log/monit. Muốn sửa chu kì chạy monit, ta có thể sửa dòng này trong file config /etc/monit/monitrc

set daemon 120            # check services at 2-minute intervals

Monit có giao diện web của chạy trên cổng 2812. Để kích hoạt giao diện web, chúng ta cần thay đổi tệp cấu hình monit.

File cấu hình chính của monit nằm ở /etc/monit.conf (RedHat / CentOS / Fedora) và /etc/monit/monitrccho (Ubuntu / Debian / Linux Mint). Mở file này lên và thay đổi như sau:

sudo vi /etc/monit/monitrc

tìm đến dòng config HTTPD

set httpd port 2812 and
     use address localhost  # only accept connection from localhost
     allow localhost        # allow localhost to connect to the server and
     allow admin:monit      # require user 'admin' with password 'monit'
     allow @monit           # allow users of group 'monit' to connect (rw)
     allow @users readonly  # allow users of group 'users' to connect readonly

Khởi động monit:

sudo /etc/init.d/monit start

Và vào http://localhost:2812/, nhập usenamadmin password monit và xem kết quả

Giám sát Service với monit

Muốn giám sát một service, chúng ta cần thêm config vào file /etc/monit/monitrc hoặc tạo một file config trong thư mục /etc/monit/conf.d/ (mặc định thư mục này được include trong config default của monit)

Bên dưới là một ví dụ về monitor Apache

vi /etc/monit/conf.d/apache
 check process apache with pidfile /var/run/httpd.pid
       start program = "/etc/init.d/httpd start" #khai báo cú pháp start service
       stop program  = "/etc/init.d/httpd stop"  #khai báo cú pháp stop service 
       if total cpu > 60% for 2 cycles then alert
       if total cpu > 80% for 5 cycles then restart

Với config này, Monit sẽ

  • gửi một cảnh báo nếu Apache dùng vượt quá 60% CPU trong hai chu kỳ.
  • khởi động lại Apache nếu mức sử dụng CPU trên 80% trong năm chu kỳ.

(Mỗi chu kì là 2 phút theo config set daemon 120 ở trên

Cú pháp của Monit khá là dễ đọc và dễ hiểu. Về cú pháp monit, bạn có thể tham khảo thêm tại https://mmonit.com/monit/documentation/monit.html#SERVICE-TESTS

Một số lệnh thường sử dụng

  • Kiểm tra cú pháp config Monit

    $ sudo monit -t
    
    Control file syntax OK
    
  • Restart monit

    $ sudo /etc/init.d/monit restart
    
    [ ok ] Restarting monit (via systemctl): monit.service.
    
  • Kiểm tra monit log

    $ tail -f /var/log/monit.log 
    
    [+07 May 21 07:48:44] error    : 'b121919' cpu system usage of 30.8% matches resource limit [cpu system usage > 30.0%]
    [+07 May 21 07:48:44] info     : 'b121919' exec: '/bin/bash -c /opt/scripts/chatwork.sh'
    [+07 May 21 07:48:44] info     : 'nginx' process is running with pid 1179
    [+07 May 21 07:50:44] info     : 'b121919' cpu system usage check succeeded [current cpu system usage = 8.1%]
    [+07 May 21 12:20:46] info     : Reinitializing monit daemon
    [+07 May 21 12:20:46] info     : Reinitializing Monit -- control file '/etc/monit/monitrc'
    [+07 May 21 12:20:47] info     : 'b121919' Monit reloaded
    [+07 May 21 12:21:58] info     : Reinitializing monit daemon
    [+07 May 21 12:21:58] info     : Reinitializing Monit -- control file '/etc/monit/monitrc'
    [+07 May 21 12:21:59] info     : 'b121919' Monit reloaded
    
  • Kiểm tra trạng thái monitor

    $ sudo monit status
    
    
    Monit 5.25.1 uptime: 0m
    
    System 'b121919'
      status                       OK
      monitoring status            Monitored
      monitoring mode              active
      on reboot                    start
      load average                 [1.60] [1.57] [1.31]
      cpu                          0.0%us 0.0%sy 0.0%wa
      memory usage                 4.4 GB [57.8%]
      swap usage                   298 MB [30.5%]
      uptime                       5h 1m
      boot time                    Thu, 21 May 2020 07:48:38
      data collected               Thu, 21 May 2020 12:48:59
    
    Process 'nginx'
      status                       OK
      monitoring status            Monitored
      monitoring mode              active
      on reboot                    start
      pid                          1179
      parent pid                   1
      uid                          0
      effective uid                0
      gid                          0
      uptime                       5h 0m
      threads                      1
      children                     0
      cpu                          -
      cpu total                    -
      memory                       0.0% [1.0 MB]
      memory total                 0.0% [0 B]
      security attribute           unconfined
      data collected               Thu, 21 May 2020 12:48:59
    

    Tổng kết

    Monit là một công cụ khá hữu ích và mạnh mẽ trong việc giám sát và tự động sửa lỗi.

    Trong bài tiếp theo mình sẽ hướng dẫn config gửi mail cảnh báo bằng Monit cũng như gửi cảnh báo qua các kênh Media khác.

    Tham khảo Doc: https://mmonit.com/monit/documentation/monit.html


All Rights Reserved