Überwachen Sie Ihre Android App mit New Relic

So interessant Web-Anwendungen auch sind, sie sind nicht das einzige Spiel in der Stadt. Heutzutage sind mobile Anwendungen ein wesentlicher Bestandteil der Softwareentwicklungslandschaft. Genau wie bei Web-Apps möchten wir, dass unser Code für mobile Anwendungen performant ist.

Glücklicherweise hat New Relic sich in den letzten ein oder zwei Jahren sehr darauf konzentriert, eine Lösung für die Überwachung der Leistung Ihrer mobilen Apps zu entwickeln. Heute werden wir uns ansehen, wie Sie mit New Relic die Leistung einer Android-Anwendung überwachen können.

Warum überhaupt mobile Apps überwachen??

Das Tolle beim Erstellen einer Web-App ist, dass Sie jederzeit eine neue Version bereitstellen können zwingen Ihre gesamte Benutzerbasis, um Ihren neuen Code zu verwenden. Wenn Sie also Ihren Code vorher nicht überwacht haben, können Sie einfach New Relic anschließen oder sich etwas Eigenes anfertigen, ausdrücken und innerhalb weniger Minuten Messwerte abrufen.

Mit mobilen Apps sind Sie nicht so glücklich. Sie können natürlich jederzeit eine neue Version freigeben, der Prozess ist jedoch möglicherweise eine längere Genehmigung für den App Store. Und selbst wenn Ihre neue Version verfügbar ist, können Sie Ihre Benutzer nicht zwingen, ein Upgrade durchzuführen. Es ist daher wichtig, über jede Art von Überwachung nachzudenken, die Sie möglicherweise durchführen möchten, bevor Sie die erste Version Ihrer App veröffentlichen.

Selbst wenn Sie sich nicht eine Weile mit der Leistung Ihrer App beschäftigen müssen, ist Ihre Überwachungslösung bereits vorhanden, Sie müssen jedoch nur noch mit der Interpretation der Metriken beginnen.

Außerdem ist es heutzutage eine seltene mobile App, die keine Webkomponente enthält. Fast jede Anwendung stellt heutzutage HTTP-Anforderungen an eine API - und oft viele verschiedene APIs.

Wie wir wissen, sind Netzwerkanrufe nicht immer die zuverlässigsten Dinge. Es wäre großartig, wenn wir herausfinden könnten, wie oft API-Aufrufe für unsere Benutzer fehlschlagen, und was noch wichtiger ist, wie langsam unsere API-Aufrufe im Durchschnitt sind. Nur so können Sie feststellen, ob unsere Benutzer gute Erfahrungen mit unserer Anwendung machen oder ob sie durch Verzögerungen frustriert sind.

Wenn Sie Ihre Anwendung nicht überwachen, können Sie nur über diese Art von Daten raten. Ich weiß nicht, wie es Ihnen geht, aber ich fühle mich mit kalten harten Daten viel wohler.

Es gibt viele andere wichtige Fragen, die eine gute Überwachungslösung bei der Beantwortung helfen kann, aber wir können diese Fragen abdecken, während wir mit unserer Android-Anwendung arbeiten.

Erstellen einer grundlegenden Android-App

Normalerweise konzentriere ich mich für einen einleitenden Artikel wie diesen hier auf das Thema, das in diesem Fall New Relic für Handys verwendet wird, und behält den Rest des Codes als Hallo Welt wie möglich.

Es ist leicht eine zu bauen Hallo Welt Android App, Google hat sogar ein Tutorial darüber. Leider ist diese App nur ein bisschen auch Basic. Über das Netzwerk werden keine Anrufe getätigt. Das bedeutet, dass wir keinen großen Teil der Angebote von New Relic für das Monitoring mobiler Apps betrachten können. Also werden wir unsere Basis-App leicht modifizieren. 

Unsere App wird über zwei Bildschirme verfügen. Auf dem ersten Bildschirm können wir ein Twitter-Handle eingeben und es einreichen. Zu diesem Zeitpunkt wird unsere App zum zweiten Bildschirm mit Platzhaltertext angezeigt. In der Zwischenzeit geht unsere Anwendung zu Twitter und holt den neuesten Tweet für dieses Handle ab. Sobald der Tweet verfügbar ist, aktualisieren wir den zweiten Bildschirm, um ihn anzuzeigen. Die App ist immer noch ziemlich einfach, aber hoffentlich ist sie so komplex, dass wir einige interessante Daten von New Relic erhalten können.

Ich werde nicht durch die Einrichtung der gesamten Anwendung gehen, aber hier sind die interessanten Teile. Wenn Sie im Google-Tutorial auf die Schaltfläche auf dem ersten Bildschirm drücken, wird der Wert des Textfelds an den zweiten Bildschirm weitergegeben. In unserem Fall handelt es sich jedoch um ein Twitter-Handle:

public void sendMessage (Ansichtsansicht) Intent Intent = New Intent (Dies DisplayMessageActivity.class); EditText editText = (EditText) findViewById (R.id.edit_message); String message = editText.getText (). ToString (); intent.putExtra (EXTRA_MESSAGE, Nachricht); startActivity (Absicht); 

Auf dem zweiten Bildschirm möchten wir den neuesten Tweet für dieses Handle abrufen. Aber wir können das nicht machen UIThread, wir brauchen eine AsyncTask. Wir werden einen erstellen und ihn im Inneren starten onCreate Methode der zweiten Aktivität:

@Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_display_message); setupActionBar (); String handle = getIntent (). GetStringExtra (MainActivity.EXTRA_MESSAGE); TextView textView = new TextView (this); textView.setTextSize (40); new FetchLatestTweetTask (textView, handle) .execute (); // Setze die Textansicht als Aktivitätslayout setContentView (textView);  

Die eigentliche Aufgabe sieht so aus:

Die öffentliche Klasse FetchLatestTweetTask erweitert AsyncTask private TextView TextView; privater String-Griff; public FetchLatestTweetTask (TextView textView, String-Handle) this.textView = textView; this.handle = Handle;  @Override protected String doInBackground (Void… args) Twitter twitter = new TwitterFactory (). GetInstance (); String status = null; try User user = twitter.showUser (Handle); status = user.getStatus (). getText ();  catch (Ausnahme e) e.printStackTrace ();  Rückgabestatus;  protected void onPreExecute () textView.setText (String.format ("Tweet wird von @% s abgerufen ...", handle));  protected void onPostExecute (Zeichenfolge-Tweet) textView.setText (Tweet); 

Wir zeigen etwas Platzhaltertext an, bevor wir den Tweet abrufen, und aktualisieren den Platzhaltertext mit dem Inhalt des Tweets, nachdem wir ihn abgerufen haben. Wir verwenden Twitter4J, um mit der Twitter-API zu sprechen. Damit die API-Bibliothek funktioniert, habe ich einen Speicherauszug erstellt twitter4j.properties Datei in der / src Ordner des Projekts, damit es gemäß der Dokumentation auf dem Klassenpfad landet. 

Die Eigenschaftendatei enthält den OAuth-Consumer-Key, das Consumer-Secret, den Access-Token-Schlüssel und das Access-Token-Secret für die Twitter-App, die ich eigens dafür eingerichtet habe.

Dies ist der gesamte interessante Code in unserer Anwendung. Der Rest ist nur eine generische Boilerplate, wie in der Google-Einführung beschrieben.

Einrichten eines neuen Relikts für Sie App

Das Einrichten von New Relic zum Starten der Überwachung Ihrer Android-App ist sehr einfach. Klicken Sie in Ihrem New Relic-Konto auf Handy, Mobiltelefon im menü. Hier werden alle Ihre mobilen Apps leben, genau wie die Web-Apps unter Anwendungen Menüpunkt.

Klicken Sie jetzt auf Neue App hinzufügen Taste:

Dadurch gelangen Sie zu einem anderen Bildschirm, auf dem New Relic Sie durch das Einrichten einer neuen App führt:

Wir klicken auf Android und gib unserer App einen Namen. Wenn Sie Ihrer App einen Namen gegeben haben, müssen Sie drücken Fortsetzen damit generiert New Relic einen neuen API-Schlüssel für Ihre Anwendung.

Als Nächstes müssen wir den New Relic-Agenten installieren. Ich benutze Eclipse, also gehe ich zu Hilfe> Neue Software installieren… und fügen Sie New Relic als Site hinzu:

Klicken Nächster und warten Sie, bis Eclipse sein Ding macht. Sobald dies erledigt ist, müssen Sie Eclipse neu starten. An diesem Punkt sollten Sie in der Lage sein, in Eclipse mit der rechten Maustaste auf Ihr Projekt zu klicken, und es sollte ein Installieren Sie New Relic Menüoption. Wenn wir darauf klicken, landet der New Relic-Agent in der / libs Ordner unseres Projekts.

Wenn eine neue Version des New Relic-Agenten erscheint, aktualisieren Sie diese übrigens auf die gleiche Weise. Zuerst tun Hilfe> Nach Updates suchen um die neuesten Updates zu erhalten. Danach klicken Sie einfach mit der rechten Maustaste auf Ihr Projekt und es sollte ein Neues Relikt aktualisieren Menüoption, bei der die New Relic-Dose aktualisiert wird, wenn Sie darauf klicken:

Jetzt müssen wir unserer App Berechtigungen erteilen INTERNET und ACCESS_NETWORK_STATE da New Relic Daten an ihre Server zurücksenden muss. Unsere AndroidManifest.xml sieht so aus:

     

Jetzt müssen wir nur noch den Agenten starten. In unserer MainActivity.java Wir importieren New Relic:

import com.newrelic.agent.android.NewRelic;

Dann starten wir den Agenten im onCreate Methode:

protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); NewRelic.withApplicationToken ("XXXXXXXXXXXXXXXXXXX"). Start (this.getApplication ()); 

Beachten Sie das Anwendungstoken. Wenn Sie gedrückt haben Fortsetzen Wenn Sie Ihrem Antrag einen Namen gegeben haben, sollte dieser für Sie bereits ausgefüllt sein. Sobald Ihre App läuft, können Sie sie in der App immer wieder nachschlagen die Einstellungen Menü für Ihre Anwendung.

Nach diesem Schritt erstellen wir das Projekt und stellen es auf einem Emulator oder einem physischen Gerät bereit. Ich bevorzuge die Bereitstellung auf einem Testgerät, da es meiner Meinung nach schneller, reaktionsschneller und einfacher zu handhaben ist. Ich werde mein Nexus 4 verwenden.

Wenn wir uns die Registerkarte "LogCat" ansehen, während die Anwendung bereitgestellt wird, sollten Sie eine Ausgabe ähnlich der folgenden sehen:

02-23 17: 25: 17.004: I / com.newrelic.agent.android (25592): Geladene Konfiguration: HarvestConfiguration collect_network_errors = true, cross_process_id = "null", data_report_period = 60, data_token = [0, 0], error_limit = 0, stack_trace_limit = 100, activity_trace_max_size = 65534, activity_trace_max_report_attucks = 1, activity_trace_max_report_attucks = 1, activity_trace_max_size = 655, activity_trace_max_size = 655, activity_trace_max_size = 655, : 17.054: I / com.newrelic.agent.android (25592): Die Anwendungsstatusüberwachung wurde gestartet 02-23 17: 25: 17.104: I / com.newrelic.agent.android (25592): Measurement Engine wurde initialisiert. 02-23 17: 25: 17.114: I / com.newrelic.agent.android (25592): New Relic Agent v3.264.0

So wissen wir, dass New Relic geladen hat. Wenn wir uns dann LogCat ansehen, werden wir ungefähr jede Minute so etwas sehen:

02-23 17: 55: 40.410: I / com.newrelic.agent.android (31413): Harvester: verbunden 02-23 17: 55: 40.410: I / com.newrelic.agent.android (31413): Harvester: Senden 2 HTTP-Transaktionen. 02-23 17: 55: 40.410: I / com.newrelic.agent.android (31413): Harvester: Senden von 0 HTTP-Fehlern. 02-23 17: 55: 40.410: I / com.newrelic.agent.android (31413): Harvester: Senden von 0 Aktivitätsspuren.

New Relic ruft nach Hause an, um Daten zu senden. Wenn wir jetzt zur Benutzeroberfläche von New Relic zurückkehren, sollten wir Daten sehen.

Erkunden der Dashboards

Wenn Sie sich Ihre App in New Relic ansehen, schlagen Sie zuerst die Überblick Bildschirm. Ähnlich wie im Übersichtsbildschirm der Webanwendung werden hier einige wichtige Kennzahlen zu Ihrer App angezeigt, z HTTP-Antwortzeit, Langsamste Interaktionen, usw.

Die Aktivität in diesen Diagrammen ist sporadisch, da nur ein Client Daten zurücksendet und nur wenige Interaktionen durchgeführt wurden.

Was sind nun einige der interessantesten Dinge, die Sie in New Relic für Ihre mobile App sehen können? Nun, da ist die App> Geräte Registerkarte, auf der angezeigt wird, auf welchen Geräten Personen Ihre App verwenden Dies ist interessant, da Sie auf einen Blick erkennen können, welche Art von Telefonen / Tabellen die meisten Ihrer Benutzer verwenden. Befinden sich die meisten auf älteren oder neueren Geräten? Sind sie meistens auf Tablets oder Handys? Dies sind wertvolle Daten.

Sie können sich die einzelnen Geräte genauer ansehen und sehen, wie gut Ihre App dort funktioniert. Ist die Interaktionszeit für dieses Gerät langsamer als erwartet? Was ist mit der HTTP-Antwortzeit? Wie viele aktive Benutzer verwenden derzeit Ihre App auf diesem Gerätetyp? In unserem Fall:

Es gibt nur ein Gerät, daher ist nicht viel zu sehen. Wenn sich jedoch ein Großteil Ihrer Benutzerbasis auf einem Gerät befand, auf dem Ihre App nicht besonders gut lief, würden Sie dies sofort sehen und könnten das Problem beheben.

Ähnlich wie Geräte Registerkarte gibt es die Betriebssystemversionen Tab, der die Verwendung Ihrer App nach der von Ihren Benutzern installierten Android-Version einschränkt:

Sie können feststellen, ob Sie sich stärker auf neuere Android-Versionen konzentrieren müssen oder ob der größte Teil Ihrer Benutzerbasis noch auf einer älteren Version basiert.

Dann gibt es noch die Netzwerk Tab und seine Kinder. In dem Karte Auf dieser Registerkarte können Sie sehen, mit welchen APIs sich Ihre App verbindet und wie gut sich jede von ihnen verhält. Was ist der Durchsatz, die Antwortzeit und die Fehlerrate?

In unserem Fall haben wir nur die Twitter-API und sie ist eigentlich ziemlich langsam. Vielleicht sollten wir überlegen, einige Antworten für eine gewisse Zeit im Cache zu speichern.

In dem Netzwerke> HTTP-Anforderungen Auf dieser Registerkarte können wir jeden Endpunkt jeder von uns verwendeten API auf ähnliche Weise untersuchen, wie wir bei Geräten und Betriebssystemversionen einen Drilldown durchführen. Wir können herausfinden, welche Endpunkte am meisten benutzt werden und welche am langsamsten sind. Dies gibt uns einige Anhaltspunkte, wohin unsere Optimierungsbemühungen gerichtet werden sollen. Dies gilt insbesondere, wenn wir auch die verwendeten APIs kontrollieren.

In dem Netzwerk> Geographie Auf der Registerkarte können Sie feststellen, woher die meisten Benutzer kommen und in der Träger Auf dieser Registerkarte können Sie sehen, welche Art von Internetverbindung Ihre Benutzer haben. In unserem Fall bin ich auf Wi-Fi:

Es ist sehr wichtig zu wissen, ob Ihre Benutzerbasis Wi-Fi, 3G oder 4G verwendet, da Ihre Optimierungsanstrengungen je nach Ausfall völlig unterschiedlich sein können.

Unter Einstellungen> Benachrichtigungen, Sie können auch einige Bedingungen für Ihre externen APIs für New Relic definieren, um Sie zu benachrichtigen, wenn Antwortzeiten einen bestimmten Schwellenwert überschreiten oder wenn die Fehlerquote einen bestimmten Prozentsatz überschreitet.

Dies ist möglicherweise für APIs, die Sie nicht kontrollieren, möglicherweise weniger wertvoll, aber immer noch ein guter Indikator, wenn eine von Ihnen verwendete API instabil oder nicht sehr performant ist.

Die letzten beiden interessanten sind Verwendung> Versionen und Verwendung> Monatliche Unikate. Die erste zeigt Ihnen, welche Versionen Ihrer App in freier Wildbahn verwendet werden. So können Sie feststellen, wie eifrig die Benutzer Updates Ihrer App herunterladen. Es zeigt Ihnen auch, wie gut jede Version Ihrer App auf dem Gerät funktioniert. Verwendet die neue Version mehr Speicher als die vorherige Version??

Die monatlichen Uniques geben Ihnen im Grunde eine Idee, ob Personen tatsächlich mit Ihrer App interagieren. Sie haben vielleicht 10 Millionen Downloads, aber wenn die Anzahl der monatlichen Uniques gering ist, sind die Dinge nicht so groß, wie es scheint.

Fazit

Dies ist eine grundlegende Übersicht über einige, aber nicht alle interessanten Funktionen von New Relic für Android-Apps. An und für sich ist keine der Funktionen umwerfend, aber es sind gute solide Daten, die für eine mobile App nicht anders möglich sind.

Wie Ihre App verwendet wird und auf welchen Geräten, wie gut Ihre Netzwerkanrufe bei einer langsamen Verbindung ablaufen, dies sind die Datentypen, die Sie dazu zwingen, das Raten zu beenden und fundierte Entscheidungen darüber zu treffen, wie Sie Ihre App verbessern und Ihren Benutzern einen besseren Zugriff geben können bessere Erfahrung.

Denken Sie daran, dass Leistung für mobile Apps genauso wichtig ist wie für Web-Apps. Es gibt keinen Grund zu raten, was Ihre App langsam macht, wenn es einen viel besseren Weg gibt, der sofort verfügbar ist.