March 21, 2015, 5:54 p.m.
Posted by soar

Мониторинг небольшого веб-проекта

Запуская небольшой проект рано или поздно встает вопрос мониторинга его доступности. Хорошо, если у вас уже есть инфраструктура или же вы можете позаимствовать мощности другого проекта (отдельный вопрос — насколько это этично и правильно). Но даже здесь возникает целый ряд вопросов: мониторить нужно постоянно, сам мониторящий ресурс должен быть заведомо стабильным (мы же не хотим мониторить мониторинг мониторинга?), и, по хорошему, осуществлять проверки нужно из нескольких географически распределенных точек. Решений, которые могут решить эту проблему, уже достаточно много. Осталось выбрать что-нибудь красивое, удобное и, по возможности, бесплатное.

Почему бесплатное? Ну ведь если ваш проект разросся и приносит доход — скорее всего вы озаботитесь каким-то своим решением. И даже если нет — выбор из платных ресурсов настолько велик, что это не станет проблемой.

Pingdom

Pingdom - пожалуй один из самых распиареных ресурсов, активно предлагают себя даже в приложениях CloudFlare, что говорит о многом. Но, к сожалению, для меня на этом их преимущества кончились — в бесплатной версии доступно создание лишь одной проверки, что, как показывает сравнение с конкурентами, категорически жадно.

В бесплатном плане Pingdom - только одна проверка


UptimeRobot

По популярности UptimeRobot убедительно занимает второе место. Пожалуй, заслуженно. В бесплатной версии доступно до 50 проверок четырёх разных типов:

  • HTTP(s)-запрос с проверкой кода ответа сервера;
  • HTTP(s)-запрос с поиском заданного ключевого слова в ответе;
  • PING ресурса;
  • TCP-SYN проверка на доступность TCP-порта.

Вполне достойный набор. Мечтая об идеальном мониторинге, я бы отметил недостаток regexp-проверки и проверок UDP-портов. Такого функционала, к сожалению, я не видел нигде (self-hosted Nagios/Cacti/Argus/etc — не в счёт).

В отчётах — красивый график доступности. Отчеты — на почту и в RSS-ленте, а за деньги — классические СМСки. Достаточно ли этого? Пожалуй нет, и у UptimeRobot есть целых два мобильных приложения для Android — и вот здесь меня ожидало разочарование. Одно (видимо официальное) оказалось платным с рейтингом в 3 из 5, что отбило у меня желание его испытывать, а второе повело себя странно, не сразу подключилось к аккаунту, а потом ни разу не сообщило мне о даунтаймах.

Вывод, к сожалению, один: или использовать данный сервис на платной подписке с СМСками, или же настраивать почтовый/rss клиент так, чтобы уведомления не затерялись в общем списке.

У UptimeRobot информативный и красивый дашборд.


Monitority

И последний ресурс, не ради которого писалась статья, но о котором я не могу не упомянуть — Monitority. На данный момент они находятся в бете, однако их обещания на главной странице не могут не привлечь к себе — бесплатные аллерты и СМС. Как оно будет на самом деле — покажет время, однако уже сейчас ресурс вполне жизнеспособен. Здесь нет графиков, а уведомление об упавшем сервисе придет вам через Twitter. Оригинально? Безусловно. Должен заметить, что на проверочный даунтайм этот ресурс среагировал быстрее конкурентов (спасибо Твиттеру?), за что ему отдельный респект.

StatusCake

Ну и наконец — победитель по моей версии, ресурс, на котором я остановился на данный момент и куда забил полный список всех моих веб- и не-только-веб- серверов - StatusCake.

Признаюсь, я купился на красивый дашборд. Красиво, информативно, с возможностью быстро отфильтровать результаты по тегу или названию. Именно такого дашборда мне не хватало в корпоративных Zabbix’ах, Zenoss’ах и Nagios’ах. За что ребятам из StatusCake большое и искреннее спасибо.

Дашборд StatusCake


При создании теста мы имеем очень неплохой набор тестов:

  • HTTP(s) тест на ответ веб-сервера. В отличие от конкурентов, здесь можно вручную задать список кодов, которые считать ошибочными — к примеру, если сервер вдруг вместо 200 стал отдавать 302/303 — мы тут же получим нотификацию. Есть возможность отправлять для проверки не GET, а POST-запрос с указанными данными;
  • TCP-SYN тест, проверка, что порт открыт и принимает соединения;
  • ICMP-PING — без комментариев;
  • DNS-тест — проверка, что указанный сервер в ответ на указанный А-запрос возвращает указанный IP;
  • SMTP-тест — попытка авторизоваться на SMTP-сервере (поддерживает SSL/TLS). К сожалению ни в описании теста, ни в Knowledge Base не указано, производится-ли попытка отправить письмо самому себе и проверяется ли, что письмо дошло. Будем считать (и надеяться?) что это именно так.

Для каждого теста мы можем выбрать частоту опроса (для бесплатного аккаунта — не чаще раза в 5 минут); количество серверов, с которых будет произведен дополнительный опрос, в случае возникновения проблем, перед тем, как мы получим аллерт; временное окно, когда тесты проводиться не будут (maintenance-window). Для HTTP-проверок доступны также параметры запроса — заголовки или POST-данные. Здесь же показывает и примерное время реагирования, которое рассчитывается по формуле: частота опроса + (таймаут клиента * количество опрашивающих серверов).


С платным аккаунтом приходит возможность опрашивать сервер каждую минуту и вручную выбирать с каких серверов он будет опрошен. Есть и множество других (бесполезных?) фич, вроде безлимитных API-запросов (зачем? мониторинг мониторинга?), «проверки на вирусы» (…) и т.д. Тот случай, когда бесплатный аккаунт даёт всё, что может понадобиться при пользовании сервисом.

Торт? Однозначно. Не обошлось правда без ложки дёгтя: существующее Android-приложение настолько убого, что разработчики скромно умалчивают о том, что оно вообще существует в Play.Market. И не даром: никаких уведомлений, оно не в состоянии даже запомнить логин-пароль от аккаунта и их приходится вводить при каждом запуске. Однако, не всё так плохо, и разработчики пошли по пути интеграции уведомлений со сторонними сервисами. И вот здесь — всё более чем шикарно.

PushOver, HipChat, Slack, PagerDuty, PushBullet, VictorOps и уведомления через Twitter — этого списка будет более чем достаточно для всех. Не хватает разве что IFTTT. Для себя я остановился на двух опциях — уведомление через Twitter и бесплатный PushBullet, который имеет приложения для Android, Windows, MacOS, Linux и других систем, не говоря о плагинах для браузеров. Этого более чем достаточно, чтобы получать оповещения вовремя, и, соответственно оперативно на них реагировать.

UPDATE: а еще можно настроить GET/POST на любой URL - так я сделал уведомления в Telegram.


Напоследок

Если у вас небольшой проект и вы еще не обзавелись большой инфраструктурой для продвинутого мониторинга, или же вы уже проверяете свои сервера «изнутри» и просто хотите добавить дополнительные проверки из сторонних источников — это возможно без дополнительных финансовых вливаний. Считается, что самое надежное оповещение — это оповещение по СМС, но я с этим не соглашусь. В двух случаях из трёх сообщение в Twitter я получал гораздо быстрее, чем СМС, не говоря о случаях, когда СМСки просто терялись в дороге.

P.S.

А еще можно поставить куда-нибудь такую красивую кнопку, когда-то это было очень модно, правда?

StatusCake Status

Comments