Статьи

Начало работы с новой реликвией за 30 минут

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

Спонсированный контент

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

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

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


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

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

1
2
3
cd ~/projects/tmp/newrelic
rails new newrelic_rails1
cd newrelic_rails1

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

1
rails g controller hello

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

1
2
3
NewrelicRails1::Application.routes.draw do
  root ‘hello#index’
end

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

1
2
3
4
class HelloController > ApplicationController
  def index
  end
end

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

1
<h1>Hello World!</h1>

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

1
rails s

Когда мы свернем localhost:3000 , мы получим:

1
2
3
4
5
6
7
<!DOCTYPE html>
<html>
<body>
<h1>Hello World!</h1>
</body>
</html>

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


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

newrelic_start

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

newrelic_install_gem

Наш Gemfile теперь будет выглядеть так:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
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 нам нужно запустить:

1
bundle install

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

newrelic_config_download

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

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

1
RAILS_ENV=production rails s

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<!DOCTYPE html>
<html>
<head><script type=&quot;text/javascript&quot;>var NREUMQ=NREUMQ||[];NREUMQ.push([&quot;mark&quot;,&quot;firstbyte&quot;,new Date().getTime()]);</script>
  <title>NewrelicRails1</title>
  <link data-turbolinks-track=&quot;true&quot;
  <script data-turbolinks-track=&quot;true&quot;
  <meta content=&quot;authenticity_token&quot;
<meta content=&quot;i5rBPaG52bzM5Kn0SJwIbq6Qz0dG0KsIlcd8tb9vMV8=&quot;
</head>
<body>
 
<h1>Hello World!</h1>
 
<script type=&quot;text/javascript&quot;>if (typeof NREUMQ !== &quot;undefined&quot;) { if (!NREUMQ.f) { NREUMQ.f=function() {
NREUMQ.push([&quot;load&quot;,new Date().getTime()]);
var e=document.createElement(&quot;script&quot;);
e.type=&quot;text/javascript&quot;;
e.src=((&quot;http:&quot;===document.location.protocol)?&quot;http:&quot;:&quot;https:&quot;) + &quot;//&quot;
  &quot;js-agent.newrelic.com/nr-100.js&quot;;
document.body.appendChild(e);
if(NREUMQ.a)NREUMQ.a();
};
NREUMQ.a=window.onload;window.onload=NREUMQ.f;
};
NREUMQ.push([&quot;nrfj&quot;,&quot;beacon-3.newrelic.com&quot;,&quot;b9119aa82e&quot;,&quot;2507356&quot;,&quot;cglYTRENCF4ERBtZB10KWRYKDABXGQ==&quot;,0,21,new Date().getTime(),&quot;&quot;,&quot;&quot;,&quot;&quot;,&quot;&quot;,&quot;&quot;]);}</script>
 
<p></body>
</html>

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
% 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 &quot;production&quot;
[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 &quot;production&quot;
[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

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

newrelic_monitored_application

Однако есть несколько вещей, которые не так хороши:

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

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


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

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
common: &amp;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).

1
2
3
development:
 <<: *default_settings
 monitor_mode: true

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
common: &amp;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 :

newrelic_monitor_development

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

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

newrelic_apdex

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

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

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

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

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


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

newrelic_move_configuration

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

Так о каких других полезных параметрах New Relic мы должны знать?

Ну, есть набор параметров, связанных с файлом журнала агента New Relic:

1
2
3
log_level: info
log_file_path: ‘log’
log_file_name: ‘newrelic_agent.log’

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

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
% cat log/newrelic_agent.log</p>
 
[09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Starting the New Relic agent in &quot;development&quot;
[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 &quot;development&quot;
[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.
[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.
[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 &quot;Plugin List&quot;: 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 &quot;JRuby version&quot;: uninitialized constant NewRelic::EnvironmentReport::JRUBY_VERSION
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : EnvironmentReport failed to retrieve value for &quot;Java VM version&quot;: uninitialized constant NewRelic::EnvironmentReport::ENV_JAVA
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : EnvironmentReport ignoring value for &quot;Rails threadsafe&quot;
[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.
[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: &quot;<script type=\\&quot;text/javascript\\&quot;>var NREUMQ=NREUMQ||[];NREUMQ.push([\&quot;mark\&quot;,\&quot;firstbyte\&quot;,new Date().getTime()]);</script>&quot;
[09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Browser timing static footer: &quot;if (!NREUMQ.f) { NREUMQ.f=function() {\nNREUMQ.push([\&quot;load\&quot;,new Date().getTime()]);\nvar e=document.createElement(\&quot;script\&quot;);\ne.type=\&quot;text/javascript\&quot;;\ne.src=((\&quot;http:\&quot;===document.location.protocol)?\&quot;http:\&quot;:\&quot;https:\&quot;) + \&quot;//\&quot;
[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

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

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

1
2
3
browser_monitoring:
  auto_instrument: true
capture_params: false

Единственное, о чем можно знать, это:

1
2
transaction_tracer:
 transaction_threshold: apdex_f

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

1
2
transaction_tracer:
 transaction_threshold: 1.5

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

1
developer_mode: true

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

newrelic_developer_mode

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


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

1
2
% 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, чтобы указать, когда произошло развертывание.

newrelic_deployment

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