Назад | Перейти на главную страницу

Запретить проверку monit при перезапуске

У нас есть следующая конфигурация monit, которая перезапускает tomcat, если не может подключиться к нему:

check host Tomcat-Foo with address localhost
 stop program = "/usr/bin/systemctl stop tomcat.service"
 start program = "/usr/bin/systemctl start tomcat.service" with timeout 360 seconds
 if failed host localhost
        port 8081
        protocol http
        request "/foo/"
        for 3 times within 5 cycles
 then alert

Проблема в том, что запуск занимает довольно много времени, а monit, кажется, продолжает проверять. Это означает, что пока tomcat запускается, monit, кажется, думает, что он снова не работает, и инициирует другой перезапуск, превратив его в цикл перезапуска.

Есть ли простой способ приостановить / отключить проверку до тех пор, пока tomcat не будет снова восстановлен?

В качестве альтернативы, если эта конфигурация должна выглядеть совершенно иначе, чтобы это не было проблемой для начала?

Это «слегка» хакерское решение, которое у нас есть в настоящее время. По сути, если Tomcat не запускается в рамках цикла и поэтому перезапускается снова (и снова, и снова ...), if N restarts check запускает сценарий, который на время отключает мониторинг.

Мы также изменили конфигурацию monit, чтобы настроить таргетинг на процесс tomcat, поэтому он не просто проверка хозяина.

Конфигурация монитора

check process Tomcat with pidfile /opt/tomcat/current/bin/catalina.pid
  stop program = "/usr/bin/systemctl stop tomcat.service"
  start program = "/usr/bin/systemctl start tomcat.service"

  if failed host localhost port 8081
      protocol http request "/productconfigurator/"
      for 3 times within 5 cycles
      then restart

  if 2 restarts within 3 cycles
      then exec "/etc/monit-wait.sh tomcat 5m"

monit-wait.sh

#!/bin/bash

monit unmonitor $1
sleep $2
monit monitor $1

Не особо красиво, но вроде как минимум работает. Альтернативой, конечно же, может быть использование этого скрипта как неудачного действия, но да ... в любом случае, лучшие предложения все еще приветствуются :)

Попробуй это:

check host Tomcat-Foo with address localhost every 2 cycles
...

Когда monit выполняет свои проверки, он будет проверять Tomcat-Foo только каждые 2 цикла, что дает ему больше времени для запуска. Отрегулируйте количество циклов, если вам требуется больше / меньше времени.

Просто добавьте тайм-аут при перезапуске и сон в стартовом скрипте. Почему-то "&& sleep 5m" в команде запуска не работает .. было бы неплохо придумать способ отложить команду запуска.

Также обратите внимание, что если у вас есть Apache перед Tomcat, проверка хоста всегда будет успешной! .. поэтому http-check.sh ниже работает путем проверки ключевого слова.

/etc/monit/bin/tomcatstart.sh

#!/bin/bash
/usr/sbin/service tomcat8 start
sleep 5m 

/ и т.д. / Монит / conf-включен / tomcat8

check program http-check with path "/etc/monit/bin/http-check.sh"
   group tomcat8
   start program = "/etc/monit/bin/tomcatstart.sh" with timeout 450 seconds
   stop program  = "/usr/sbin/service tomcat8 stop"
  if status != 0 for 2 times within 2 cycles
  then restart

/etc/monit/bin/http-check.sh

#!/bin/bash

RESULT="`wget -qO- https://www.host.com`"

if [[ $RESULT == *"Contact"* ]]
then
  exit 0
else
        exit 1
fi

работает как положено, ждет 5 минут, не пытаясь снова.

[EDT May 30 13:27:56] error    : 'http-check' '/etc/monit/bin/http-check.sh' failed with exit status (1) -- no output
[EDT May 30 13:27:56] info     : 'http-check' trying to restart
[EDT May 30 13:27:56] info     : 'http-check' stop: /usr/sbin/service
[EDT May 30 13:27:56] info     : 'http-check' start: /etc/monit/tomcatstart.sh
[EDT May 30 13:34:01] error    : 'http-check' '/etc/monit/bin/http-check.sh' failed with exit status (1) -- no output
[EDT May 30 13:34:01] info     : 'http-check' trying to restart
[EDT May 30 13:34:01] info     : 'http-check' stop: /usr/sbin/service
[EDT May 30 13:34:02] info     : 'http-check' start: /etc/monit/tomcatstart.sh