Monit: Мониторинг сервера с уведомлением по SMS

Monit — open source система мониторинга серверов.

Monit позволяет:

  • отслеживать состояние, потребление ресурсов, доступность серверов;
  • осуществлять мониторинг демонов, количество child-процессов;
  • осуществлять мониторинг сетевых сервисов (доступность, корректность ответа);
  • отслеживать сетевые подключения;
  • осуществлять мониторинг файлов и папок;
  • выполнять встроенные действия или внешние команды по достижению определённых событий;
  • отправлять уведомления, в том числе и на email.

В этой заметке разобран небольшой пример использования Monit для мониторинга доступности сервиса и корректности его response с возможностью уведомления по SMS.

Скрипт мониторинга сайтов на PHP с уведомлением по SMS и Email описан в следующей статье.

Установка Monit

Установить Monit можно с помощью доступного менеджера пакетов, например:

apt-get install monit

или скачать отсюда: http://mmonit.com/monit/dist/monit-5.5.tar.gz , затем:

tar zxvf monit-5.5.tar.gz
cd monit-5.5
./configure
make && make install

Установка cURL

Можно использовать и другие варианты, но я предпочитаю установить (если его ещё нет на сервере) curl, что также просто делается с помощью менеджера пакетов, например:

apt-get install curl

Подготовка к работе с SMS-шлюзом

Нужно выбрать sms-шлюз, посредством которого будут рассылаться sms. Не на правах рекламы, но идеальным вариантом для меня стал service.sms.ru, из-за вот этого нововведения:

09.08.2012 Халява: теперь все сообщения, отправляемые на собственный номер, бесплатны.

— что де-факто означает бесплатное его использование в качестве уведомлений на свой телефон. Единственное, что нужно отметить — количество сообщений в день ограничено (на текущий момент 60 шт).

Регистрируемся и моментально получаем доступ к API по ссылке вида:
http://service.sms.ru/sms/send?api_id=[API_KEY]&to=[SEND_TO]&text=hello+world

Настройка Monit

Находим monitrc в /etc.
Задаем параметр set deamon равный продолжительности интервала между проверками.
Далее, добавляем следующее:

check host api.greensms.ru with address 127.0.0.1
 if failed url
  http://api.yourservice.ru/some_scripy.cgi?param=val
  and content == "OK"
 then exec "/usr/bin/curl http://service.sms.ru/sms/send?api_id=[API_KEY]&to=[SEND_TO]&text=service+failed"

Перезапускаем monit:

monit reload

Теперь с указанной Вами частотой Monit будет осуществлять мониторинг API Вашего сервера по указанный адресу и в случае возникновения проблем с его доступностью, или, в случае несоответствия regexp (в нашем случае это просто «ОК», но может быть использовано любое регулярное выражение), будет отправлять сообщения на Ваш мобильный номер.

Эпилог

Это лишь простой пример использования Monit, однако спектр задач, которые он способен решать довольно широк.
Для того, чтобы узнать, какие варианты применения подойдут для Вашего сервера/приложения — лучше ознакомится с документацией:
http://mmonit.com/monit/documentation/monit.html
— в которой подробно расписаны все use cases.
Я счел данную утилиту удобным инструментом для мониторинга, уведомлений, реагирования на различные события системы, в силу простоты реализации совершенно разных типовых задач, решение из каждой из которых занимает пару строчек в конфиге.

Monit: Мониторинг сервера с уведомлением по SMS: 5 комментариев

  1. привет, подскажи пожалуйста!
    Подойдет ли описанный тобою вариант для мониторинга нескольких серверов. Или тут можно проверять работоспособность и смсить о работе только одного сервера?

  2. А если я хочу, чтобы смс отправлялось когда какой либо процесс упал.

    check process fail2ban with pidfile /var/run/fail2ban/fail2ban.pid
    start program = «/etc/init.d/fail2ban start»
    stop program = «/etc/init.d/fail2ban stop»
    if 5 restarts within 5 cycles then timeout

    Как быть в этом случае? Что нужно добавить?

    1. Если я правильно понял проблему, то больше вам подходит runit — супервизор, позволяющий мониторить состояние процесса и при необходимости — его перезагружать.

      А так — как и в примере выше. Используя exec — curl`ом шлем запрос к API шлюза и отправляем sms.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *