Простой мониторинг серверов на PHP

В предыдущей статье был описан простой вариант мониторинга сервера посредством Monit c уведомлением по sms. Однако, описанный вариант не совсем подходит во многих ситуация.

В этой же заметке будет представлен простой скрипт на PHP мониторинга нескольких серверов с уведомлением по sms и email.

Исходники на GitHub, а подробности — под катом.

Зачем понадобился еще один велосипед?

Поисковики пестрят различными платными и бесплатными вариантами сервисов мониторинга (даже reg.ru относительно недавно анонсировали свой сервис), сравнение которых достойно отдельной статьи. Есть и системы, которые можно развернуть самому, такие как Zabbix и Nagios.

Тем не менее, я сформировал перечень требований, которым должна соответствовать простая система мониторинга и уведомлений — и ни одна система или сервис не соответствует им в полной мере.  Вот сами требования:

  • полная бесплатность
  • уведомления по sms
  • уведомления по email
  • мониторинг произвольного количества серверов
  • работа на любом хостинге
  • простота настройки и установки
  • текстовый log

Естественно, что большое количество требований накладывает соизмеримое количество ограничений. Любое ПО можно совершенствовать до бесконечности, постоянно расширяя его функционал. Именно поэтому, вечером за чашкой чая было решено написать собственный минималистичный скрипт без «наворотов» и излишек, решающий свою задачу. Хотя минимализм и не означает, что скрипт не будет улучшаться и дорабатываться — шлите свои pull request и issues на GitHub.

Что он умеет?

Используется PHP в связке с cron. Для функционирования потребуется cURL.

Установка производится добавлением в crontab записи вида:

*/5 * * * * /usr/bin/php /path/to/simple-php-site-monitor/monitor.php mail@domain.com 25bae55e-4ced-d304-3d76-40d7ebc1f965 79261234567 >> /path/to/simple-php-site-monitor/cron.log

После этого, с заданной частотой производится запуск monitor.php со следующими параметрами:

  • email для уведомлений,
  • token с service.sms.ru,
  • телефон для уведомлений (должен соответствовать номеру, который вы указали при регистрации на  service.sms.ru).

Параметры опциональны. Файлы cron.log и error.log должны быть доступны для записи. Файл cron.log содержит лог выполнения monitor.php, error.log — лог неудачных проверок.

Касательно сервиса service.sms.ru — он используется здесь только по следующей причине: он предоставляет бесплатные 60 одинарных sms в день, чем и пользуются разработчики. Если вы знаете альтернативы — пишите в комментарии.

Далее, всё также просто: в файле servers.list указываем список серверов (страниц) для мониторинга, после чего скрипт будет с заданной частотой отправлять HEAD-запрос по указанному адресу, что отобразится в логах сервера следующим образом:

82.198.184.62 - - [23/Dec/2013:02:50:07 +0400] "HEAD / HTTP/1.1" 200 206 "-" "Monitoring Bot"

Рекомендуется оставить первой строчкой, например,  ya.ru для того, чтобы быть уверенным в том, что у сервера, с которого осуществляется мониторинг, всё в порядке с подключением к Интернету.

В случае, если сервер не отвечает в течение 10 секунд (можно исправить в настройках) или отдаёт ошибку — будет отправлено уведомление на почту и указанный номер телефона в виде sms с отладочной информацией. Логику поведения можно дополнить под свои нужды здесь.

Так как по умолчанию timeout равен 10 секундам, а частота проверки составляет раз в 5ть минут, то количество серверов для одного скрипта при подобных настройках не может превышать 30 для предотвращения запуска новых процессов до завершения предыдущих — это необходимо иметь ввиду (или использовать runit вместо cron, но это уже другая история, не вписывающаяся в концепцию «простого скрипта мониторинга»).

Предложения и вопросы пишите в комментарии.

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

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

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>