Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Ruby

Приступаем к работе с New Relic за 30 минут

by
Length:LongLanguages:
This post is part of a series called Performance Monitoring With New Relic.
5 Reasons Why New Relic Is a Developer's Best Friend

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

Я помню, как несколько лет назад я работал над Rails риложением, и кто-то предложил идею использовать эту новую службу, которая еще только появилась. Она называлась New Relic, и они обещали дать вам больше информации о производительности вашего приложения Rails, чем вы когда-либо могли получить. Мы решили попробовать, и это было впечатляюще, что еще важнее, что это действительно была необходимая для экосистемы веб-разработки Ruby система.

Спонсируемый контент

Данный контент был заказан New Relic и было написан и/или отредактирован командой Tuts +. Цель спонсируемого контента - публиковать актуальные и объективные обучающие материалы, тематические исследования и вдохновляющие интервью, которые предлагают настоящую образовательную ценность для наших читателей и позволяют нам финансировать создание более полезного контента.

А теперь мы быстро перенесемся вперед, и вам будет трудно найти веб-приложение Ruby, в котором не подключен New Relic. New Relic как компания продолжает предоставлять инструменты для мониторинга ваших Ruby приложений, но они также разветвлены на многие другие языки, такие как Java, Python и даже .Net. Но, конечно, по мере того, как растет количество функций, которые вы предоставляете, так же растет и сложность и объем документации. Трудно понять, с чего начать, особенно если вы еще не эксперт.

Сегодня я думал, что мы можем вернуться к истокам New Relic и посмотреть, как мы можем начать работу с сервисом для мониторинга Rails приложения.


Базовое Rails Приложение

Чтобы использовать New Relic, нам нужно что-то контролировать, поэтому давайте создадим базовое Rails приложение «Hello World».

Приложение, которое мы создаем, будет распологаться под дерикторией ~/projects/tmp/newrelic и будет называться newrelic_rails1. Я предполагаю, что у вас уже установлен Rails:

Нам не так много нужно сделать, чтобы создать наше приложение «Hello World». Нам нужен новый контроллер:

Теперь нам нужен только маршрут, чтобы корневой путь приложения указывал на наш контроллер. Нам также нужно отображение со словами «Hello World». Учитывая все это, наш config/routes.rb должен выглядеть следующим образом:

Наш контроллер (app/controller/hello_controller.rb) будет выглядеть следующим образом:

И наше отображение (app/views/hello/index.html.erb) будет похоже на:

Теперь мы можем запустить наш сервер:

Когда мы запросим с помощью curl localhost:3000, мы получим:

Все работает!


Присоединение к New Relic

С Ruby это сделать очень просто. Мы добавляем gem в наш Gemfile, запускаем bundle install, кладем конфигурационный файл в папку config, и у нас есть все, что нам нужно. На самом деле, в New Relic очень хорошо все это расписано. Все, что вам нужно сделать, это войти в свою учетную запись, и если вы еще не развернули агент Relic Relic, и дальше все будет довольно очевидно:

newrelic_start

Во-первых, мы устанавливаем gem New Relic, добавляя его в наш Gemfile согласно инструкциям:

newrelic_install_gem

Теперь наш Gemfile будет выглядеть следующим образом:

Всякий раз, когда мы добавляем что-либо в Gemfile, нам нужно запускать:

Нам также нужен newrelic.yml, который вы можете скачать из New Relic:

newrelic_config_download

Он будет предварительно настроен с вашим лицензионным ключом. Мы должны поместить этот файл в config/newrelic.yml.

На этом этапе, если мы запустили наше приложение в боевом или стейдж режиме, мы уже получили данные в нашей учетной записи New Relic. Итак, давайте сделаем так:

На этот раз, когда мы дергаем curl'ом  localhost:3000, то получаем:

На наши страницы добавлена куча JavaScript, так что New Relic может контролировать время браузера. Это один из способов сказать, что наша интеграция с New Relic работает. Но это не единственный способ: New Relic также создает файл лога:

Мы также можем проверить нашу учетную запись New Relic, чтобы убедиться, что появилось новое приложение для мониторинга :

newrelic_monitored_application

Однако есть несколько неприятных моментов:

  • Наше приложение называется «Мое приложение»,
  • Мы приняли все значения конфигурации по умолчанию, которые могут и не соответствовать нашему приложению
  • Нам пришлось запустить наш сервер в боевом режиме (что возможно только потому, что это совершенно новое приложение, которое не полагается на какую-либо внешнюю инфраструктуру)

Давайте посмотрим на наш файл newrelic.yml немного подробнее, чтобы увидеть, как мы можем отслеживать производительность нашего приложения в точности так, как мы сами этого хотим.


Погружаемся в конфигурацию New Relic

Прежде всего, файл конфигурации New Relic очень хорошо прокомментирован, и я рекомендую вам прочитать комментарии для различных параметров конфигурации, чтобы понять, что они делают.

Во-вторых, конфигурация New Relic осведомлена об окружении, а конфигурация для всех окружений определена в одном файле newrelic.yml, это очень похоже на то, как работает файл Rails database.yml. Мы определяем совокупность общих значений конфигурации, а затем переопределяем соответствующие значения в конкретных блоках окружения, например:

Сразу можно заметить то, как мы можем исправить некоторые из пунктов, которые были упомянуты выше. Если мы не хотим запускать наше приложение в боевом режиме, пока мы настраиваем нашу конфигурацию, все, что нам нужно сделать, это включить мониторинг в режиме разработки (нам нужно будет помнить о том, чтобы отключить это, когда сделаем нашу конфигурацию, поскольку мы не хотим, чтобы данные разработки загромождали нашу учетную запись New Relic).

Мы также должны переопределить наше имя приложения для каждого окружения, которое у нас есть, чтобы убедиться, что они контролируются отдельно, и имя приложения имеет смысл:

С помощью этих настроек, когда мы запускаем наш сервер в режиме разработки и вызываем curl localhost: 3000:

newrelic_monitor_development

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

Следующим наиболее интересным (и часто самым запутанным) значением конфигурации является значение Apdex T. В отличие от большинства других параметров конфигурации это значение не расположено в файле newrelic.yml, но вместо этого находится в настройках приложения в New Relic:

newrelic_apdex

Если вы хотите настроить значение Apdex T, вам нужно сделать это здесь, но что это за параметр и каково его правильное значение? New Relic объясняет его следующим образом:

Значение Apdex T вашего приложения  установлено на 0,5 секунды. Это означает, что запросы, отвечающие менее чем за 0,5 секунды, удовлетворяют пользователя (s), ответив от 0,5 секунды до 2,0 секунд, пользователи терпят (t), а более чем за 2 секунды реагируют разочарованием (f).

По сути, New Relic использует значение Apdex для оценки работоспособности вашего приложения в зависимости от производительности, поэтому, если многие запросы, которые отслеживаются New Relic, занимают больше времени, чем ваше значение Apdex, New Relic посчитает, что ваше приложение работает плохо, и если вы настроили оповещения, уведомит вас об этом. В принципе, вам нужно выяснить то, как быстро вы хотите, чтобы каждый запрос на сервер выполнялся вашим приложением, поэтому, если бэкэнд-запрос, занимающий две секунды вас не сильно беспокоит, то можете установить значение Apdex равным 2.0, но если вам нужны ответы, которые будет возвращены в течение 100 мс, тогда вы должны установить значение Apdex равным 0,1.

Если у вас есть новое приложение, вы можете установить значение Apdex на ту производительность, которую вы хотите получить от своего приложения. Если ваше приложение является уже существующим, у вас могут быть некоторые показатели относительно того, насколько быстро оно/должно выполняться, и вы можете руководствоваться этими данными. Все запросы, которые выполняются сервером меньше, чем значение Apdex T, New Relic будет считать хорошими. Все запросы, выполненные в Apdex * 4 секунды, будут считаться допустимыми (т. е. пользователи могут это терпеть). Все ответы, которые занимают больше времени, чем Apdex * 4, будут считаться разочаровывающими (разочарованные пользователи не склонны возвращаться на ваш сайт). Таким образом, установите значение Apdex T таким образом, чтобы на самом деле получить из него полезную информацию, фактическое значение зависит от вашей предметной области и того, чего вы хотите достичь (с точки зрения производительности), нет правильного или неправильного ответа.

Мы установим наше значение Apdex T-100ms (0.1), так как все, что у нас есть, - это приложение Hello World, и оно должно иметь возможность быстро вернуть ответ (даже в режиме разработки).


Еще немного настроек New Relic

Было немного забавно, что большая часть конфигурации содержится в файле newrelic.yml, но значение Apdex T находится в настройках приложения, поэтому New Relic теперь позволяет переместить все значения конфигурации из файла YAML в New Relic:

newrelic_move_configuration

Преимущество этого заключается в том, что вам не нужно выкатывать свое приложение каждый раз, когда вы хотите поменять свои значения конфигурации, поэтому это определенно заслуживает рассмотрения. На данный момент мы будем придерживаться YAML файла.

Итак, какие еще есть полезные параметры New Relic, о которых мы должны знать?

Ну, есть набор параметров, касающихся файла лога New Relic агента:

У них есть значения по умолчанию, но если мы хотим, чтобы файл лога был в определенном месте, или если мы хотим видеть больше или меньше информации в файле, мы можем легко контролировать это. Поскольку мы просто настраиваем New Relic, мы устанавливаем уровень лога в debug, чтобы убедиться, что мы не пропустили какую-либо важную информацию (при развертывании мы можем захотеть установить уровень в warn или даже error).

Теперь мы получаем огромное количество информации в логах, которая (если читать внимательно) может дать нам много информации о том, как работает New Relic:

Например, мы можем видеть, что:

  • Мы можем отключить мониторинг, даже если он включен в файле конфигурации, установив переменную среды NEWRELIC_ENABLE = false
  • Мы видим, что New Relic вставляет кучу промежуточного ПО Rack
  • Мы используем Webrick в качестве сервера, который, очевидно, находится в режиме разработки, но в производстве было бы хорошо подтвердить, что New Relic распознает сервер, который мы используем
  • New Relic отправляет данные на collector.newrelic.com:443
  • New Relic отправляет данные каждые 60 секунд
  • Реальный мониторинг пользователей осуществляется с помощью JSONP

Очень полезная информация, когда вы пытаетесь понять, как все взаимодействует.

Большинство других параметров конфигурации довольно очевидны, например:

Единственный параметр, о котором стоит задуматься, это:

Трассировщик транзакций фиксирует подробные данные о запросах, которые занимают слишком много времени. Порог транзакции обычно является кратным (x4) значения Apdex, но часто бывает полезно развести эти значения друг от друга. Вы можете быть довольны оценкой Apdex в одну секунду, но вы можете захотеть получить подробные данные о запросах, которые занимают 1,5 секунды или дольше (вместо четырех секунд или дольше, которые будут логироваться по умолчанию). Таким образом, вы можете установить этот параметр отдельно:


Режим разработки New Relic

Одно из значений конфигурации, которое вы, возможно, заметили, было:

Это должно быть включено только при разработке (или вообще всегда выключено). В режиме разработки агент New Relic будет хранить данные о производительности за последние 100 запросов в памяти. Вы можете просмотреть эти данные в любое время, открыв ендпоинт  /newrelic вашего запущенного приложения:

newrelic_developer_mode

Я почти никогда не использую его, но помните что он там есть, если вам это нужно.


Уведомляем New Relic о развертываниях

Всякий раз, когда вы работаете над производительностью вашего приложения, всегда хорошо знать, оказало ли какое-либо конкретное развертывание положительное или отрицательное влияние на производительность. С этой целью вы можете уведомлять New Relic каждый раз, когда вы выполняете развертывание. Таким образом, если производительность ухудшится или улучшится, вы сможете увидеть, какое развертывание стало тому виновником. New Relic предоставляет Capistrano для этого, но я предпочитаю командную строку:

Главное - правильно указать имя приложения, настроенное в файле newrelic.yml.

Мы получим красивые линии на соответствующих графиках New Relic, которые будут указывать, когда произошло развертывание.

newrelic_deployment

Вывод

Теперь вы много знаете о том, как работает New Relic и как начать использовать его для мониторинга Rails приложения. Но правильная настройка - это всего лишь половина работы, какие метрики будут захватывать для вас New Relic? И как вы можете использовать их для повышения производительности вашего приложения? Мы рассмотрим некоторые из них в следующей статье. На данный момент вы можете настроить New Relic для своего приложения Rails, и если у вас есть какие-либо вопросы, не забудьте оставить свой комментарий.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.