Advertisement
  1. Code
  2. Ruby

Erste Schritte mit New Relic in 30 Minuten

Scroll to top
Read Time: 17 min
This post is part of a series called Performance Monitoring With New Relic.
5 Reasons Why New Relic Is a Developer's Best Friend

German (Deutsch) translation by Alex Grigorovich (you can also view the original English article)

Ich erinnere mich, dass ich vor einigen Jahren an einer Rails-App gearbeitet habe und jemand hatte die Idee, diesen neuen Dienst zu benutzen, der damals entwickelt hat. Es war New Relic und sie versprachen, mehr Einblick in die Leistung der Rails-App zu geben, als Sie jemals zuvor bekommen konnten. Wir haben es ausprobiert und es war cool, und was noch wichtig ist, dass das Ruby-Webentwicklungs-Ökosystem wirklich brauchte.

Werbeinhalte

Dieser Inhalt wurde von New Relic in Auftrag gegeben und vom Tuts+ -Team geschrieben und/oder bearbeitet. Unser Ziel mit Werbeinhalten ist es, relevante und objektive Tutorials, Fallstudien und inspirierende Interviews zu veröffentlichen, die unseren Lesern einen echten pädagogischen Wert bieten und es uns ermöglichen, die Erstellung nützlicherer Inhalte zu finanzieren.

Wenn Sie jetzt schnell vorspulen, wird es Ihnen schwer fallen, eine Ruby-Webanwendung zu finden, in die New Relic nicht eingebunden ist. New Relic als Unternehmen bietet weiterhin Werkzeugs zur Überwachung Ihrer Ruby-Apps an, hat sich jedoch auch in eine Reihe anderer Sprachen wie Java, Python und sogar .Net verzweigt. Mit der Anzahl der von Ihnen bereitgestellten Funktionen steigt natürlich auch die Komplexität und der Umfang der Dokumentation. Es wird schwierig herauszufinden, wo Sie anfangen sollen, insbesondere wenn Sie noch kein Experte sind.

Heute denke ich, wir könnten zu New Relic zurückkehren und sehen, wie wir mit dem Service zur Überwachung einer Rails App beginnen können.


Eine Basic Rails App

Um New Relic verwenden zu können, müssen wir etwas überwachen. Richten wir also eine einfache Rails-App für 'Hello World' ein.

Die von uns erstellte App befindet sich unter ~/projects/tmp/newrelic und heißt newrelic_rails1. Ich gehe davon aus, dass Sie Rails bereits installiert haben:

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

Wir müssen nicht viel tun, um unsere 'Hello World'-App zu erstellen. Wir brauchen einen neuen Controller:

1
rails g controller hello

Jetzt brauchen wir nur noch eine Route, wir erhalten die Root-Route der Anwendung, um unseren Controller zu verwenden. Wir brauchen auch eine Ansicht mit den Worten "Hello World". Vor diesem Hintergrund sollte unsere config/route.rb folgendermaßen aussehen:

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

Unser Controller (app/controller/hello_controller.rb) lautet wie folgt:

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

Und unsere Ansicht (app/views/hello/index.html.erb) ähnelt:

1
<h1>Hello World!</h1>

Wir können jetzt unseren Entwicklungsserver starten:

1
rails s

Wenn wir curl localhost: 3000 einrollen, erhalten wir:

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

Alles funktioniert!


Hook in New Relic

Mit Ruby ist es sehr einfach. Wir fügen unserer Gemfile einen Edelstein hinzu, führen eine bundle install durch, legen eine Konfigurationsdatei im Konfigurationsordner ab und haben alles, was wir brauchen. Tatsächlich ist New Relic ziemlich gut darin, Sie durch dieses Theme zu führen. Sie müssen sich lediglich bei Ihrem Konto anmelden. Wenn Sie noch keinen New Relic-Agenten bereitgestellt haben, ist es ziemlich offensichtlich, was zu tun ist:

newrelic_startnewrelic_startnewrelic_start

Zuerst installieren wir den New Relic Agent Gem, indem wir ihn gemäß den Anweisungen zu unserer Gemfile hinzufügen:

newrelic_install_gemnewrelic_install_gemnewrelic_install_gem

Unsere Gemfile sieht jetzt so aus:

1
source 'https://rubygems.org'
2
3
gem 'rails', '4.0.0'
4
gem 'sqlite3'
5
gem 'sass-rails', '~> 4.0.0'
6
gem 'uglifier', '>= 1.3.0'
7
gem 'coffee-rails', '~> 4.0.0'
8
gem 'jquery-rails'
9
gem 'turbolinks'
10
gem 'jbuilder', '~> 1.2'
11
12
group :doc do
13
  gem 'sdoc', require: false
14
end
15
16
gem 'newrelic_rpm'

Wann immer wir der Gemfile etwas hinzufügen, müssen wir Folgendes ausführen:

1
bundle install

Wir benötigen auch eine newrelic.yml, die Sie von New Relic herunterladen können:

newrelic_config_downloadnewrelic_config_downloadnewrelic_config_download

Es wird mit Ihrem Lizenzschlüssel vorkonfiguriert geliefert. Wir müssen diese Datei unter config/newrelic.yml ablegen.

Wenn wir unsere Anwendung zu diesem Zeitpunkt im Staging- oder Produktionsmodus ausführen, erhalten wir bereits Daten in unserem New Relic-Konto. Lassen Sie uns dies tun:

1
RAILS_ENV=production rails s

Dieses Mal, wenn wir curl localhost:3000 einrollen, erhalten wir:

1
<!DOCTYPE html>
2
<html>
3
<head><script type=&quot;text/javascript&quot;>var NREUMQ=NREUMQ||[];NREUMQ.push([&quot;mark&quot;,&quot;firstbyte&quot;,new Date().getTime()]);</script>
4
  <title>NewrelicRails1</title>
5
  <link data-turbolinks-track=&quot;true&quot; href=&quot;/stylesheets/application.css&quot; media=&quot;all&quot; rel=&quot;stylesheet&quot; />
6
  <script data-turbolinks-track=&quot;true&quot; src=&quot;/javascripts/application.js&quot;></script>
7
  <meta content=&quot;authenticity_token&quot; name=&quot;csrf-param&quot; />
8
<meta content=&quot;i5rBPaG52bzM5Kn0SJwIbq6Qz0dG0KsIlcd8tb9vMV8=&quot; name=&quot;csrf-token&quot; />
9
</head>
10
<body>
11
12
<h1>Hello World!</h1>
13
14
<script type=&quot;text/javascript&quot;>if (typeof NREUMQ !== &quot;undefined&quot;) { if (!NREUMQ.f) { NREUMQ.f=function() {
15
NREUMQ.push([&quot;load&quot;,new Date().getTime()]);
16
var e=document.createElement(&quot;script&quot;);
17
e.type=&quot;text/javascript&quot;;
18
e.src=((&quot;http:&quot;===document.location.protocol)?&quot;http:&quot;:&quot;https:&quot;) + &quot;//&quot; +

19
  &quot;js-agent.newrelic.com/nr-100.js&quot;;
20
document.body.appendChild(e);
21
if(NREUMQ.a)NREUMQ.a();
22
};
23
NREUMQ.a=window.onload;window.onload=NREUMQ.f;
24
};
25
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>
26
27
<p></body>
28
</html>

Es wurde eine Reihe von JavaScript in unsere Seiten eingefügt, damit New Relic die Browserzeit überwachen kann. Auf diese Weise können wir feststellen, dass unsere New Relic-Integration funktioniert. Aber es ist nicht die einzige Möglichkeit, New Relic erstellt auch eine Protokolldatei:

1
% cat log/newrelic_agent.log
2
3
Logfile created on 2013-09-22 16:23:13 +1000 by logger.rb/36483
4
[09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Starting the New Relic agent in &quot;production&quot; environment.
5
[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; section of your newrelic.yml.
6
[09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Reading configuration from config/newrelic.yml
7
[09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Enabling the Request Sampler.
8
[09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Environment: production
9
[09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Dispatcher: webrick
10
[09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Application: My Application
11
[09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Installing ActiveRecord 4 instrumentation
12
[09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Installing Net instrumentation
13
[09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Installing deferred Rack instrumentation
14
[09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Installing Rails 4 Controller instrumentation
15
[09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Installing Rails 4 view instrumentation
16
[09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Installing Rails4 Error instrumentation
17
[09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Finished instrumentation
18
[09/22/13 16:23:13 +1000 skorks-envato (12424)] INFO : Doing deferred dependency-detection before Rack startup
19
[09/22/13 16:23:16 +1000 skorks-envato (12424)] INFO : Reporting to: https://rpm.newrelic.com/accounts/303380/applications/2507356

Wir können auch unser New Relic-Konto überprüfen, um sicherzustellen, dass eine neue Anwendung zur Überwachung angezeigt wurde:

newrelic_monitored_applicationnewrelic_monitored_applicationnewrelic_monitored_application

Es gibt jedoch einige Dinge, die nicht so schön sind:

  • Unsere Bewerbung heißt "My Application".
  • Wir haben alle Standardkonfigurationswerte akzeptiert, die möglicherweise nicht zu unserer App passen
  • Wir mussten unseren Server im Produktionsmodus starten (was nur möglich ist, weil es sich um eine brandneue App handelt, die nicht auf einer externen Infrastruktur basiert).

Schauen wir uns also unsere Datei newrelic.yml etwas genauer an, um zu sehen, wie wir die Leistung unserer App genau so überwachen können, wie wir es möchten.


Untertauchen in die Konfiguration von New Relic

Zuerst ist die New Relic-Konfigurationsdatei sehr gut kommentiert, und ich empfehle Ihnen, die Kommentare zu den verschiedenen Konfigurationsparametern zu lesen, um zu verstehen, was sie alle tun.

Zweitens ist die New Relic-Konfiguration umweltbewusst, und die Konfiguration für alle Umgebungen ist in der einen Datei newrelic.yml definiert. Dies ist der Funktionsweise der Datei Rails database.yml sehr ähnlich. Wir definieren eine Reihe allgemeiner Konfigurationswerte und überschreiben dann die relevanten in den spezifischen Umgebungsblöcken, z.B.

1
common: &amp;default_settings
2
  license_key: '<your licence key>'
3
  app_name: My Application
4
  monitor_mode: true
5
6
  ...
7
8
development:
9
  <<: *default_settings
10
  monitor_mode: false
11
12
test:
13
  <<: *default_settings
14
  monitor_mode: false
15
16
production:
17
  <<: *default_settings
18
  monitor_mode: true
19
20
staging:
21
  <<: *default_settings
22
  monitor_mode: true

Wir können sofort sehen, wie wir einige der oben genannten Punkte beheben können. Wenn wir unsere App nicht im Produktionsmodus starten müssen, während wir unsere Konfiguration optimieren, müssen wir nur die Überwachung im Entwicklungsmodus aktivieren (wir müssen daran denken, diese Option auszuschalten, wenn wir damit zufrieden sind unsere Konfiguration, da wir nicht möchten, dass Entwicklungsdaten unser New Relic-Konto überladen).

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

Wir sollten auch unseren Anwendungsnamen für jede Umgebung überschreiben, um sicherzustellen, dass sie separat überwacht werden und der Anwendungsname sinnvoll ist:

1
  common: &amp;default_settings
2
    license_key: '<your licence key>'
3
    app_name: newrelic_rails1
4
    monitor_mode: true
5
6
    ...
7
8
  development:
9
    <<: *default_settings
10
    monitor_mode: true
11
    app_name: newrelic_rails1 (Development)
12
13
  test:
14
    <<: *default_settings
15
    monitor_mode: false
16
    app_name: newrelic_rails1 (Test)
17
18
  production:
19
    <<: *default_settings
20
    monitor_mode: true
21
    app_name: newrelic_rails1 (Production)
22
23
  staging:
24
    <<: *default_settings
25
    monitor_mode: true
26
    app_name: newrelic_rails1 (Staging)

Mit nur diesen Konfigurationsänderungen, wenn wir unseren Server im Entwicklungsmodus starten und curl localhost:3000:

newrelic_monitor_developmentnewrelic_monitor_developmentnewrelic_monitor_development

Wir überwachen unsere Anwendung jetzt im Entwicklungsmodus und unser App-Name entspricht unseren Erwartungen. Wenn Ihre Anwendung angibt, dass keine Daten empfangen werden, geben Sie ihr eine Minute Zeit. Es dauert eine Weile, bis die Daten eingehen.

Noch eine interessante (und oft verwirrendste) Konfigurationswert ist der Apdex T-Wert. Im Gegensatz zu den meisten anderen Konfigurationsparametern befindet sich dieser Wert nicht in der Datei newrelic.yml, sondern in den Einstellungen für die Anwendung in New Relic:

newrelic_apdexnewrelic_apdexnewrelic_apdex

Wenn Sie Ihren Apdex T-Wert optimieren möchten, müssen Sie dies hier tun. Aber was ist dieser Parameter und welcher Wert ist der richtige, um ihn einzugeben? Nun, New Relic erklärt es folgendermaßen:

Der Apdex T-Wert Ihrer App ist auf 0,5 Sekunden eingestellt. Das bedeutet, dass Anfragen, die in weniger als 0,5 Sekunden antworten, zufriedenstellend sind, Antworten zwischen 0,5 Sekunden und 2,0 Sekunden tolerieren (t) und Antworten in mehr als 2,0 Sekunden frustrierend sind (f).

New Relic verwendet den Apdex-Wert, um den Zustand Ihrer Anwendung in Bezug auf die Leistung zu messen. Wenn also viele der von New Relic überwachten Anforderungen länger dauern als Ihr Apdex-Wert, betrachtet New Relic Ihre Anwendung als leistungsfähig schlecht und wenn Sie Warnungen eingerichtet haben, werden Sie darüber informiert. Grundsätzlich müssen Sie herausfinden, wie schnell jede Serveranforderung von Ihrer Anwendung erfüllt werden soll. Wenn Sie also mit einer Backend-Anfrage, die zwei Sekunden dauert, einverstanden sind, können Sie Ihren Apdex-Wert auf 2,0 setzen, aber wenn Sie einen benötigen Wenn die Antwort innerhalb von 100 ms zurückgegeben wird, sollten Sie Ihren Apdex-Wert auf 0,1 setzen.

Wenn Sie eine neue Anwendung haben, können Sie den Apdex-Wert auf die Leistung einstellen, die Sie von Ihrer Anwendung erwarten. Wenn Ihre App bereits vorhanden ist, haben Sie möglicherweise einige Kennzahlen dazu, wie schnell sie ausgeführt wird/werden soll, und Sie können sich davon leiten lassen. Alle Anforderungen, die vom Server mit weniger als dem Apdex T-Wert erfüllt werden, werden von New Relic als in Ordnung angesehen. Alle Anfragen, die innerhalb von Apdex * 4 Sekunden erfüllt werden, gelten als tolerierend (d. H. Benutzer können dies tolerieren). Alle Antworten, die länger als Apdex * 4 dauern, werden als frustrierend angesehen (frustrierte Benutzer neigen nicht dazu, dabei zu bleiben). Stellen Sie Ihren Apdex T-Wert so ein, dass Sie tatsächlich nützliche Informationen daraus erhalten. Der tatsächliche Wert hängt von Ihrer Domain ab und davon, was Sie erreichen möchten (in Bezug auf die Leistung). Es gibt keine richtige oder falsche Antwort.

Wir werden unseren Apdex T-Wert auf 100 ms (0,1) setzen, da wir nur eine 'Hello World'-App haben und diese sehr schnell (auch im Entwicklungsmodus) eine Antwort zurückgeben kann.


Noch mehr neue Reliktkonfiguration

Es war ein bisschen komisch, dass der größte Teil der Konfiguration aus der Datei newrelic.yml stammt, aber der Apdex-T-Wert befindet sich in den Anwendungseinstellungen, sodass Sie mit New Relic jetzt alle Konfigurationswerte aus der YAML-Datei in New Relic verschieben können:

newrelic_move_configurationnewrelic_move_configurationnewrelic_move_configuration

Dies hat den Vorteil, dass Sie nicht jedes Mal eine erneute Bereitstellung durchführen müssen, wenn Sie Ihre Konfigurationswerte optimieren möchten. Daher ist dies definitiv eine Überlegung wert. Wir bleiben vorerst bei der YAML-Datei.

Also, was sind einige der anderen nützlichen New Relic-Parameter, die wir kennen sollten?

Nun, es gibt eine Reihe von Parametern, die sich mit der New Relic Agent-Protokolldatei befassen:

1
log_level: info
2
log_file_path: 'log'
3
log_file_name: 'newrelic_agent.log'

Diese haben sinnvolle Standardeinstellungen, aber wenn die Protokolldatei an einen bestimmten Ort verschoben werden soll oder wenn mehr oder weniger Informationen in der Datei angezeigt werden sollen, können wir dies problemlos steuern. Da wir gerade New Relic einrichten, setzen wir die Protokollebene auf Debug, um sicherzustellen, dass keine wichtigen Informationen übersehen werden (bei der Bereitstellung möchten wir sie möglicherweise auf Warnung oder sogar auf Fehler einstellen).

Wir erhalten jetzt eine Fülle von Informationen in der Protokolldatei, die uns (wenn sie sorgfältig gelesen werden) viele Einblicke in die Funktionsweise von New Relic geben können:

1
% cat log/newrelic_agent.log</p>
2
3
[09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Starting the New Relic agent in &quot;development&quot; environment.
4
[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; section of your newrelic.yml.
5
[09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Reading configuration from config/newrelic.yml
6
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Not in Rake environment so skipping blacklisted_rake_tasks check: uninitialized constant Rake
7
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Updating config (add) from NewRelic::Agent::Configuration::YamlSource. Results:
8
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : {...}
9
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Not in Rake environment so skipping blacklisted_rake_tasks check: uninitialized constant Rake
10
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Updating config (add) from NewRelic::Agent::Configuration::ManualSource. Results:
11
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : {...}
12
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Not in Rake environment so skipping blacklisted_rake_tasks check: uninitialized constant Rake
13
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Installed New Relic Browser Monitoring middleware
14
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Installed New Relic Agent Hooks middleware
15
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Agent is configured to use SSL
16
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Using JSON marshaller
17
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Transaction tracing threshold is 2.0 seconds.
18
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Ignoring errors of type 'ActionController::RoutingError'
19
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Ignoring errors of type 'Sinatra::NotFound'
20
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Errors will be sent to the New Relic service.
21
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Ignoring errors of type 'ActionController::RoutingError'
22
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Ignoring errors of type 'Sinatra::NotFound'
23
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : RequestSampler max_samples set to 1200
24
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Resetting RequestSampler
25
[09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Enabling the Request Sampler.
26
[09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Environment: development
27
[09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Dispatcher: webrick
28
[09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Application: newrelic_rails1 (Development)
29
[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>

30
[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

31
[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

32
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : EnvironmentReport ignoring value for &quot;Rails threadsafe&quot; which came back falsey: nil

33
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Creating Ruby Agent worker thread.

34
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Creating New Relic thread: Worker Loop

35
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : New Relic Ruby Agent 3.6.7.152 Initialized: pid = 12925

36
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Connecting Process to New Relic: bin/rails

37
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Not in Rake environment so skipping blacklisted_rake_tasks check: uninitialized constant Rake

38
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Created net/http handle to collector.newrelic.com:443

39
[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

40
[09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Installing ActiveRecord 4 instrumentation

41
[09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Installing Net instrumentation

42
[09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Installing deferred Rack instrumentation

43
[09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Installing Rails 4 Controller instrumentation

44
[09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Installing Rails 4 view instrumentation

45
[09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Installing Rails4 Error instrumentation

46
[09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Finished instrumentation

47
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Registered NewRelic::Agent::Samplers::CpuSampler for harvest time sampling.

48
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : Registered NewRelic::Agent::Samplers::MemorySampler for harvest time sampling.

49
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : NewRelic::Agent::Samplers::ObjectSampler not supported on this platform.

50
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : NewRelic::Agent::Samplers::DelayedJobSampler not supported on this platform.

51
[09/22/13 17:23:39 +1000 skorks-envato (12925)] INFO : Doing deferred dependency-detection before Rack startup

52
[09/22/13 17:23:40 +1000 skorks-envato (12925)] DEBUG : Uncompressed content returned

53
[09/22/13 17:23:40 +1000 skorks-envato (12925)] DEBUG : Created net/http handle to collector-1.newrelic.com:443

54
[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

55
[09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Uncompressed content returned

56
[09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Server provided config: {...}

57
[09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Not in Rake environment so skipping blacklisted_rake_tasks check: uninitialized constant Rake

58
[09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Updating config (add) from NewRelic::Agent::Configuration::ServerSource. Results:

59
[09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : {...}

60
[09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Wiring up Cross Application Tracing to events after finished configuring

61
[09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Connected to New Relic Service at collector-1.newrelic.com

62
[09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Agent Run       = 575257565.

63
[09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Connection data = {...}

64
[09/22/13 17:23:42 +1000 skorks-envato (12925)] INFO : Reporting to: https://rpm.newrelic.com/accounts/303380/applications/2507376

65
[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;

66
[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; +\n  \&quot;js-agent.newrelic.com/nr-100.js\&quot;;\ndocument.body.appendChild(e);\nif(NREUMQ.a)NREUMQ.a();\n};\nNREUMQ.a=window.onload;window.onload=NREUMQ.f;\n};\n&quot;

67
[09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Real User Monitoring is using JSONP protocol

68
[09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Reporting performance data every 60 seconds.

69
[09/22/13 17:23:42 +1000 skorks-envato (12925)] DEBUG : Running worker loop

70
[09/22/13 17:23:50 +1000 skorks-envato (12925)] DEBUG : Attempting to insert RUM header at beginning of head.

Zum Beispiel können wir das sehen:

  • Wir können die Überwachung auch dann ausschalten, wenn sie in der Konfigurationsdatei aktiviert ist, indem wir eine Umgebungsvariable NEWRELIC_ENABLE=false setzen
  • Wir können sehen, dass New Relic eine Reihe von Rack-Middleware einfügt
  • Wir verwenden Webrick als unseren Server, der sich offensichtlich im Entwicklungsmodus befindet. In der Produktion ist es jedoch gut zu bestätigen, dass New Relic den von uns verwendeten Server erkennt
  • New Relic sendet Daten an collector.newrelic.com:443
  • New Relic sendet alle 60 Sekunden Daten
  • Die echte Benutzerüberwachung erfolgt über JSONP

Sehr nützliche Informationen, wenn Sie herausfinden möchten, wie die Dinge zusammenhängen.

Die meisten anderen Konfigurationsparameter sind ziemlich selbsterklärend, z.B.

1
browser_monitoring:
2
  auto_instrument: true
3
capture_params: false

Der einzige andere, der sich bewusst ist, ist:

1
transaction_tracer:
2
  transaction_threshold: apdex_f

Der Transaktions-Tracer erfasst detaillierte Daten zu Anforderungen, die zu lange dauern. Der Transaktionsschwellenwert ist ein Vielfaches (x4) des Apdex-Werts, aber es ist oft nützlich, diese Werte voneinander zu trennen. Möglicherweise sind Sie mit einer Apdex-Punktzahl von einer Sekunde zufrieden, möchten jedoch möglicherweise detaillierte Daten zu Anforderungen erfassen, die 1,5 Sekunden oder länger dauern (anstelle der standardmäßig vier Sekunden oder länger). Sie können diesen Parameter also separat einstellen:

1
transaction_tracer:
2
  transaction_threshold: 1.5

Der New Relic-Entwicklermodus

Einer der Konfigurationswerte, die Sie möglicherweise bemerkt haben, war:

1
developer_mode: true

Dies sollte nur in der Entwicklung (wenn überhaupt) eingeschaltet werden. Im Entwicklungsmodus speichert der New Relic-Agent Leistungsdaten zu den letzten 100 Anforderungen im Speicher. Sie können diese Daten jederzeit anzeigen, indem Sie auf den Endpunkt /newrelic Ihrer laufenden Anwendung klicken:

newrelic_developer_modenewrelic_developer_modenewrelic_developer_mode

Ich benutze es kaum, aber es ist da, wenn Sie es brauchen.


Benachrichtigen eines neuen Relikts von Bereitstellungen

Wenn Sie an der Leistung Ihrer Anwendung arbeiten, ist es immer gut zu wissen, ob sich eine bestimmte Bereitstellung positiv oder negativ auf die Leistung ausgewirkt hat. Zu diesem Zweck können Sie New Relic jedes Mal benachrichtigen, wenn Sie eine Bereitstellung durchführen. Auf diese Weise können Sie bei einer Verschlechterung oder Verbesserung der Leistung feststellen, welche Bereitstellung der Schuldige war. New Relic bietet Capistrano-Hooks, um dies zu tun, aber ich bevorzuge die Befehlszeilenmethode:

1
% newrelic deployments -a 'newrelic_rails1 (Development)' -e 'development' -u 'skorks' -r 'abc123'
2
Recorded deployment to 'newrelic_rails1 (Development)' (2013-09-22 18:19:13 +1000)

Der Schlüssel ist, den Anwendungsnamen korrekt anzugeben, wie in der Datei newrelic.yml konfiguriert.

In den relevanten New Relic-Diagrammen werden schöne Linien angezeigt, die angeben, wann eine Bereitstellung stattgefunden hat.

newrelic_deploymentnewrelic_deploymentnewrelic_deployment

Schlussfolgerung

Sie wissen jetzt viel darüber, wie New Relic funktioniert und wie Sie damit eine Rails-Anwendung überwachen können. Aber die Dinge richtig zu konfigurieren ist nur die halbe Miete. Welche Art von Metriken wird New Relic tatsächlich für Sie erfassen? Und wie können Sie sie verwenden, um die Leistung Ihrer Anwendung zu verbessern? Wir werden einige davon in einem nachfolgenden Artikel betrachten. Probieren Sie New Relic für Ihre Rails App aus (Sie erhalten ein kostenloses T-Shirt). Wenn Sie Fragen haben, vergessen Sie nicht, einen Kommentar zu hinterlassen.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
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.