Go to content Go to menu Go to search

Использование monit для мониторинга

Постановка задачи

monit - это демон, который периодически (по умолчанию раз в минуту) проверяет выполнение условия (например наличие запущенного процесса), и выполняет действия.

Установка и основные настройки

ставим

yum install monit
chkconfig monit on

создаем конфиг /etc/monit.conf

mv /etc/monit.conf /etc/monit.conf_bkp
touch /etc/monit.conf
chmod 600 /etc/monit.conf

содержимое:

set daemon  60              # check services at 1-minute intervals
set logfile syslog facility log_daemon
set idfile /var/run/monit.id
set statefile /var/run/monit.state
set mailserver mx.minder.com
set alert monit@minder.com
set mail-format { from: monit@minder.com }
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

include /etc/monit.d/*

Настройка для мониторинга apache

создаем файл /etc/monit.d/httpd

# проверка процесса осуществляется по pid-файлу. Путь к pid-файлу всегда абсолютный
check process httpd with pidfile /var/run/httpd/httpd.pid
        start program = "/etc/init.d/httpd start"
#    stop program = "/bin/bash -c '/bin/ps ax | /bin/grep httpd | /bin/grep -v grep | /bin/awk "{print \$1}" | /usr/bin/xargs /bin/kill -9'"
        stop program  = "/etc/init.d/httpd stop"
        if cpu > 100% for 2 cycles then alert
# если веб сервер сожрал 90% процессорного времени и не отдает его пять циклов проверки подряд - рестартуем его
         if cpu > 90% for 5 cycles then restart
# аналогично по суммарной памяти, которую он поглотил.
#        if totalmem > 2048.0 MB for 1 cycles then restart
        if totalmem > 90% for 1 cycles then restart
        if children > 250 then restart
# если load average сервера за 5 минут больше 10 8 циклов подряд - вырубаем.
#        if loadavg(5min) greater than 10 for 8 cycles then stop
# вот тут самое интересное - многоэтапная проверка:
# первый шаг - подключение на 80 порт, протокол http
        if failed host 127.0.0.1 port 80 protocol http
# если получилось - запрашиваем файл /index.html
                and request "/index.php"
                with timeout 15 seconds
# а если что-то из цепочки не получилось - рестартуем демон
                then restart
# если за последние пять циклов проверки было три рестарта или больше - пропускаем один цикл проверки.
        if 3 restarts within 5 cycles then timeout

Настройка для мониторинга tomcat

check host tomcat with address localhost
start program = "/etc/init.d/tomcat start"
stop  program = "/etc/init.d/tomcat stop"

if failed host localhost port 8080 protocol http
    and request '/client?&systemPrefix=PMIM'
    with timeout 15 seconds
    for 5 cycles
    then restart

if 3 restarts within 5 cycles then timeout

Настройка для мониторинга файловой системы

файл /etc/monit.d/fs

check filesystem rootfs with path /
      if space usage > 90% for 5 times within 15 cycles then alert
      if inodes usage > 90% for 5 times within 15 cycles then alert

Мониторинг процесса без PID и проверка кастомного протокола по TELNET

Check process nginx matching nginx
    start program = "/bin/systemctl start nginx"
    stop  program = "/bin/systemctl stop  nginx"

    if failed host localhost port 4444 with timeout 60 seconds
        send "GET /status HTTP/1.1\r\n\r\n"
        expect ".*ready.*"
    then restart
    if 5 restarts within 5 cycles then timeout

Мониторинг при помощи внешнего скрипта

Скрипт /etc/monit/check_chromedriver_status.sh

 #!/bin/bash
 exit `/usr/bin/curl -s http://localhost:4444/status | grep "ready" | wc -l`

конфиг:

Check process chrome-driver matching chromedriver
    start program = "/bin/systemctl start chromedriver"
    stop  program = "/bin/systemctl stop  chromedriver"

    if failed host 192.168.1.137 port 4444 type tcp then restart
    if 5 restarts within 5 cycles then timeout

check program check_chromedriver_status with path /etc/monit/check_chromedriver_status.sh
    if status == 0 then restart
    depends on chrome-driver

Запуск демонов и проверка состояния

Если сервис мониторится через monit, то само собой его нужно останавливать и запускать только через monit. В противном случае сервис запустится снова.

проверить статус

monit status

остановить/запустить демон

monit stop httpd
monit start httpd

приостановить/возобновить мониторинг

monit unmonitor httpd
monit monitor httpd

Enjoy!


при публикации материалов с данного сайта обратная ссылка на сайт обязательна.
valynkin.ru © no rights reserved