пятница, 4 декабря 2009 г.

Monit: сделим за демонами.

Monit — это бесплатное приложение с открытым исходным кодом, обеспечивающее комплексный мониторинг UNIX-like систем.
С его помощью мы можем мониторить:
  • Состояние серверов (доступность, потребление ресурсов).

  • Мониторинг демонов.

  • Мониторинг сетевых сервисов (возможность подключения и корректность ответа).

  • Выполнение встроенных (запуск\остановка\перезапуск) или собственных (скрипты).

  • Уведомление на email или в централизованный web-интерфейс M\Monit.


  • Поддерживаются все unix-like системы: ОС GNU\Linux (есть в большинстве пакетных систем), FreeBSD (есть в портах), OpenBSD, Solaris, MacOS X.

    Установка и настройка займет не более 15 - 20 мин.
    И так приступим:
    cd /usr/ports/sysutils/monit
    make install clean

    Переименовываем конфиг:
    mv /usr/local/etc/monitrc.sample /usr/local/etc/monitrc

    и расскоментируем лишь одну строчку include /usr/local/etc/monit.d/*
    Теперь все файлы конфигурации из /usr/local/etc/monit.d/ будут автоматически подхватыватся monit-ом.
    Для удобства разобьем конфигурационный файл на main.conf (общие настройки) и с названием сервиса (к примеру monit-nginx.conf, monit-exim.conf и т.д.)

    main.conf это минимальный конфиг
    set daemon  120 # Частота проверки сервисов.
    set logfile syslog facility log_daemon # IP\hostname почтового сервера, через который пойдут уведомления.
    set mailserver localhost,
    set eventqueue # Разрешить очередь уведомлений.
    basedir /var/log/monit # путь к каталогу, где будут храниться уведомления.
    slots 100 # Максимальное количество уведомлений в очереди.
    set mail-format { from: monit@youserver.com } # От какого имени рассылать уведомления.
    set alert admin@youserver.com #куда сваливать все уведомления
    #set alert support@youserver.com { timeout } # Ящик для критических уведомлений (падение сервера\демонов).

    monit-apache.conf
    check process apache with pidfile /var/run/httpd.pid # Название и PID
    start program = "/usr/local/etc/rc.d/apache22 start" # Команда запуска.
    stop program = "/usr/local/etc/rc.d/apache22 stop" # Команда остановки.
    if cpu > 60% for 2 cycles then alert # Если в течение двух циклов потребление CPU > 60% - уведомить.
    if cpu > 80% for 5 cycles then restart # А если за 5 циклов больше 80% - перезапустить.

    monit-ssh.conf
    check process sshd with pidfile /var/run/sshd.pid
    start program = "/etc/rc.d/sshd start"
    stop program = "/etc/rc.d/sshd stop"

    Это минимум, что можно описать, по этой логике пишется такой блок под каждый демон, который нужно мониторить. Полее подробно можно почитать в он-лайн доке
    Разрешаем запуск monit'a в rc.conf и запускаем:
    echo 'monit_enable="YES"' >> /etc/rc.conf
    /usr/local/etc/rc.d/monit start

    Теперь выключаем апач и наблюдаем за логом:
    /usr/local/etc/rc.d/apache22 stop
    tail -f /var/log/messages
    Dec 4 18:15:21 ua monit[696]: 'apache' process is not running

    После чего на почту приходит одно письмо с тем, что Apache не запущен и еще одно с уведомлением, что Apache был запущен

    2 комментария: