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.
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:



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



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:



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="text/javascript">var NREUMQ=NREUMQ||[];NREUMQ.push(["mark","firstbyte",new Date().getTime()]);</script> |
4 |
<title>NewrelicRails1</title> |
5 |
<link data-turbolinks-track="true" href="/stylesheets/application.css" media="all" rel="stylesheet" /> |
6 |
<script data-turbolinks-track="true" src="/javascripts/application.js"></script> |
7 |
<meta content="authenticity_token" name="csrf-param" /> |
8 |
<meta content="i5rBPaG52bzM5Kn0SJwIbq6Qz0dG0KsIlcd8tb9vMV8=" name="csrf-token" /> |
9 |
</head>
|
10 |
<body>
|
11 |
|
12 |
<h1>Hello World!</h1> |
13 |
|
14 |
<script type="text/javascript">if (typeof NREUMQ !== "undefined") { if (!NREUMQ.f) { NREUMQ.f=function() { |
15 |
NREUMQ.push(["load",new Date().getTime()]); |
16 |
var e=document.createElement("script"); |
17 |
e.type="text/javascript"; |
18 |
e.src=(("http:"===document.location.protocol)?"http:":"https:") + "//" + |
19 |
"js-agent.newrelic.com/nr-100.js"; |
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(["nrfj","beacon-3.newrelic.com","b9119aa82e","2507356","cglYTRENCF4ERBtZB10KWRYKDABXGQ==",0,21,new Date().getTime(),"","","","",""]);}</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 "production" 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 "production" 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:



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: &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: &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
:



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:



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:



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 "development" 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 "development" 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 "Plugin List": 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 "JRuby version": uninitialized constant NewRelic::EnvironmentReport::JRUBY_VERSION
|
31 |
[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
|
32 |
[09/22/13 17:23:39 +1000 skorks-envato (12925)] DEBUG : EnvironmentReport ignoring value for "Rails threadsafe" 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: "<script type=\\"text/javascript\\">var NREUMQ=NREUMQ||[];NREUMQ.push([\"mark\",\"firstbyte\",new Date().getTime()]);</script>"
|
66 |
[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"
|
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:



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.



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.