Мониторинг с помощью Monit

Monit - утилита для мониторинга и управления процесами, программами, файлами, каталогами и файловыми системами под Unix. Может контролировать загрузку системы, работу различных демонов, контролировать сетевые соединения к удаленным хостам по различным протоколам, контролировать состояние файловой системы, целостность файлов и каталогов. В зависимости от состояния контролируемого объекта Monit может оповещать по email, перезапускать ( останавливать )процессы, если они не выполняются, не отвечают или потребляют много ресурсов, запускать различные программы при заданных событиях. См. man monit или http://mmonit.com/wiki/Monit/Monit

Конфигурируется через файл /usr/local/etc/monitrc ( если не создался, то копируем его из monitrc.sample ), он хорошо прокомментирован, что облегчает настройку

Пример конфига:

 set daemon  60    # Один цикл проверки - 60 с
 set logfile /var/log/monit/monit.log
 set pidfile /var/run/monit.pid

 set mailserver localhost    # primary mailserver, можно использовать несколько:
# =========================
# set mailserver localhost,
#     secondary.mailserver.com
#     username Username
#     password "******"
#     with timeout 50 seconds  # Задаем таймаут при необходимости
# Дополнительно, возможно, придется задать опцию "from" в настройке "set mail-format",
# У меня secondary.mailserver.com не хотел принимать к отправке почту из-за несоответствия имени пользователя при подключении
# и зарегистрированного на сервере почтового ящика для него ( Monit по умолчанию отправляе почту от monit@$HOST  :
## set mail-format {
##      from: Username
##   ............
## }
# =========================
 set eventqueue  # При невозможности отправить email - устанавливается очередь
     basedir /var/monit  # куда сохранять сообщения очереди
     slots 100           # ограничение на количество сообщения в очереди
 set alert alert @ mydomain.com   # куда отправлять оповещения, можно задавать различные
# почт ящики для различных оповещений, см. man monit
# Встроенный http сервер, желательно использовать ssl, см. mmonit.com/wiki/Monit/EnableSSLInMonit и man monit по авторизации
# пользователей
set httpd port 2812 and
    ssl enable
    pemfile /usr/local/etc/monit/ssl/monit.pem
    allow localhost        # allow localhost to connect to the server and
    allow 127.0.0.1
    allow 192.168.0.33        #
    allow 176.201.175.46
    allow admin:"MySecurityPasword" read-only     # require user 'admin' with password 'MySecurityPasword' for readonly
  include /usr/local/etc/monit/conf/*.conf # Настройки для мониторинга включаем в файлы по этому пути

Пример файлов для мониторинга:
cat /usr/local/etc/monit/conf/myserver.com.conf
 check host myserver.com with address 123.234.123.235
      every 10 cycles # Мониторить каждые 10 циклов
      if failed
       port 80
       protocol http
       hostheader 'myserver.com'
       then alert
      if failed
       port 21
       protocol ftp
       then alert
      if failed
       port 25
       protocol smtp
       then alert
      if failed
       port 443
       type tcpssl
       protocol http
#       hostheader myserver.conf
       then alert
      if failed
       port 143
       protocol imap
       then alert
      if failed
       port 993
       type tcpssl
       protocol imap
       then alert
      if failed
       port 110
       protocol pop
       then alert
      if failed
       port 995
       type tcpssl
       protocol pop
       then alert

cat /usr/local/etc/monit/conf/server2.com.conf
  check host ping-server2.com with address 123.123.123.124
   if failed icmp type echo count 3 with timeout 3 seconds
    then alert

  check host http-on-server2.com with address server2.com
   every 5 cycles
   if failed
     port 80
     protocol http
     request "/about"
   then alert

Мониторинг nginx на localhost
cat /usr/local/etc/monit/conf/nginx.conf
check process nginx with pidfile /var/run/nginx.pid
    every 5 cycles
    start program = "/usr/local/etc/rc.d/nginx start"
    stop program = "/usr/local/etc/rc.d/nginx stop"
    depends on nginx_bin
    if failed port 80 for 2 cycles then restart

  check file nginx_bin with path /usr/local/sbin/nginx
   if failed checksum
    and expect 92aal96abcdea23js9cbc8jsd8bf9adk3jad
   then unmonitor

Для проверки правильности конфига используется monit -t
Есть CLI (подключение идет через 127.0.0.1:2812, работает через встроенный http), чтобы заработало нужно включить allow localhost в секции http в конфиге. Кроме того, у меня не работает если опция allow установлена в read-only.

Полезные ссылки:
man monit
http://mmonit.com/wiki/
http://mmonit.com/wiki/Monit/ConfigurationExamples
http://mmonit.com/wiki/Monit/EnableSSLInMonit - использование ssl
http://muff.kiev.ua/content/monit-nadezhnyi-monitoring-sistemy
http://www.lissyara.su/articles/freebsd/trivia/monit/

для версии monit 5.4 под debian

Для версии monit 5.4 под debian в конфиге для задания заголовка http запроса в контексте check host при проверке name based virtual host используем

if failed
       port 80
       protocol http
       and request '/' hostheader 'my.domain.com'
       then alert

Отправить комментарий

CAPTCHA
Чтобы убедиться в том что Вы не робот, ответьте, пожалуйста, на вопрос
Fill in the blank