в чем преимущество использования supervisord над monit

У нас есть пользовательская установка, в которой запущено несколько демонов (веб-приложения + фоновые задачи). Я рассматриваю возможность использования службы, которая помогает нам отслеживать эти демоны и перезапускать их, если их потребление ресурсов превышает уровень.

Я буду признателен за любое понимание того, когда один лучше другого. Насколько я понимаю, monit запускает новый процесс, а supervisord запускает подпроцесс. Каковы плюсы и минусы этого подхода?

Я также буду использовать upstart для мониторинга самого monit или supervisord. Развертывание веб-приложения будет выполняться с помощью capistrano.

Спасибо


person murtaza52    schedule 28.08.2012    source источник


Ответы (2)


Я не использовал monit, но у supervisord есть некоторые существенные недостатки.

  1. Программы должны работать на переднем плане

Это означает, что вы не можете просто запустить /etc/init.d/apache2 start. В большинстве случаев вы можете просто написать один лайнер, например. "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND", но иногда вам нужен собственный скрипт-оболочка. Проблема со сценариями-оболочками заключается в том, что вы получаете два процесса, родительский и дочерний. Смотрите следующий недостаток ...

  1. супервизор не управляет дочерними процессами

Если ваша программа запускает дочерний процесс, supervisord не обнаружит это. Если родительский процесс умирает (или если он перезапускается с помощью supervisorctl), дочерние процессы продолжают работать, но будут «приняты» процессом инициализации и продолжат работу. Это может предотвратить будущие вызовы вашей программы или потреблять дополнительные ресурсы. Последние параметры конфигурации stopasgroup и killasgroup должны исправить это, но у меня они не сработали.

  1. В supervisord нет управления зависимостями — см. #122.

Недавно я установил squid с qlproxy. Сначала должен запуститься qlproxyd, иначе может произойти сбой squid. Несмотря на то, что обе программы управлялись с помощью supervisord, гарантировать это было невозможно. Мне нужно было написать стартовый скрипт для squid, который заставлял бы ждать процесс qlproxyd. Добавление сценария запуска привело к проблеме с потерянным процессом, описанной в недостатке 2.

  1. supervisord не позволяет вам контролировать задержку между попытками запуска

Иногда, когда процесс не запускается (или падает), это происходит потому, что он не может получить доступ к другому ресурсу, возможно, из-за нестабильности сети. Супервизор может быть настроен на перезапуск процесса несколько раз. Между перезапусками процесс переходит в состояние «BACKOFF», но отсутствует документация или контроль продолжительности задержки.

В свою защиту супервайзер удовлетворяет наши потребности в 80% случаев. Конфигурация разумна, а документация довольно хороша.

person cressie176    schedule 31.12.2014
comment
Хороший ответ. Итак, вам в основном нравится супервизор, но это не всегда правильный инструмент для каждой работы. - person Rick-777; 04.06.2015
comment
Мне нравится ваш ответ, так как вы определенно показываете свой опыт и пытаетесь настроить его в соответствии со своими потребностями (которые, вероятно, такие же, как у меня). - person Matej Kovac; 29.08.2017
comment
Как работает супервизор сегодня с этими недостатками до 2020 года? - person Muddz; 30.01.2020

Если вы хотите дополнительно контролировать ресурсы, вы должны согласиться на monit. В дополнение к простой проверке того, запущен ли процесс (доступность), monit также может выполнять некоторые проверки использования ресурсов (производительность, использование емкости), уровней нагрузки и даже основных проверок безопасности (md5sum файла bianry, файла конфигурации и т. д.). Он имеет основанную на правилах конфигурацию, которую довольно легко понять. Также есть много готовых конфигов: http://mmonit.com/wiki/Monit/ConfigurationExamples

Monit требует, чтобы процессы создавали PID-файлы, что может быть недостатком, потому что, если процесс не создает pid-файл, вам нужно создать некоторые оболочки. См. http://mmonit.com/wiki/Monit/FAQ#pidfile.

С другой стороны, Supervisord более привязан к процессу, он сам порождает его. Он не может выполнять какие-либо проверки на основе ресурсов, поскольку monit. Тем не менее, у него приятный интерфейс командной строки servicectl и веб-интерфейс.

person Darek    schedule 24.10.2012
comment
Создать такую ​​оболочку на самом деле не проблема — если вы используете программное обеспечение для мониторинга, то обычно у вас есть некоторый контроль над вашей файловой системой. И нужно всего лишь создать тривиальный сценарий. +1 за хорошее объяснение. - person Piotr Zierhoffer; 25.10.2012
comment
@xavier не согласен, сценарий-оболочка - это еще один SPOF, и не каждый демон может быть обернут детерминистически, подумайте, например, о некоторых вещах Java. - person Darek; 25.10.2012
comment
@Dārayavahuštdi, у вас есть правильная точка зрения, но с супервизором все наоборот: некоторые программы любят демонизироваться, в то время как супервизор требует, чтобы все оставалось на переднем плане. Однако написание оболочки для monit кажется гораздо более простым. supervisord.org/subprocess.html#nondaemonizing-of-subprocesses mmonit.com/wiki/Monit/FAQ#pidfile - person Amir; 19.03.2013
comment
@Dārayavahuštdi в случае контейнеров docker и поддержания их работоспособности, docker хочет, чтобы что-то работало на переднем плане. В этих случаях использования вы лучше с супервизором - person Jujhar Singh; 12.08.2014
comment
Плагины supervisord superlance.readthedocs.org/en/latest могут отслеживать память, а также отправлять из электронной почты, если супервизор перезапустил его. - person Yuvaraj Loganathan; 27.11.2015
comment
Спасибо, основываясь на этом ответе - я попробовал monit, он отлично сработал для моих нужд по мониторингу tomcat - person Wand Maker; 25.05.2016