New Relic & JMeter - Perfekte Leistungstests

Im Anschluss an die großartigen einleitenden Artikel, die kürzlich bei Nettuts + vorgestellt wurden, wird in diesem Artikel gezeigt, wie Sie New Relic auf die nächste Stufe bringen können. Als Werkzeug zur Leistungsüberwachung ist New Relic fantastisch, aber was ist mit der Leistung? testen, bevor du live gehst. Hier kommt JMeter ins Spiel. In diesem Lernprogramm erfahren Sie, wie wir unsere Anwendung unter realistischer Last testen können, und die Ausgabe von JMeter und New Relic kombinieren, um Ihnen Vertrauen in die Leistung Ihrer Anwendungen zu geben, bevor Sie sie in einer Produktionsumgebung veröffentlichen.

Gesponserter Inhalt

Dieser Inhalt wurde von NewRelic in Auftrag gegeben und vom Tuts + Team geschrieben und / oder bearbeitet. Unser Ziel mit gesponserten Inhalten ist es, relevante und objektive Tutorials, Fallstudien und inspirierende Interviews zu veröffentlichen, die unseren Lesern einen echten erzieherischen Wert bieten und die Erstellung nützlicherer Inhalte ermöglichen.

Warum bis zur Bereitstellung warten, um zu sehen, wie Ihre Anwendung mit dem realen Datenverkehr abschneiden wird? Wenn es in Ihrem Code einen Engpass gibt, der die Benutzererfahrung beeinträchtigt, möchten Sie wirklich, dass der Code live geschaltet wird? Was wäre, wenn wir diese Engpässe frühzeitig finden, die Leistung verbessern und unseren Endbenutzern beim ersten Mal eine großartige Anwendung bieten könnten, und halten Sie dies mit regelmäßigem Benchmarking aufrecht. JMeter und New Relic zusammen können Ihnen diese perfekte Leistungstestsuite bieten.


Demo-Anwendung

Bevor wir New Relic und JMeter einsetzen können, benötigen wir eine einfache App, um Leistungstests durchzuführen! Schreiben wir also eine einfache Ruby Sinatra-App, die einen Dienst enthält, den wir testen können. Ich werde nicht zu viel auf die Erstellung dieser Anwendung eingehen, da Sie Sinatra in anderen Artikeln über Nettuts nachlesen können+.

Die Anwendung wird ein wenig gefälscht, damit wir einige interessante Ergebnisse sehen können, die sich aus den möglichen Anwendungen ergeben. Wir werden einen Dienst schreiben, der eine ID annimmt, und abhängig von dieser ID wird entweder sofort oder mit Verzögerung ein Wert zurückgegeben. Dies zeigt uns, was passieren kann, wenn Anfragen schnell oder langsam bearbeitet werden und welche Auswirkungen dies auf die Gesamtleistung Ihrer Apps hat, da viele Benutzer Anfragen stellen.

Hier ist der Code, der die Dienste definiert:

 erfordern 'sinatra' erfordern 'puma' erfordern 'newrelic_rpm' - Modul Beispielklasse App < Sinatra::Base get '/example/:id' do |id| result = id if id == '1' result = "This is our id: #id" end if id == '2' sleep 3 result = "We waited for id: #id" end result end end end

Wie Sie sehen, handelt es sich hier eindeutig um ein erfundenes Beispiel, aber die Idee ist, dass wir einige schnell reagierende Dienste und eine mit einer kurzen Verzögerung haben. Wir können diese App jetzt verwenden und beginnen, unseren Leistungstestplan in JMeter zu schreiben. Lassen Sie uns zuerst JMeter auf unserer Maschine installieren.


In neues Relikt einhaken

Die Übermittlung Ihrer Anwendungsberichte an New Relic ist ein sehr einfacher Prozess. Neue Relic-Unterstützung für Ruby, Python, PHP, Java und andere Plattformen mit leicht verständlichen Handbüchern für alle. Bei Ruby an Sinatra handelt es sich buchstäblich um einen vierstufigen Prozess:

  • Fügen Sie der GemFile den Edelstein 'newrelic_rpm' hinzu und installieren Sie das Paket..
  • Fügen Sie in Ihrer Hauptanwendung "app.rb", in der wir oben die Serviceroute definiert haben, eine Zeile "Require 'newrelic_rpm" hinzu.
  • Laden Sie die Datei 'newrelic.ini' von Ihrem Konto in New Relic herunter und speichern Sie sie in einem Konfigurationsordner Ihrer App.
    (Stellen Sie sicher, dass der Überwachungsmodus für die Entwicklung auf 'true' gesetzt ist, wenn er lokal ausgeführt wird.)
  • Rüsten Sie Ihre Anwendung auf und sehen Sie sie in New Relic aufgelistet!

Sobald Sie diese einfachen Schritte ausgeführt haben, sollten Sie anfangen, einige Daten zu New Relic zu sehen, wenn Sie Ihre App mit etwas Datenverkehr erreichen. Sie wissen, dass es funktioniert, wenn die App aufgeführt ist und grün wird.


Der Vollständigkeit halber möchte ich nur einen kurzen Überblick über die Hauptansicht geben, die New Relic für Ihre Anwendungen bietet. Das Design von New Relic dient hauptsächlich dazu, Anwendungen zu überwachen, die sich in Produktionsumgebungen mit Live-Verkehr befinden. Auf dem Übersichtsbildschirm erhalten Sie einen Überblick über den aktuellen Status Ihrer Anwendung und wie sie auf Kundenanfragen reagiert.

Der Bildschirm kann wie folgt unterteilt werden:

  1. Reaktionszeit - Dies ist die durchschnittliche Antwortzeit von Anrufen in Ihrer Anwendung.
  2. Apdex - Neue Relics-Metrik für das Kundenerlebnis. Eine Punktzahl in Richtung 1 zeigt die große Mehrheit der Benutzer an
    Anfragen fallen innerhalb einer angemessenen Zeit. Der Apdex kann hilfreich sein, wenn eine eingestellte Anzahl unterschritten wird.
  3. Durchsatz - die Anforderungen pro Minute (RPM) an Ihre Anwendung.
  4. Web-Transaktionen - die verschiedenen Routen, auf die in Ihrer Anwendung zugegriffen wird. Diese werden nach den zeitaufwendigsten Anfragen geordnet.
  5. Fehlerrate - Der Prozentsatz der Anforderungen, die einen Fehler verursachen. Sie können hier einzelne Fehler durchklicken und debuggen.


Was ist JMeter??


JMeter ist eine Java-Anwendung, mit der Sie Testpläne erstellen können, mit denen Ihre Anwendung getestet werden kann. Sie können alles einstellen, von der Anzahl der gleichzeitigen Benutzer des Dienstes bis zur Anzahl der Anfragen, die sie pro Sekunde stellen. Sie können sogar die Anforderungen erhöhen, um zu sehen, wie Ihre App mit der sich ändernden Last umgeht, genau wie in der realen Bereitstellung.

Im Rahmen dieses Tutorials werde ich die Grundlagen für das Ausführen eines Testplans für Ihre Anwendungen zeigen. Mit einer Fülle von Plug-Ins und Dokumentation gibt es eine Vielzahl von Tools, mit denen Sie jegliche Art von Leistungstests durchführen können, die Sie benötigen.


Installation und Verwendung

Die Installation ist ziemlich unkompliziert und hier werden Anweisungen für Mac und Linux aufgeführt.

Mac OS X

Auf einem Mac kann JMeter sehr einfach über Brew installiert werden. Sobald Sie brauen, versuchen Sie das
folgenden Befehl:

 Brühen Sie Jmeter installieren

Linux

Laden Sie auf einem Linux-Computer einfach die JMeter-Downloadseite herunter. Folgen Sie dann einfach den Anweisungen.

Alle Plattformen

Nachdem Sie das JMeter-Hauptpaket erworben haben, müssen wir auch die Standard-Plugins installieren. Wir werden später insbesondere ein Plugin verwenden, daher müssen wir dieses hinzufügen, um es verwenden zu können. Das Standard-Plugin-Set kann über diesen Link abgerufen werden: http://jmeter-plugins.org/downloads/file/JMeterPlugins-1.0.0.zip Nach dem Herunterladen des Extrakts in das JMeter-Paket, das sich unter "/ usr / local /" befindet. Cellar / jmeter / "auf einem Mac und wo auch immer Sie es installiert haben unter Linux.


Analyse in einem neuen Relikt - Zuerst benötigen wir einen JMeter-Testplan!

Nun haben wir JMeter und unsere einfache Anwendung installiert. Lassen Sie uns diese App testen und sehen, wie sie funktioniert. Wenn Sie JMeter einschalten, erhalten Sie diesen Bildschirm:

Nun legen wir die Basis-URL für unsere Anfragen fest. Klicken Sie mit der rechten Maustaste auf "Versuchsplan" Klicken Sie im linken Bereich auf und wählen Sie "Hinzufügen -> Konfigurationselement -> HTTP-Anforderungsvorgabe". Wir können jetzt wie hier unsere Basis-URL eingeben.


Wir können jetzt die Anzahl der Threads oder "Benutzer" unseres Systems hinzufügen. Klicken Sie dazu mit der rechten Maustaste auf "Versuchsplan" wieder und wähle "Hinzufügen -> Threads (Benutzer) -> Thread-Gruppe". Wir können dann die Benutzer eingeben, in diesem Fall 20. Stellen Sie sicher, dass Sie die Option für die Anzahl der Endlosschleifen auswählen, da wir später die Zeit und die Anzahl der Anfragen über ein Plugin steuern können.


Sobald wir die Thread-Gruppe haben, können wir nun die Anforderungen definieren, die wir an unsere Anwendung stellen möchten, und die Leistungstests durchführen. Dazu fügen wir unserem "Testplan" "HTTP Request" hinzu. Dies kann durch Rechtsklick auf das Symbol gefunden werden "Thread-Gruppe" und wählen "Hinzufügen -> Sampler -> HTTP-Anforderung". Wir können dann die Anfrage im Fenster wie unten definiert definieren.


Sie können sehen, wie wir die Basis-URL nicht definieren müssen, wie wir dies zuvor getan haben, und müssen stattdessen nur den Pfad für die Anforderung hinzufügen. In diesem Fall führt der Pfad zu unserer Antwort 'example / 1'. Sie werden auch bemerken, dass ich die beiden anderen Anforderungen zusammen mit den Ergebnis- und Grafikfenstern hinzugefügt habe, anhand derer wir die Ergebnisse der Tests analysieren. Sie sollten sich jetzt mit dem Hinzufügen von Elementen auskennen und sie können leicht im Menü anhand ihrer Namen gefunden werden. Die zwei wichtigsten von Interesse sind der "Throughput Shaping Timer" und der "Composite Graph"..

Mit dem Shaping-Timer können wir abbilden, wie die Anfragen im Laufe der Zeit an unsere Anwendung gesendet werden sollen. Zum Beispiel können wir eine Anforderung pro Sekunde für 60 Sekunden konfigurieren, dann für fünf Sekunden bis zu fünf Anforderungen pro Sekunde hochfahren und sehen, wie sich dies auf unsere Antwortzeiten auswirkt. Schauen wir uns an, wie wir das im Bereich Shaping Timer konfigurieren.


Wenn Sie also jede Zeile hinzufügen und hinzufügen, können Sie den Umfang der Anforderung festlegen und für wie lange dies geschehen soll. Anschließend können wir unsere Ergebnisse mit dem "Composite Graph" anzeigen, der die pro Sekunde durchgeführten Transaktionen gegen die Antwortzeit unserer Anfragen zeigt. Dies erfordert eine minimale Konfiguration. Fügen Sie einfach die beiden Diagramme hinzu, die wir kombinieren möchten, und fügen Sie dann in den Einstellungen für das zusammengesetzte Diagramm die erforderlichen Diagramme hinzu:


Das ist es! Wir können jetzt unseren Testplan ausführen und einige Ergebnisse sehen. Drücken Sie play zum oberen Rand des Bildschirms und klicken Sie dann auf das zusammengesetzte Diagramm. Die Ergebnisse werden sofort angezeigt, und Sie können ein Bild davon erhalten, wie Ihre Anwendung reagiert. Schauen wir uns unsere Ergebnisse an.


Wir können deutlich erkennen, dass der Sprung bei den Anforderungen innerhalb einer Minute einen ziemlich großen Einfluss auf unsere Anwendung hat. In der ersten Minute sind die Anforderungen bei eins pro Sekunde stabil und geben Antwortzeiten von etwa zwei / drei ms. Wenn wir jedoch auf fünf steigen, steigen die Antwortzeiten leicht an und erreichen fünf und fünf m / s. Offensichtlich sind dies sehr schnelle Reaktionszeiten in der realen Welt, aber wir zeigen hier nur, wie wir die Last erhöhen und den Einfluss sehen können, falls dies einer hat.

Vergleichen wir diese Ergebnisse mit dem Dienst, der drei Sekunden verzögert. Wie wird das mit der Laststeigerung fertig werden? Um zu Beispiel 2 zu wechseln, klicken Sie mit der rechten Maustaste auf Beispiel 1 und wählen Sie "Toggle". Dadurch wird diese Anforderung deaktiviert, und Sie können dann in Beispiel 2 umschalten, um sie zu aktivieren. Klicken Sie auf das Symbol "Alles löschen" (Sweeping Brush) -Symbol oben, um die Ergebnisse des letzten Laufs zu löschen, und klicken Sie dann auf play.


Trotz der Verzögerung von drei Sekunden hat der Server die Anforderungen ziemlich gut gemanagt, und wir sehen die Ergebnisse für diesen Dienst ähnlich. Nur wenige Millisekunden nehmen zu, wenn die Anforderungen steigen. Mit einem so einfachen Service ist dies zu erwarten.


Neue Relic Analytics

Die wahre Stärke liegt jetzt in der Kombination dieser Daten mit New Relic. Wir könnten beispielsweise festlegen, dass JMeter für eine halbe Stunde mit unterschiedlichen Lastvariationen ausgeführt wird. Anschließend können Sie mit New Relic die Ergebnisse analysieren und mithilfe der Drilldown-Funktion nach Engpässen in der Anwendung suchen. Diese können dann optimiert werden, um Ihre Leistung zu steigern, bevor Sie sie an Ihre Kunden liefern.

Ich werde auch hier nicht auf die Einrichtung von New Relic eingehen, da dies in anderen kürzlich erschienenen Artikeln über Nettuts + (siehe hier) behandelt wird. Sobald Ihre Anwendung verbunden ist, müssen Sie lediglich die Last über JMeter generieren und sich in New Relic anmelden, um die Ergebnisse zu sehen. Für diesen Lauf habe ich den Shaping-Timer so eingerichtet, dass unsere Last für 30 Minuten ausgeführt wird, wobei die Anforderungen von fünf auf 10 und dann auf 15 pro Sekunde erhöht werden. Dies sollte uns in New Relic einen angemessenen Traffic bieten.


Sobald der JMeter-Test ausgeführt wurde, können wir einen Blick in New Relic werfen, wo nun der Status der durch die App folgenden Daten angezeigt wird.


Dies zeigt deutlich das Ansteigen der Anforderungen, wobei in der Spitze etwa 400 Anfragen pro Minute (U / min) erreicht werden und die Antwortzeiten bei drei Sekunden stabil bleiben. Wir können tiefer in die Statistiken eintauchen und die Transaktion betrachten, die wir tätigen. Wenn Sie zur Web-Transaktionsansicht klicken, können Sie sehen, welche Analyse New Relic gerade für diesen Teil der Anwendung durchgeführt hat. Wenn der Code, der die Anforderung abwickelte, mehr Ebenen hatte, z. B. Methoden, um andere Systeme aufzurufen, um Daten abzurufen, bevor sie dem Benutzer wieder angezeigt werden, würde dies eher zu einer Störung führen.

Auf der linken Seite wird beispielsweise angezeigt, dass wir 100% der Anforderungszeit in diesem Anruf verbracht haben. Wenn wir mehrere Schritte hatten, z. B. einen Aufruf an eine Datenbank, könnte es dort einen hohen Prozentsatz geben und wir könnten die Abfrage an die Datenbank optimieren, um die Leistung zu steigern.


New Relic bietet auch eine großartige Berichtansicht zu Ihren Anwendungsdaten, die als Skalierbarkeit bezeichnet wird. Dieser Bericht kann sehr nützlich sein, um die Fähigkeit Ihrer Anwendungen zur Bewältigung der steigenden Last zu überwachen. Das Diagramm zeigt Ihre Antwortzeit im Vergleich zu den Anforderungen pro Minute. Sie können deutlich sehen, ob die Antwortzeit abnimmt, wenn sich die Antwortzeit erhöht. Dies ist ein hervorragendes Werkzeug, auf das Sie sich häufig sowohl bei Leistungstests wie auch bei der Leistungsüberwachung Ihrer Produktionsanwendung beziehen sollten.

In unserem nachstehenden Beispiel ist es klar, dass die Anwendung eine Antwortzeit von drei Sekunden aufrechterhalten kann, selbst wenn die Drehzahl steigt.


New Relic bietet auch eine andere Ansicht, die Kapazität. Auf diese Weise können wir sehen, wie viele Ressourcen unserer Anwendung zur Verfügung stehen. Dem Entwickler wird angezeigt, ob die Anzahl der Instanzen, die Ihre Anwendung bedienen, ausreicht, um die Art der Last zu handhaben, die Sie erhalten. Dies ist wichtig, um sicherzustellen, dass Sie sich nicht in der Nähe der Kapazität befinden und die Möglichkeit haben, Verkehrsspitzen zu bewältigen, die außerhalb Ihres normalen Verkehrsflusses auftreten können. New Relic fasst die Seite gut zusammen, neben der Analyse unserer Anwendung hier, die sich auch in diesem Einzelfall als gut erweist.



Fazit

Das Ziel dieses Tutorials war es, Ihnen zu zeigen, wie Sie JMeter-Testpläne für Ihre Anwendung schnell einrichten können. So können Sie die Leistung Ihrer Anwendung testen, bevor Sie sie an Ihre Kunden liefern. Dieser Ansatz kann in neuen Projekten verwendet werden, um sicherzustellen, dass die von Ihnen zu liefernde Anwendung für den realen Verkehr bereit ist. Es kann auch für ältere Anwendungen verwendet werden. Dadurch erhalten Sie einen Basisindikator für die Leistungsindikatoren. Wenn Sie Änderungen vornehmen, können Sie sehen, ob sich die Leistung Ihrer Anwendung verbessert oder verringert.

Durch die Nutzung der großartigen Tools von New Relic können Sie Ihre Anwendung online in Echtzeit überwachen, aber auch das Toolset nutzen und auf Ihre eigene Offline-Analyse anwenden. Dies gibt Ihnen, dem Entwickler, Vertrauen in Ihr Produkt, während es entwickelt wird und wenn es in die freie Wildbahn gebracht wird.