Använda New Relic för att övervaka din Android App

Så intressant som webbapplikationer är de inte det enda spelet i stan. Dessa dagar är mobila applikationer en stor del av programutvecklingslandskapet. Precis som med webbapps, vill vi att vår mobilprogramkod ska vara effektiv.

Lyckligtvis har New Relic under det senaste året eller två fokuserat hårt på att bygga upp en lösning för att övervaka prestanda för dina mobilappar. Idag ska vi titta på hur du kan börja använda New Relic för att övervaka prestanda för en Android-applikation.

Varför Övervaka Mobila Apps alls?

Det fantastiska med att bygga en webbapp är att du alltid kan distribuera en ny version direkt tvingar hela din användarbas för att använda din nya kod. Så om du inte övervakade din kod innan kan du enkelt koppla in New Relic eller hacka upp något anpassat, trycka ut det och börja få mätvärden inom några minuter.

Med mobilappar är du inte så lycklig. Du kan självklart släppa en ny version när som helst du vill, men processen kan eventuellt längre godkännas av appbutiken. Och även när din nya version finns ute kan du inte tvinga dina användare att uppgradera. Det är därför viktigt att tänka på vilken typ av övervakning du kanske vill göra innan du släpper den första versionen av din app.

Även om du inte behöver oroa dig för din apps prestanda en stund, så kommer din övervaknings lösning redan att vara på plats, du behöver bara börja tolka mätvärdena.

Dessutom är det en sällsynt mobilapp dessa dagar som inte heller har en webbkomponent till den. Nästan varje applikation gör dessa dagar HTTP-förfrågningar till ett API- och ofta många olika API.

Som vi vet är nätverkssamtal inte alltid de mest tillförlitliga sakerna. Det skulle vara bra om vi kunde ta reda på hur ofta API-samtal misslyckas för våra användare och, ännu viktigare, hur långsamma våra API-samtal är i genomsnitt. Det är det enda sättet att veta om våra användare har en bra upplevelse med vår ansökan eller om de blir frustrerade av lag.

Om du inte övervakar din ansökan kan du bara gissa om den här typen av saker. Jag vet inte om dig, men jag är oftast mycket bekvämare med kalla hårda data.

Det finns många andra viktiga frågor som en bra övervakningslösning kan hjälpa oss att svara på, men vi kan täcka dem när vi arbetar med vår Android-applikation, så låt oss få sprickbildning.

Bygga en grundläggande Android App

Normalt vill jag, för en introduktionsartikel som den här, fokusera på ämnet, i det här fallet New Relic for mobile-och behåll resten av koden som Hej världen som möjligt.

Det är lätt att bygga en Hej världen Android app, Google har även en handledning om det. Tyvärr är det bara en liten app för grundläggande. Det gör inga nätverkssamtal, vilket innebär att vi inte skulle kunna titta på en stor del av vad New Relic erbjuder för mobilappsövervakning. Så, vi ändrar lite vår grundläggande app. 

Vår app kommer att ha två skärmar, på den första skärmen kommer vi att kunna skriva in ett Twitter-handtag och skicka in det. Vid denna tidpunkt kommer vår app att gå till den andra skärmen och visa lite platshållartekst. Under tiden kommer vår ansökan att gå vidare till Twitter och hämta den senaste tweeten för det handtaget. När tweeten är tillgänglig uppdaterar vi den andra skärmen för att visa den. Appen är fortfarande ganska grundläggande, men förhoppningsvis är den komplex nog att vi kan få några intressanta data från New Relic.

Jag ska inte gå igenom hela applikationen, men här är de intressanta delarna. Enligt Google-handledning, när vi trycker på knappen på den första skärmen, kommer den att passera längs värdet av textfältet till den andra skärmen, men i vårt fall kommer det att vara ett Twitter-handtag:

public void sendMessage (View view) Intent intention = new Intent (detta, DisplayMessageActivity.class); EditText editText = (EditText) findViewById (R.id.edit_message); String message = editText.getText (). ToString (); Intent.putExtra (EXTRA_MESSAGE, meddelande); startActivity (intent); 

På den andra skärmen vill vi hämta den senaste tweeten för det handtaget. Men vi kan inte göra det på UIThread, vi behöver en AsyncTask. Vi skapar en och sparkar av den inuti onCreate Metod för den andra aktiviteten:

@Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_display_message); setupActionBar (); Stringhandtag = getIntent (). GetStringExtra (MainActivity.EXTRA_MESSAGE); TextView textView = new TextView (this); textView.setTextSize (40); ny FetchLatestTweetTask (textView, handle) .execute (); // Ange textvyn som aktivitetslayouten setContentView (textView);  

Den verkliga uppgiften ser så här ut:

offentlig klass FetchLatestTweetTask utökar AsyncTask privat TextView textView; privat stränghandtag; offentlig FetchLatestTweetTask (TextView textView, String handtag) this.textView = textView; this.handle = handle;  @Override protected String doInBackground (Void ... args) Twitter twitter = ny TwitterFactory (). GetInstance (); Stringstatus = null; prova User user = twitter.showUser (handtag); status = user.getStatus (). getText ();  fångst (Undantag e) e.printStackTrace ();  returstatus  skyddad tomgång onPreExecute () textView.setText (String.format ("Hämta tweet av @% s ...", hantera));  skyddad tomgång onPostExecute (String tweet) textView.setText (tweet); 

Vi visar en del platsinnehåll innan vi hämtar tweet och uppdaterar platshållarteksten med tweets innehåll efter att vi har hämtat det. Vi använder Twitter4J för att prata med Twitter API. För att API-biblioteket ska fungera har jag dumpat a twitter4j.properties fil i / src mapp på projektet så att det slutar på klassväg enligt dokumentationen. 

Egenskapsfilen innehåller OAuth-konsumentnyckel, konsumenthemlig, access token-nyckel och åtkomsttoken hemlighet för Twitter-appen som jag ställde in just för detta.

Det här är all den intressanta koden i vår ansökan, resten är bara generisk panna enligt den inledande Google-handledningen.

Konfigurera ny relik för dig App

Att installera New Relic för att börja övervaka din Android-app är väldigt enkelt. Klicka på i ditt New Relic-konto Mobil i menyn. Här kommer alla dina mobilappar att leva, precis som webbapparna lever under tillämpningar menyalternativ.

Klicka nu på Lägg till en ny app knapp:

Detta tar dig till en annan skärm där New Relic kommer att gå dig genom att konfigurera en ny app:

Vi klickar på Android och ge vår app ett namn. När du har fått ditt namn ett namn måste du trycka på Fortsätta så att New Relic genererar en ny API-nyckel för din ansökan.

Därefter måste vi installera New Relic-agenten. Jag använder Eclipse så jag går till Hjälp> Installera ny programvara ... och lägg till New Relic som en webbplats:

Klick Nästa och vänta på att Eclipse ska göra sin sak. När det är klart måste du starta om Eclipse. Vid den här tiden borde du kunna högerklicka på ditt projekt i Eclipse och det borde finnas en Installera New Relic menyalternativ. När vi klickar på det, kommer den nya relic-agenten att hamna i / libs mapp av vårt projekt.

Om en ny version av New Relic-agenten kommer överens, uppdaterar du det på samma sätt. Först gör Hjälp> Kontrollera efter uppdateringar för att få de senaste uppdateringarna. Därefter högerklickar du på ditt projekt och det borde finnas en Uppdatera New Relic menyalternativ, som uppdaterar New Relic-burken när den klickas:

Nu måste vi ge våra appbehörigheter för INTERNET och ACCESS_NETWORK_STATE som New Relic kommer att behöva skicka data tillbaka till sina servrar. Vår AndroidManifest.xml kommer att se ut så här:

    ...  

Nu behöver vi bara starta agenten. I vår MainActivity.java vi importerar New Relic:

importera com.newrelic.agent.android.NewRelic;

Vi startar sedan agenten inuti onCreate metod:

skyddad tomgång onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); . NewRelic.withApplicationToken ( "XXXXXXXXXXXXXXXXXXX") start (this.getApplication ()); 

Observera programtoken. Om du trycker på Fortsätta när du gav din ansökan ett namn bör detta redan vara förfyllt för dig. När din app är igång kan du alltid titta upp den igen i inställningar meny för din ansökan.

Efter detta steg bygger vi projektet och distribuerar det till en emulator eller en fysisk enhet. Jag föredrar att distribuera till en testenhet som jag tycker är snabbare, mer lyhörd och lättare att arbeta med. Jag kommer att använda min Nexus 4.

Om vi ​​tittar på LogCat-fliken när programmet implementeras ska vi se utdata som liknar detta:

02-23 17: 25: 17.004: I / com.newrelic.agent.android (25592): Lastad konfiguration: HarvestConfiguration collect_network_errors = true, cross_process_id = "null", data_report_period = 60, data_token = [0, 0], error_limit = 50, report_max_transaction_age = 600, report_max_transaction_count = 1000, response_body_limit = 2048, server_timestamp = 0, stack_trace_limit = 100, activity_trace_max_size = 65534, activity_trace_max_report_attempts = 1, activity_trace_min_utilization = 0.30000001192092896, at_capture = ActivityTraceConfiguration maxTotalTraceCount = 1 02-23 17:25 : 17.054: I / com.newrelic.agent.android (25592): Ansökan tillståndsövervakare har startat 02-23 17: 25: 17.104: I / com.newrelic.agent.android (25592): Mätningsmotor initierad. 02-23 17: 25: 17.114: I / com.newrelic.agent.android (25592): New Relic Agent v3.264.0

Så vet vi att New Relic har laddat. Efter det, om vi fortsätter titta på LogCat ser vi något så här varje minut eller så:

02-23 17: 55: 40.410: I / com.newrelic.agent.android (31413): Skördare: ansluten 02-23 17: 55: 40.410: I / com.newrelic.agent.android (31413): Skördare: Sändning 2 HTTP-transaktioner. 02-23 17: 55: 40.410: I / com.newrelic.agent.android (31413): Skördare: Skickar 0 HTTP-fel. 02-23 17: 55: 40.410: I / com.newrelic.agent.android (31413): Skördare: Skickar 0 aktivitetsspår.

Detta är New Relic som ringer hem för att skicka data. Om vi ​​nu går tillbaka till användargränssnittet New Relic bör vi börja se data.

Utforska instrumentpanelen

När du tittar på din app i New Relic kommer du först att träffa Översikt skärm. I likhet med skärmen för webbapplikationsöversikt visar den flera viktiga statistik om din app, t.ex. Http svarstid, Långsammaste interaktioner, etc.

Aktiviteten på de här graferna är sporadisk eftersom vi bara har en klient som skickar tillbaka data och vi har bara gjort ett par interaktioner.

Så vad är några av de mer intressanta sakerna som du kan se i New Relic för din mobilapp? Tja, det finns App> Enheter fliken som visar vilka enheter folk använder din app på. Detta är intressant eftersom du kan berätta vilken typ av telefoner / tabeller det mesta av din användarbas använder. Är folk mestadels på äldre enheter eller nyare? Är de mest på tabletter eller telefoner? Det här är värdefulla uppgifter.

Du kan borra ner i varje enhet och se hur bra din app gör det där. Är interaktionstiden för den enheten långsammare än vad du förväntar dig? Vad sägs om Http svarstid? Hur många aktiva användare använder din app för närvarande på den här typen av enhet? I vårat fall:

Det finns bara en enhet, så det finns inte så mycket att se. Men om en stor andel av din användarbas var på en enhet där din app inte fungerade mycket bra så skulle du se det direkt och kunna ta itu med problemet.

Liknande till enheter flik, det finns OS versioner fliken som bryter ner användningen av din app med den version av Android som dina användare har installerat:

Du kan berätta om du behöver fokusera mer på din uppmärksamhet på nyare versioner av Android eller om större delen av din användarbas fortfarande finns på en äldre version.

Då finns det Nätverk flik och dess barn. I Karta fliken kan du se vilka API-appar som din app ansluter till och hur bra de gör. Vad är genomströmning, svarstid och felfrekvens:

I vårt fall har vi bara Twitter API och det är ganska långsamt faktiskt. Kanske kan vi överväga att cache några av svaren under en tidsperiod.

I Nätverk> Http-förfrågningar fliken kan vi borra ner i varje slutpunkt för varje API som vi använder på samma sätt som hur vi borrar ner i enheter och OS-versioner. Vi kan ta reda på vilka slutpunkter som används mest och vilka är de långsammaste. Detta ger oss några solida resultat när det gäller vart man ska styra optimeringsarbetet. Detta gäller särskilt om vi även kontrollerar API: er som används.

I Nätverk> Geografi fliken kan du se var de flesta av dina användare kommer ifrån och i bärare fliken kan du se vilken internetuppkoppling dina användare har. I vårt fall är jag på Wi-Fi:

Det är mycket värdefullt att veta om din användarbas använder Wi-Fi, 3G eller 4G eftersom dina optimeringsinsatser kan vara helt olika beroende på uppdelningen.

Under Inställningar> Varningar, Du kan också definiera vissa villkor för dina externa API för New Relic att meddela dig om svarstiderna överstiger ett visst tröskelvärde eller om felfrekvenserna överstiger en viss procentandel.

Det här är potentiellt mindre värdefullt för API-er du inte kontrollerar, men fortfarande en bra indikator om ett API du använder är instabilt eller inte särskilt prestanda.

De två sista intressanta är Användning> Versioner och Användning> Månadsvisa unika. Den första visar vilka versioner av din app som används i det vilda. Det här låter dig berätta hur ivriga användare hämtar uppdateringar av din app. Det visar också hur bra varje version av din app utför på enheten. Är den nya versionen mer minne än den tidigare versionen?

De månatliga unikana ger i grunden en uppfattning om att människor faktiskt interagerar med din app. Du kan ha 10 miljoner nedladdningar, men om antalet månatliga unika är låga är sakerna inte lika stora som de verkar vara.

Slutsats

Detta är en grundläggande översikt över några men inte alla intressanta funktioner i New Relic för Android-appar. I sig själva är ingen av funktionerna sjuka, men det är bra solida data att för en mobilapp kan du inte få något annat sätt.

Hur din app används och vilka enheter, hur bra dina nätverkssamtal utförs på en långsam anslutning, är den typ av data som tvingar dig att sluta gissa och fatta välgrundade beslut om hur du kan förbättra din app och ge dina användare en bättre erfarenhet.

Kom ihåg att prestanda är lika viktig för mobila appar som för webprogram, och det finns ingen anledning att gissa om vad som gör din app långsam när det finns en mycket bättre möjlighet att få tillgång till.