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:
cd ~/projects/tmp/newrelic rails new newrelic_rails1 cd newrelic_rails1
Нам не так много нужно сделать, чтобы создать наше приложение «Hello World». Нам нужен новый контроллер:
rails g controller hello
Теперь нам нужен только маршрут, чтобы корневой путь приложения указывал на наш контроллер. Нам также нужно отображение со словами «Hello World». Учитывая все это, наш config/routes.rb
должен выглядеть следующим образом:
NewrelicRails1::Application.routes.draw do root 'hello#index' end
Наш контроллер (app/controller/hello_controller.rb
) будет выглядеть следующим образом:
class HelloController > ApplicationController def index end end
И наше отображение (app/views/hello/index.html.erb
) будет похоже на:
<h1>Hello World!</h1>
Теперь мы можем запустить наш сервер:
rails s
Когда мы запросим с помощью curl localhost:3000
, мы получим:
<!DOCTYPE html> <html> ... <body> <h1>Hello World!</h1> </body> </html>
Все работает!
Присоединение к New Relic
С Ruby это сделать очень просто. Мы добавляем gem в наш Gemfile
, запускаем bundle install
, кладем конфигурационный файл в папку config, и у нас есть все, что нам нужно. На самом деле, в New Relic очень хорошо все это расписано. Все, что вам нужно сделать, это войти в свою учетную запись, и если вы еще не развернули агент Relic Relic, и дальше все будет довольно очевидно:



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



Теперь наш Gemfile
будет выглядеть следующим образом:
source 'https://rubygems.org' gem 'rails', '4.0.0' gem 'sqlite3' gem 'sass-rails', '~> 4.0.0' gem 'uglifier', '>= 1.3.0' gem 'coffee-rails', '~> 4.0.0' gem 'jquery-rails' gem 'turbolinks' gem 'jbuilder', '~> 1.2' group :doc do gem 'sdoc', require: false end gem 'newrelic_rpm'
Всякий раз, когда мы добавляем что-либо в Gemfile
, нам нужно запускать:
bundle install
Нам также нужен newrelic.yml
, который вы можете скачать из New Relic:



Он будет предварительно настроен с вашим лицензионным ключом. Мы должны поместить этот файл в config/newrelic.yml
.
На этом этапе, если мы запустили наше приложение в боевом или стейдж режиме, мы уже получили данные в нашей учетной записи New Relic. Итак, давайте сделаем так:
RAILS_ENV=production rails s
На этот раз, когда мы дергаем curl'ом localhost:3000
, то получаем:
<!DOCTYPE html> <html> <head><script type="text/javascript">var NREUMQ=NREUMQ||[];NREUMQ.push(["mark","firstbyte",new Date().getTime()]);</script> <title>NewrelicRails1</title> <link data-turbolinks-track="true" href="/stylesheets/application.css" media="all" rel="stylesheet" /> <script data-turbolinks-track="true" src="/javascripts/application.js"></script> <meta content="authenticity_token" name="csrf-param" /> <meta content="i5rBPaG52bzM5Kn0SJwIbq6Qz0dG0KsIlcd8tb9vMV8=" name="csrf-token" /> </head> <body> <h1>Hello World!</h1> <script type="text/javascript">if (typeof NREUMQ !== "undefined") { if (!NREUMQ.f) { NREUMQ.f=function() { NREUMQ.push(["load",new Date().getTime()]); var e=document.createElement("script"); e.type="text/javascript"; e.src=(("http:"===document.location.protocol)?"http:":"https:") + "//" + "js-agent.newrelic.com/nr-100.js"; document.body.appendChild(e); if(NREUMQ.a)NREUMQ.a(); }; NREUMQ.a=window.onload;window.onload=NREUMQ.f; }; NREUMQ.push(["nrfj","beacon-3.newrelic.com","b9119aa82e","2507356","cglYTRENCF4ERBtZB10KWRYKDABXGQ==",0,21,new Date().getTime(),"","","","",""]);}</script> <p></body> </html>
На наши страницы добавлена куча JavaScript, так что New Relic может контролировать время браузера. Это один из способов сказать, что наша интеграция с New Relic работает. Но это не единственный способ: New Relic также создает файл лога:
% cat log/newrelic_agent.log Logfile created on 2013-09-22 16:23:13 +1000 by logger.rb/36483 [09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Starting the New Relic agent in "production" environment. [09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : To prevent agent startup add a NEWRELIC_ENABLE=false environment variable or modify the "production" section of your newrelic.yml. [09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Reading configuration from config/newrelic.yml [09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Enabling the Request Sampler. [09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Environment: production [09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Dispatcher: webrick [09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Application: My Application [09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Installing ActiveRecord 4 instrumentation [09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Installing Net instrumentation [09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Installing deferred Rack instrumentation [09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Installing Rails 4 Controller instrumentation [09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Installing Rails 4 view instrumentation [09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Installing Rails4 Error instrumentation [09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Finished instrumentation [09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Doing deferred dependency-detection before Rack startup [09/22/13 16:23:16 +1000 skorks-envato (12424)] INFO : Reporting to: https://rpm.newrelic.com/accounts/303380/applications/2507356
Мы также можем проверить нашу учетную запись New Relic, чтобы убедиться, что появилось новое приложение для мониторинга :



Однако есть несколько неприятных моментов:
- Наше приложение называется «Мое приложение»,
- Мы приняли все значения конфигурации по умолчанию, которые могут и не соответствовать нашему приложению
- Нам пришлось запустить наш сервер в боевом режиме (что возможно только потому, что это совершенно новое приложение, которое не полагается на какую-либо внешнюю инфраструктуру)
Давайте посмотрим на наш файл newrelic.yml
немного подробнее, чтобы увидеть, как мы можем отслеживать производительность нашего приложения в точности так, как мы сами этого хотим.
Погружаемся в конфигурацию New Relic
Прежде всего, файл конфигурации New Relic очень хорошо прокомментирован, и я рекомендую вам прочитать комментарии для различных параметров конфигурации, чтобы понять, что они делают.
Во-вторых, конфигурация New Relic осведомлена об окружении, а конфигурация для всех окружений определена в одном файле newrelic.yml
, это очень похоже на то, как работает файл Rails database.yml
. Мы определяем совокупность общих значений конфигурации, а затем переопределяем соответствующие значения в конкретных блоках окружения, например:
common: &default_settings license_key: '<your licence key>' app_name: My Application monitor_mode: true ... development: <<: *default_settings monitor_mode: false test: <<: *default_settings monitor_mode: false production: <<: *default_settings monitor_mode: true staging: <<: *default_settings monitor_mode: true
Сразу можно заметить то, как мы можем исправить некоторые из пунктов, которые были упомянуты выше. Если мы не хотим запускать наше приложение в боевом режиме, пока мы настраиваем нашу конфигурацию, все, что нам нужно сделать, это включить мониторинг в режиме разработки (нам нужно будет помнить о том, чтобы отключить это, когда сделаем нашу конфигурацию, поскольку мы не хотим, чтобы данные разработки загромождали нашу учетную запись New Relic).
development: <<: *default_settings monitor_mode: true
Мы также должны переопределить наше имя приложения для каждого окружения, которое у нас есть, чтобы убедиться, что они контролируются отдельно, и имя приложения имеет смысл:
common: &default_settings license_key: '<your licence key>' app_name: newrelic_rails1 monitor_mode: true ... development: <<: *default_settings monitor_mode: true app_name: newrelic_rails1 (Development) test: <<: *default_settings monitor_mode: false app_name: newrelic_rails1 (Test) production: <<: *default_settings monitor_mode: true app_name: newrelic_rails1 (Production) staging: <<: *default_settings monitor_mode: true app_name: newrelic_rails1 (Staging)
С помощью этих настроек, когда мы запускаем наш сервер в режиме разработки и вызываем curl localhost: 3000
:



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



Если вы хотите настроить значение 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:



Преимущество этого заключается в том, что вам не нужно выкатывать свое приложение каждый раз, когда вы хотите поменять свои значения конфигурации, поэтому это определенно заслуживает рассмотрения. На данный момент мы будем придерживаться YAML файла.
Итак, какие еще есть полезные параметры New Relic, о которых мы должны знать?
Ну, есть набор параметров, касающихся файла лога New Relic агента:
log_level: info log_file_path: 'log' log_file_name: 'newrelic_agent.log'
У них есть значения по умолчанию, но если мы хотим, чтобы файл лога был в определенном месте, или если мы хотим видеть больше или меньше информации в файле, мы можем легко контролировать это. Поскольку мы просто настраиваем New Relic, мы устанавливаем уровень лога в debug, чтобы убедиться, что мы не пропустили какую-либо важную информацию (при развертывании мы можем захотеть установить уровень в warn или даже error).
Теперь мы получаем огромное количество информации в логах, которая (если читать внимательно) может дать нам много информации о том, как работает New Relic:
% cat log/newrelic_agent.log</p> [09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Starting the New Relic agent in "development" environment. [09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : To prevent agent startup add a NEWRELIC_ENABLE=false environment variable or modify the "development" section of your newrelic.yml. [09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Reading configuration from config/newrelic.yml [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Not in Rake environment so skipping blacklisted_rake_tasks check: uninitialized constant Rake [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Updating config (add) from NewRelic::Agent::Configuration::YamlSource. Results: [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : {...} [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Not in Rake environment so skipping blacklisted_rake_tasks check: uninitialized constant Rake [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Updating config (add) from NewRelic::Agent::Configuration::ManualSource. Results: [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : {...} [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Not in Rake environment so skipping blacklisted_rake_tasks check: uninitialized constant Rake [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Installed New Relic Browser Monitoring middleware [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Installed New Relic Agent Hooks middleware [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Agent is configured to use SSL [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Using JSON marshaller [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Transaction tracing threshold is 2.0 seconds. [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Ignoring errors of type 'ActionController::RoutingError' [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Ignoring errors of type 'Sinatra::NotFound' [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Errors will be sent to the New Relic service. [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Ignoring errors of type 'ActionController::RoutingError' [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Ignoring errors of type 'Sinatra::NotFound' [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : RequestSampler max_samples set to 1200 [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Resetting RequestSampler [09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Enabling the Request Sampler. [09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Environment: development [09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Dispatcher: webrick [09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Application: newrelic_rails1 (Development) [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : EnvironmentReport failed to retrieve value for "Plugin List": undefined method `plugins' for #<Rails::Application::Configuration:0x007fb232401a00> [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : EnvironmentReport failed to retrieve value for "JRuby version": uninitialized constant NewRelic::EnvironmentReport::JRUBY_VERSION [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : EnvironmentReport failed to retrieve value for "Java VM version": uninitialized constant NewRelic::EnvironmentReport::ENV_JAVA [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : EnvironmentReport ignoring value for "Rails threadsafe" which came back falsey: nil [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Creating Ruby Agent worker thread. [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Creating New Relic thread: Worker Loop [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : New Relic Ruby Agent 3.6.7.152 Initialized: pid = 12925 [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Connecting Process to New Relic: bin/rails [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Not in Rake environment so skipping blacklisted_rake_tasks check: uninitialized constant Rake [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Created net/http handle to collector.newrelic.com:443 [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Sending request to collector.newrelic.com:443/agent_listener/12/1f69cbd2a641bde79bdb5eb4c86a0ab32360e1f8/get_redirect_host?marshal_format=json [09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Installing ActiveRecord 4 instrumentation [09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Installing Net instrumentation [09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Installing deferred Rack instrumentation [09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Installing Rails 4 Controller instrumentation [09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Installing Rails 4 view instrumentation [09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Installing Rails4 Error instrumentation [09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Finished instrumentation [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Registered NewRelic::Agent::Samplers::CpuSampler for harvest time sampling. [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Registered NewRelic::Agent::Samplers::MemorySampler for harvest time sampling. [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : NewRelic::Agent::Samplers::ObjectSampler not supported on this platform. [09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : NewRelic::Agent::Samplers::DelayedJobSampler not supported on this platform. [09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Doing deferred dependency-detection before Rack startup [09/22/13 17:23:40 +1000 skorks-envato (12925)] DEBUG : Uncompressed content returned [09/22/13 17:23:40 +1000 skorks-envato (12925)] DEBUG : Created net/http handle to collector-1.newrelic.com:443 [09/22/13 17:23:40 +1000 skorks-envato (12925)] DEBUG : Sending request to collector-1.newrelic.com:443/agent_listener/12/1f69cbd2a641bde79bdb5eb4c86a0ab32360e1f8/connect?marshal_format=json [09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Uncompressed content returned [09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Server provided config: {...} [09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Not in Rake environment so skipping blacklisted_rake_tasks check: uninitialized constant Rake [09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Updating config (add) from NewRelic::Agent::Configuration::ServerSource. Results: [09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : {...} [09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Wiring up Cross Application Tracing to events after finished configuring [09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Connected to New Relic Service at collector-1.newrelic.com [09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Agent Run = 575257565. [09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Connection data = {...} [09/22/13 17:23:42 +1000 skorks-envato (12925)] INFO : Reporting to: https://rpm.newrelic.com/accounts/303380/applications/2507376 [09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Browser timing header: "<script type=\\"text/javascript\\">var NREUMQ=NREUMQ||[];NREUMQ.push([\"mark\",\"firstbyte\",new Date().getTime()]);</script>" [09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Browser timing static footer: "if (!NREUMQ.f) { NREUMQ.f=function() {\nNREUMQ.push([\"load\",new Date().getTime()]);\nvar e=document.createElement(\"script\");\ne.type=\"text/javascript\";\ne.src=((\"http:\"===document.location.protocol)?\"http:\":\"https:\") + \"//\" +\n \"js-agent.newrelic.com/nr-100.js\";\ndocument.body.appendChild(e);\nif(NREUMQ.a)NREUMQ.a();\n};\nNREUMQ.a=window.onload;window.onload=NREUMQ.f;\n};\n" [09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Real User Monitoring is using JSONP protocol [09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Reporting performance data every 60 seconds. [09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Running worker loop [09/22/13 17:23:50 +1000 skorks-envato (12925)] DEBUG : Attempting to insert RUM header at beginning of head.
Например, мы можем видеть, что:
- Мы можем отключить мониторинг, даже если он включен в файле конфигурации, установив переменную среды
NEWRELIC_ENABLE = false
- Мы видим, что New Relic вставляет кучу промежуточного ПО Rack
- Мы используем Webrick в качестве сервера, который, очевидно, находится в режиме разработки, но в производстве было бы хорошо подтвердить, что New Relic распознает сервер, который мы используем
- New Relic отправляет данные на
collector.newrelic.com:443
- New Relic отправляет данные каждые 60 секунд
- Реальный мониторинг пользователей осуществляется с помощью JSONP
Очень полезная информация, когда вы пытаетесь понять, как все взаимодействует.
Большинство других параметров конфигурации довольно очевидны, например:
browser_monitoring: auto_instrument: true capture_params: false
Единственный параметр, о котором стоит задуматься, это:
transaction_tracer: transaction_threshold: apdex_f
Трассировщик транзакций фиксирует подробные данные о запросах, которые занимают слишком много времени. Порог транзакции обычно является кратным (x4) значения Apdex, но часто бывает полезно развести эти значения друг от друга. Вы можете быть довольны оценкой Apdex в одну секунду, но вы можете захотеть получить подробные данные о запросах, которые занимают 1,5 секунды или дольше (вместо четырех секунд или дольше, которые будут логироваться по умолчанию). Таким образом, вы можете установить этот параметр отдельно:
transaction_tracer: transaction_threshold: 1.5
Режим разработки New Relic
Одно из значений конфигурации, которое вы, возможно, заметили, было:
developer_mode: true
Это должно быть включено только при разработке (или вообще всегда выключено). В режиме разработки агент New Relic будет хранить данные о производительности за последние 100 запросов в памяти. Вы можете просмотреть эти данные в любое время, открыв ендпоинт /newrelic
вашего запущенного приложения:



Я почти никогда не использую его, но помните что он там есть, если вам это нужно.
Уведомляем New Relic о развертываниях
Всякий раз, когда вы работаете над производительностью вашего приложения, всегда хорошо знать, оказало ли какое-либо конкретное развертывание положительное или отрицательное влияние на производительность. С этой целью вы можете уведомлять New Relic каждый раз, когда вы выполняете развертывание. Таким образом, если производительность ухудшится или улучшится, вы сможете увидеть, какое развертывание стало тому виновником. New Relic предоставляет Capistrano для этого, но я предпочитаю командную строку:
% newrelic deployments -a 'newrelic_rails1 (Development)' -e 'development' -u 'skorks' -r 'abc123' Recorded deployment to 'newrelic_rails1 (Development)' (2013-09-22 18:19:13 +1000)
Главное - правильно указать имя приложения, настроенное в файле newrelic.yml
.
Мы получим красивые линии на соответствующих графиках New Relic, которые будут указывать, когда произошло развертывание.



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