пятница, 13 апреля 2012 г.

Monit

При разработке встраиваемых систем обычно ставится задача перезапуска приложения при его падении. Для этой цели удобно использовать систему мониторинга monit.

Рассмотрим пример конфигурационного файла:
set daemon  5 
set logfile syslog

set httpd port 2812
    allow localhost

# -------------------- Check services -------------------------------
check display-server with pidfile /var/run/display_server.pid
    start program = "/etc/init.d/display-server start"
    stop  program = "/etc/init.d/display-server stop"

check keyboard-server with pidfile /var/run/keyboard_server.pid
    start program = "/etc/init.d/keyboard-server start"
    stop  program = "/etc/init.d/keyboard=server stop"

# -------------------- Check free space -----------------------------
check device varlog with path /var
    if space usage > 80 % then
        exec "/bin/bash -c '/bin/rm -f /var/log/device-servers/*'"

Настройки демона monit
set daemon - интервал с которым будет вызываться демон monit в секундах

set logfile syslog - имя лог файла, куда monit будет писать свои сообщения (можно указать syslog, а можно полный путь до файла)
  
set httpd port 2812 - поднимает web сервер, который вешается на указанный порт. По этому порту через http можно получать данные о состоянии системы. Команда 'monit status' также использует этот порт для вывода состояния системы.

allow localhost - хосты, которым будет выдаваться состояние системы

Мониторинг сервисов
check display-server with pidfile /var/run/display_server.pid - проверка состояния сервиса по указанному pid файлу. Имя сервиса в monit может не соответствовать имени реального сервиса

start program = "/etc/init.d/display-server start" - команда которая будет выполнена если указанный сервис завершит свою работу

stop program = "/etc/init.d/display-server start" - stop команда нужна для корректного перезапуска сервиса. Без нее monit его не перезапустит

Мониторинг свободного места на диске
check device varlog with path /var - проверка состояния устройства, смонтированного по указанному пути. Это может быть, например, раздел жесткого диска или флэш-диск

if space usage > 80 % then - проверяемое условие. В данном случае если занят объем больше 80% общей емкости

exec "/bin/bash -c '/bin/rm -f /var/log/device-servers/*'" - команда, выполняемая если условие истинно

Замечания
1. Все имена сервисов и дисков, указанные в конфигурационном файле сохраняются после остановки сервиса monit.
Если при выполнении команды на заданное условие возникла ошибка (код завершения не 0), то данное имя сервиса или диска больше не будет корректно обрабатываться. Чтобы решить эту проблему, необходимо изменить это имя и перезапустить monit. После этого имя можно вернуть на прежнее и снова перезапустить monit.

2. Для monit важен сам факт наличия строчки 'stop program' для перезапуска сервиса. Указанную команду при перезапуске он не выполняет.

3. Для просмотра данных о состоянии локальной системы можно воспользоваться командой
monit status

Ссылки
1. Информация по настройке
http://mmonit.com/monit/documentation/monit.html
http://www.thegeekstuff.com/2010/11/monit-install-config

2. Примеры конфигурационных файлов
http://mmonit.com/wiki/Monit/ConfigurationExamples

Комментариев нет:

Отправить комментарий