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.
Я счел данную утилиту удобным инструментом для мониторинга, уведомлений, реагирования на различные события системы, в силу простоты реализации совершенно разных типовых задач, решение из каждой из которых занимает пару строчек в конфиге.
привет, подскажи пожалуйста!
Подойдет ли описанный тобою вариант для мониторинга нескольких серверов. Или тут можно проверять работоспособность и смсить о работе только одного сервера?
Ничто не мешает реализовать это в случае с несколькими серверами.
А если я хочу, чтобы смс отправлялось когда какой либо процесс упал.
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
Как быть в этом случае? Что нужно добавить?
Если я правильно понял проблему, то больше вам подходит runit — супервизор, позволяющий мониторить состояние процесса и при необходимости — его перезагружать.
А так — как и в примере выше. Используя exec — curl`ом шлем запрос к API шлюза и отправляем sms.
Бесплатный мониторинг сайтов «из коробки» описан в следующей статье.