Header Ads Widget

Monit - công cụ giám sát server

Monit là một công cụ giám sát mã nguồn mở miễn phí cho Unix và Linux, 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 trong các tình huống lỗi.

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 
  • Kiểm tra trạng thái monitor
    monit status

Ứng dụng thực tế 

Mongodb 

Kiểm tra dịch vụ có đang chạy, nếu không không hoạt động thì gửi email thông báo
check host mongodb with address localhost
  start program = "/etc/init.d/mongodb start"
  if failed host 127.0.0.1 port 27017 protocol http
    with timeout 15 seconds
  then restart
  alert vanlien129@gmail.com only on { timeout, nonexist }

Nhận xét