Как заставить Monit повторно контролировать сервис, который он не отслеживал?

3451
JakeGould

Разрабатывая ответ на этот вопрос, я столкнулся с проблемой при тестировании этого набора правил MySQL Monit на установке Ubuntu 12.04.5:

check process mysqld with pidfile /var/run/mysqld/mysqld.pid group mysql start program = "/etc/init.d/mysql start" stop program = "/etc/init.d/mysql stop" if failed host 127.0.0.1 port 3306 with timeout 15 seconds then restart if 5 restarts within 5 cycles then timeout alert email_address@example.com only on { timeout, nonexist } 

Проблема в том, что я пытался вызвать элементы start / stop через систему, /etc/init.d/которая скорее является системной конструкцией CentOS / RedHat, вместо того, чтобы использовать /usr/sbin/serviceболее подходящую для системы Ubuntu / Debian.

Хорошо, мой плохой ... Но проблема в том, что ты видишь эту if 5 restarts within 5 cycles then timeoutчасть? Кажется, это сильно меня задело. С /etc/init.d/mysql startкомандой, не способной работать, система попыталась 5 перезапусков, 5 раз потерпела неудачу, а затем истекло время ожидания. И условие тайм-аута, кажется, приводит к тому, что набор правил службы MySQL игнорируется моим Monit.

Я несколько раз перезапускал службу Monit и даже перенастроил набор правил, чтобы посмотреть, помогает ли он, но, похоже, ничего из этого не влияет.

Что я могу сделать, чтобы Monit обратил внимание на наборы правил, которые он «не контролировал» из-за соблюдения условий тайм-аута?

7

2 ответа на вопрос

4
JakeGould

После некоторых копаний выясняется, что Monit хранит данные мониторинга системы в файле состояния. И этот файл «состояния» отслеживает, какие службы отслеживаются / не отслеживаются.

Так что, хотя это немного «грубая сила», это определенно работает. Если служба становится «не отслеживаемой» из-за истечения времени ожидания, просто удалите файл состояния Monit из системы следующим образом:

sudo rm /var/lib/monit/state 

А потом перезапустите Monit вот так и все должно быть хорошо:

sudo service monit restart 

FWIW, на других системах / расстановки файл «состояние» монит может быть сохранен как stateили monit.stateдаже .monit.state(с точкой / периодом .Предварением его) в другом каталоге. Обязательно определите, где именно этот файл «состояния» сохраняется, когда вы действительно пытаетесь реализовать это исправление.

В связи с этим, при попытке найти этот файл состояния в Amazon Linux, я (наконец) смог найти его в `/ root / .monit.state` Scott 6 лет назад 1
@ Скотт Хороший вопрос! Скорректировал мой ответ, чтобы отразить тот факт, что файл «state» может находиться в другом месте с совершенно другим именем файла. JakeGould 6 лет назад 0
Вы должны быть в состоянии найти местоположение вашего `statefile` в конфигурационном файле Monit (` / etc / monit / monitrc`), например, с помощью `grep statefile / etc / monit / monitrc` user51928 5 лет назад 1
1
user51928

Monit включает команды для включения и отключения мониторинга всех или определенных сервисов.

Если служба стала неконтролируемой, вы можете снова включить мониторинг, например, monit monitor mysqlили monit monitor all.

Обратите внимание, что для работы этих команд необходимо включить HTTP-интерфейс Monit.

«Обратите внимание, что для работы этих команд должен быть включен HTTP-интерфейс Monit». Это не имеет смысла. JakeGould 5 лет назад 0
CLI Monit использует интерфейс HTTP для связи с демоном Monit. «Обратите внимание, что если поддержка HTTP отключена, интерфейс Monit CLI будет иметь ограниченную функциональность, поскольку большинству команд CLI (например,« monit status ») необходимо взаимодействовать с фоновым процессом Monit через интерфейс HTTP. Мы настоятельно рекомендуем включить поддержку HTTP «. https://mmonit.com/monit/documentation/monit.html#MONIT-HTTPD Теперь вопрос о том, имеет ли это смысл, является вопросом для разработчиков :) user51928 5 лет назад 1