Содержание статьи
К чему приводит лень
Хочу поделиться с тобой настоящей находкой. Не так давно я познакомился с инструментом, который теперь использую ежедневно. Я говорю о сервисе мониторинга New Relic. Мне не раз про него рассказывали, но, по правде говоря, каждый раз я пропускал это мимо ушей, потому что сложный мониторинг мне никогда нужен не был.
Некоторое время назад передо мной встала задача разобраться с медленным веб-приложением — развернутое на пяти серверах, оно умудрялось тормозить даже при небольшой нагрузке. Конечно, можно было проверить один сервер за другим, изучить логи nginx’а, посмотреть на работу баз данных, но мне, говоря откровенно, было очень лениво. Хотелось получить общую картину максимально быстро и с минимумом геморроя. И вот тут я вспомнил про New Relic.
Быстрый старт New Relic
Идея этого сервиса очень простая. На каждом из хостов устанавливается специальный агент (есть версии для Windows и Linux), который начинает собирать статистику об операционной системе, веб-приложении, используемой базе данных и так далее. Затем агент отправляет эти данные на сервер-коллектор, где они аккумулируются и превращаются в понятные таблицы и графики в веб-интерфейсе администратора. Надо отдать должное разработчикам: такой агент устанавливается в системе в два счета, и единственное, что необходимо указать после запуска инсталлятора, — это твой идентификатор. С его помощью New Relic будет понимать, что данные пришли от тебя.
Браво, New Relec
Уверен, что сценарии применения в каждом случае разные. Мне New Relic нужен был не столько как инструмент для мониторинга, сколько для того, чтобы быстро найти «горлышко бутылки», из-за которого все тормозит. Самый важный параметр, вокруг которого все крутится, — это время ответа сервера. И я тут же наглядно получил картинку: сколько из этих секунд ответа (это очень много) ушло на работу веб-сервера и PHP (в моем случае приложение было написано на нем) и сколько на работу базы данных. График прямо говорил, что проблема, скорее всего, завязана на базе данных. И тут я начал аплодировать разработчикам — сервис сразу же вывел список всех самых «дорогих запросов» к базе данных, выдав с потрохами тот самый, из-за которого все подвисало. Я упростил SQL-запрос, создал дополнительный индекс — и проблема была решена!
Что можно мониторить?
Пользуясь случаем, я решил посмотреть, что еще можно мониторить. Сервис большое внимание уделяет не только времени ответа сервера, но и тому времени, которое потребуется на обработку страницы на стороне клиента, то есть сколько времени, ушло у браузера, чтобы отрендерить страницу. Тут же показывается и другая полезная статистика, например количество ошибок, которые были отданы пользователей. Естественно, для получения данных необходимо установить дополнительный агент, в зависимости от того, какая технология лежит в основе веб-приложения. Агенты существуют для .NET, Ruby, Python и, конечно же, PHP. Причем разработчики постарались свести настройку к минимуму: под Debian/Ubuntu все элементарно устанавливается через apt-get без какой-либо возни с конфигурационными файлами.
Помимо обследования веб-приложения, очень здорово реализован мониторинг самих серверов. Теперь я постоянно собираю статистику по всем серверам, в том числе их конфигурацию, тонкую статистику по CPU (включая IO wait) и оперативной памяти, информацию о загрузке канала, данные по жестким дискам, а также другие полезные метрики вроде количества передаваемых пакетов в секунду. Для каждого сервера приводится и текущая информация по запущенным процессам: отныне не нужно коннектиться по SSH и получать эти данные вручную.
Платно-бесплатно
Надо сказать, что New Relic — это бесплатный и одновременно очень дорогой сервис! В течение 14 дней ты можешь использовать все его возможности и, как в моем случае, найти много узких мест в архитектуре веб-приложения, выявив причины тормозов. Позже придется выкладывать минимум 24 доллара в месяц за мониторинг каждого сервера, что, безусловно, довольно много. Но что приятно — есть бесплатный тарифный план, который хоть и не предоставляет кучи классных возможностей, но разрешает мониторить до пяти серверов и получать базовые (и самые важные) параметры работы веб-приложения.