Я уже некоторое время изо всех сил пытаюсь заставить monit контролировать мой тонкий кластер. Использую 3 тонких экземпляра. Это мои файлы monit и thin config:
/etc/thin/vocab.yml:
pid: tmp/pids/thin.pid
log: log/thin.log
port: 3000
max_conns: 1024
timeout: 30
chdir: /home/tenjack/apps/Vocab/current
max_persistent_conns: 512
environment: production
servers: 3
address: 0.0.0.0
daemonize: true
require: []
thin.monitrc:
check process thin0
with pidfile tmp/pid/thin.3000.pid
start program = "/etc/init.d/thin start"
stop program = "/etc/init.d/thin stop"
if totalmem > 50.0 MB for 5 cycles then restart
if failed port 3000 then restart
if cpu usage > 95% for 3 cycles then restart
if 5 restarts within 5 cycles then timeout
group thin
Я также попытался указать путь pid в файле thin.monitrc к tmp / pids / thin.pid вместе со многими другими вариантами, но ни один из них, похоже, не работает. У кого-нибудь есть идеи?
Вот как я обращаюсь с Monit, наблюдающим за моим кластером тонких серверов:
Ключевым моментом для меня было использование новой функции «сопоставления» в Monit. Это было введено в Monit 5.2 (проверьте свою версию monit с помощью 'monit -V'). Вместо просмотра отдельных файлов PID вы можете закодировать раздел Monit для отслеживания регулярного выражения имени процесса. Поскольку в вашем кластере будет 1 процесс для каждого узла в кластере, он, по сути, отслеживает отсутствие соответствующих процессов.
Например, моя строфа Monit:
check process thin
matching "thin server"
start program = "/bin/su - myapp -c 'cd /home/myapp/www/current; bundle exec thin start -C config/thin.yml'"
stop program = "/bin/su - myapp -c 'cd /home/myapp/www/current; bundle exec thin stop -C config/thin.yml'"
group thin
Теперь, если ни один из процессов не соответствует «тонкому серверу», Monit перезапустит весь кластер на основе файла config / thin.yml в каталоге моего проекта. Процедура запуска / остановки также закодирована для этого как пользователь «myapp».
Я обнаружил, что этот метод более элегантен, чем кодирование строфы для каждого файла PID для каждого процесса, особенно когда мой кластер настроен с использованием файла yml.
Дополнительные замечания:
Чтобы установить последнюю версию Monit (которая имеет функцию «сопоставления») поверх ранее установленной версии, вы можете установить ее из исходного кода. Для Ubuntu:
apt-get install libpam-dev
apt-get install monit
cd /tmp
wget http://mmonit.com/monit/dist/monit-5.3.2.tar.gz
gunzip monit-5.3.2.tar.gz
tar -xvf monit-5.3.2.tar
cd /tmp/monit-5.3.2
./configure --prefix=/usr/sbin --bindir=/usr/sbin --sysconfdir=/etc/monit/
make
sudo make install
Обратите внимание на дополнительные флаги в configure. Они мне понадобились, чтобы убедиться, что моя команда make install перезапишет предыдущую версию Monit, установленную с помощью apt-get. Ваши пути могут отличаться.
не знаю, если вы это уже решили, я все равно отвечу. знак равно
В том, как вы это делаете, есть несколько отличий.
Прежде всего, вы хотите контролировать «кластер», поэтому вам нужно контролировать каждый узел соответственно.
Во-вторых, вам нужно перезапустить соответствующий тонкий узел, а не в /etc/init.d.
это будет выглядеть примерно так:
check process thin-81 with pidfile /yourapphere/tmp/pids/thin.81.pid
start program = "/usr/bin/thin -d -e production start -p 81"
stop program = "/usr/bin/thin stop -Ptmp/pids/thin.81.pid"
if 3 restarts within 5 cycles then timeout
if totalmem is greater than 150.0 MB for 2 cycles then restart
if cpu is greater than 80% for 2 cycles then restart
if failed port 81 protocol http with timeout 30 seconds for 2 cycles then restart
group thin
check process thin-82 with pidfile /yourapphere/tmp/pids/thin.82.pid
start program = "/usr/bin/thin start -d -e production -p 82"
stop program = "/usr/bin/thin stop -Ptmp/pids/thin.82.pid"
if 3 restarts within 5 cycles then timeout
if totalmem is greater than 150.0 MB for 2 cycles then restart
if cpu is greater than 80% for 2 cycles then restart
if failed port 82 protocol http with timeout 30 seconds for 2 cycles then restart
group thin
что-то в этом роде в зависимости от того, как вы настроили свой тонкий «кластер»