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

Тонкий мониторинг с помощью monit

Я уже некоторое время изо всех сил пытаюсь заставить 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

что-то в этом роде в зависимости от того, как вы настроили свой тонкий «кластер»