Usando New Relic per monitorare la tua app Android

Per quanto interessanti siano le applicazioni web, non sono l'unico gioco in città. In questi giorni, le applicazioni mobili sono una parte importante del panorama di sviluppo del software. Proprio come con le app Web, vogliamo che il nostro codice di applicazione mobile sia performante.

Fortunatamente, nell'ultimo anno o due, New Relic si è concentrata molto sulla creazione di una soluzione per monitorare le prestazioni delle tue app mobili. Oggi vedremo come è possibile iniziare a utilizzare New Relic per monitorare le prestazioni di un'applicazione Android.

Perché monitorare le app mobili a tutti?

Il bello della creazione di un'app Web è che puoi sempre distribuire una nuova versione, all'istante forzatura tutta la tua base di utenti per usare il tuo nuovo codice. Quindi, se prima non monitoravi il tuo codice, puoi facilmente collegare New Relic o creare qualcosa di personalizzato, spingerlo fuori e iniziare a ricevere le metriche in pochi minuti.

Con le app mobili, non sei così fortunato. Puoi, naturalmente, rilasciare una nuova versione ogni volta che vuoi, ma il processo è potenzialmente più lungo, ad esempio l'approvazione di app store. E anche quando la tua nuova versione è disponibile, non puoi costringere gli utenti a eseguire l'aggiornamento. È quindi importante pensare a qualsiasi tipo di monitoraggio che potresti voler fare prima di rilasciare la prima versione della tua app.

Anche se non hai bisogno di preoccuparti delle prestazioni della tua app per un po ', una volta che lo fai, la soluzione di monitoraggio sarà già a posto, devi solo iniziare a interpretare le metriche.

Inoltre, al giorno d'oggi è una rara app mobile che non ha nemmeno un componente web. Quasi tutte le applicazioni oggigiorno fanno richieste HTTP a un'API e spesso a molte API diverse.

Come sappiamo, le chiamate di rete non sono sempre le cose più affidabili. Sarebbe bello se potessimo scoprire la frequenza con cui le chiamate API falliscono per i nostri utenti e, ancora più importante, la lentezza delle nostre chiamate API in media. È l'unico modo per sapere se i nostri utenti hanno una buona esperienza con la nostra applicazione o se sono frustrati dal ritardo.

Se non stai monitorando la tua applicazione, puoi solo indovinare su questo tipo di cose. Non so voi, ma di solito sono molto più a mio agio con i dati rigidi e freddi.

Ci sono molte altre domande importanti che una buona soluzione di monitoraggio può aiutarci a rispondere, ma possiamo coprirle mentre stiamo lavorando con la nostra applicazione Android, quindi facciamo un po 'di cracking.

Costruire un'app per Android di base

Normalmente, per un articolo introduttivo come questo, mi piace concentrarmi sull'argomento in questione, in questo caso New Relic per dispositivi mobili, e mantenere il resto del codice come Ciao mondo il più possibile.

È facile da costruire a Ciao mondo App Android, Google ha anche un tutorial su di esso. Purtroppo, quell'app è solo un po ' pure di base. Non effettua chiamate di rete, il che significa che non saremo in grado di esaminare gran parte di ciò che New Relic offre per il monitoraggio delle app mobili. Quindi modificheremo leggermente la nostra app di base. 

La nostra app avrà due schermi, nella prima schermata potremo inserire un handle di Twitter e inviarlo. A questo punto la nostra app andrà alla seconda schermata e mostrerà un testo segnaposto. Nel frattempo la nostra applicazione andrà su Twitter e recupererà l'ultimo tweet per quella maniglia. Una volta disponibile il tweet, aggiorneremo il secondo schermo per visualizzarlo. L'app è ancora piuttosto semplice, ma si spera che sia abbastanza complesso da riuscire a ottenere alcuni dati interessanti da New Relic.

Non ho intenzione di passare attraverso l'impostazione dell'intera applicazione, ma qui ci sono le parti interessanti. Come per il tutorial di Google, quando premiamo il pulsante sulla prima schermata, passeremo il valore del campo di testo alla seconda schermata, ma nel nostro caso sarà un handle di Twitter:

public void sendMessage (Visualizza vista) Intent intent = new Intent (this, DisplayMessageActivity.class); EditText editText = (EditText) findViewById (R.id.edit_message); String message = editText.getText (). ToString (); intent.putExtra (EXTRA_MESSAGE, message); startActivity (intento); 

Nella seconda schermata, vogliamo recuperare l'ultimo tweet per quell'handle. Ma non possiamo farlo sul UIThread, abbiamo bisogno di un AsyncTask. Ne creeremo uno e diamo il calcio d'inizio al onCreate metodo della seconda attività:

@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 (); // Imposta la visualizzazione del testo come layout dell'attività setContentView (textView);  

L'attività effettiva è simile a questa:

public class FetchLatestTweetTask estende AsyncTask private TextView textView; handle String privato; public FetchLatestTweetTask (TextView TextView, String handle) this.textView = textView; this.handle = handle;  @Override protected String doInBackground (Void ... args) Twitter twitter = new TwitterFactory (). GetInstance (); Stato della stringa = null; prova Utente utente = twitter.showUser (handle); status = user.getStatus (). getText ();  catch (Exception e) e.printStackTrace ();  stato di ritorno;  protected void onPreExecute () textView.setText (String.format ("Recupero tweet di @% s ...", handle));  protected void onPostExecute (String tweet) textView.setText (tweet); 

Visualizziamo un testo segnaposto prima di scaricare il tweet e aggiornare il testo segnaposto con il contenuto del tweet dopo averlo recuperato. Usiamo Twitter4J per parlare con l'API di Twitter. Per far funzionare la libreria API, ho scaricato a twitter4j.properties file nel / src cartella del progetto in modo che finisca sul classpath come da documentazione. 

Il file delle proprietà contiene la chiave utente OAuth, il segreto utente, la chiave token di accesso e l'accesso al token secret per l'app Twitter che ho impostato solo per questo.

Questo è tutto il codice interessante nella nostra applicazione, il resto è solo un boiler generico come da tutorial introduttivo di Google.

Impostazione di una nuova app per reliquie per te

Configurare New Relic per iniziare a monitorare la tua app per Android è molto semplice. Nel tuo account New Relic, clicca su Mobile nel menu. Questo è il posto dove vivranno tutte le tue app mobili, proprio come le app web live sotto il applicazioni elemento del menu.

Ora fai clic sul Aggiungi una nuova app pulsante:

Questo ti porterà in un'altra schermata in cui New Relic ti guiderà attraverso la configurazione di una nuova app:

Facciamo clic su androide e dare un nome alla nostra app. Dopo aver assegnato un nome alla tua app, devi premere Continua in modo che New Relic generi una nuova chiave API per la tua applicazione.

Successivamente, dobbiamo installare l'agente New Relic. Sto usando Eclipse, quindi vado Guida> Installa nuovo software ... e aggiungi New Relic come un sito:

Clic Il prossimo e aspetta che Eclipse faccia la sua cosa. Una volta terminato, è necessario riavviare Eclipse. A questo punto, dovresti essere in grado di fare clic con il pulsante destro del mouse sul progetto in Eclipse e dovrebbe esserci un Installa nuova reliquia opzione di menu. Quando lo clicchiamo, il barattolo dell'agente New Relic finirà nel / libs cartella del nostro progetto.

Per inciso, se arriva una nuova versione dell'agente New Relic, la aggiorni allo stesso modo. Primo, fallo Guida> Controlla aggiornamenti per ottenere gli ultimi aggiornamenti. Dopodiché, fai semplicemente clic con il pulsante destro del mouse sul tuo progetto e dovrebbe esserci un Aggiorna nuova reliquia opzione di menu, che aggiornerà il jar New Relic quando viene cliccato:

Ora dobbiamo dare i permessi della nostra app per INTERNET e ACCESS_NETWORK_STATE come nuova reliquia avrà bisogno di inviare i dati ai loro server. Nostro AndroidManifest.xml sarà simile a questo:

    ...  

Ora abbiamo solo bisogno di lanciare l'agente. Nel nostro MainActivity.java importiamo una nuova reliquia:

import com.newrelic.agent.android.NewRelic;

Iniziamo quindi l'agente all'interno del onCreate metodo:

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

Nota il token dell'applicazione. Se hai premuto Continua quando hai dato un nome alla tua applicazione, questo dovrebbe già essere precompilato per te. Una volta che la tua app è funzionante, puoi sempre cercarla di nuovo nel impostazioni menu per la tua applicazione.

Dopo questo passaggio, costruiamo il progetto e lo distribuiamo a un emulatore oa un dispositivo fisico. Preferisco distribuire su un dispositivo di test perché trovo più veloce, più reattivo e più facile da utilizzare. Userò il mio Nexus 4.

Se guardiamo la scheda LogCat quando l'applicazione è in fase di distribuzione, dovremmo vedere un output simile a questo:

02-23 17: 25: 17.004: I / com.newrelic.agent.android (25592): configurazione caricata: 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): Il monitoraggio dello stato dell'applicazione è stato avviato 02-23 17: 25: 17.104: I / com.newrelic.agent.android (25592): Motore di misurazione inizializzato. 02-23 17: 25: 17.114: I / com.newrelic.agent.android (25592): New Relic Agent v3.264.0

Questo è il modo in cui sappiamo che New Relic ha caricato. Dopodiché, se continuiamo a guardare LogCat, vedremo qualcosa di simile ogni minuto circa:

02-23 17: 55: 40.410: I / com.newrelic.agent.android (31413): Harvester: connected 02-23 17: 55: 40.410: I / com.newrelic.agent.android (31413): Harvester: Invio 2 transazioni HTTP. 02-23 17: 55: 40.410: I / com.newrelic.agent.android (31413): Harvester: invio di 0 errori HTTP. 02-23 17: 55: 40.410: I / com.newrelic.agent.android (31413): Harvester: invio di 0 tracce di attività.

Questo è New Relic che chiama casa per inviare i dati. Se torniamo ora all'interfaccia utente New Relic dovremmo iniziare a vedere i dati.

Esplorando i cruscotti

Quando vai a guardare la tua app in New Relic, per prima cosa premi Panoramica schermo. Simile alla schermata di panoramica dell'applicazione Web, mostra diverse metriche importanti sulla tua app come Tempo di risposta Http, Interazioni più lente, eccetera.

L'attività su quei grafici è sporadica dato che abbiamo un solo cliente che invia dati indietro e abbiamo fatto solo un paio di interazioni.

Quindi quali sono alcune delle cose più interessanti che puoi vedere in New Relic per la tua app mobile? Bene, c'è il App> Dispositivi scheda che mostra i dispositivi su cui le persone stanno utilizzando la tua app. Questo è interessante dal momento che puoi capire a colpo d'occhio che tipo di telefoni / tabelle sta utilizzando la maggior parte della tua base di utenti. Le persone sono in gran parte su dispositivi più vecchi o più recenti? Sono per lo più su tablet o telefoni? Questo è un dato prezioso.

Puoi eseguire il drill down su ciascun dispositivo e vedere come sta la tua app. Il tempo di interazione per quel dispositivo è più lento di quello che ti aspetteresti? E il tempo di risposta del HTTP? Quanti utenti attivi stanno attualmente utilizzando la tua app su questo tipo di dispositivo? Nel nostro caso:

C'è solo un dispositivo, quindi non c'è molto da vedere. Ma se una grande percentuale della tua base di utenti era su un dispositivo in cui la tua app non funzionava molto bene, la vedresti subito e sarai in grado di risolvere il problema.

Simile al dispositivi scheda, c'è il Versioni del sistema operativo scheda, che suddivide l'utilizzo della tua app dalla versione di Android installata dagli utenti:

Puoi capire se devi concentrare maggiormente l'attenzione sulle versioni più recenti di Android o se la maggior parte della tua base di utenti è ancora su una versione precedente.

Poi c'è il Rete scheda e i suoi figli. Nel Carta geografica scheda, puoi vedere a quali API si connette l'app e quanto sta facendo ognuno di loro. Qual è il throughput, il tempo di risposta e il tasso di errore:

Nel nostro caso, abbiamo solo l'API di Twitter ed è piuttosto lento in realtà. Forse potremmo prendere in considerazione la memorizzazione nella cache di alcune delle risposte per un periodo di tempo.

Nel Reti> Richieste Http scheda, possiamo approfondire ogni endpoint di ogni API che utilizziamo in modo simile a come analizziamo i dispositivi e le versioni del sistema operativo. Possiamo scoprire quali endpoint vengono utilizzati maggiormente e quali sono i più lenti. Questo ci dà dei solidi suggerimenti su dove indirizzare i nostri sforzi di ottimizzazione. Questo è particolarmente vero se controlliamo anche le API che vengono utilizzate.

Nel Rete> Geografia scheda, puoi dire da dove proviene la maggior parte degli utenti e in I vettori scheda puoi vedere che tipo di connessione internet hanno gli utenti. Nel nostro caso, sono su Wi-Fi:

È molto importante sapere se la tua base di utenti utilizza Wi-Fi, 3G o 4G poiché i tuoi sforzi di ottimizzazione possono essere completamente diversi a seconda del guasto.

Sotto Impostazioni> Avvisi, puoi anche definire alcune condizioni per le tue API esterne per New Relic per notificare se i tempi di risposta superano una certa soglia o se i tassi di errore superano una certa percentuale.

Questo è potenzialmente meno prezioso per le API che non controlli, ma rimane comunque un buon indicatore se l'API che stai utilizzando è instabile o poco performante.

Gli ultimi due interessanti sono Uso> Versioni e Utilizzo> Univoci mensili. Il primo mostra quali versioni della tua app vengono utilizzate in natura. Questo ti consente di dire con che entusiasmo gli utenti scaricano gli aggiornamenti della tua app. Ti mostra anche il rendimento di ciascuna versione della tua app sul dispositivo. La nuova versione utilizza più memoria rispetto alla versione precedente?

Gli uniques mensili ti danno un'idea se le persone interagiscono effettivamente con la tua app. Potresti avere 10 milioni di download, ma se il numero di utenti unici mensili è basso, le cose non sono così grandi come sembrano.

Conclusione

Questa è una panoramica di base di alcune, ma non tutte, funzionalità interessanti di New Relic per le app Android. Di per sé, nessuna delle caratteristiche è incredibile, ma i dati validi sono buoni che, per un'app per dispositivi mobili, non è possibile ottenere in alcun altro modo.

Come viene utilizzata la tua app e su quali dispositivi, quanto bene le tue chiamate di rete stanno eseguendo su una connessione lenta, questo è il tipo di dati che ti costringe a smettere di indovinare e prendere decisioni informate su come migliorare la tua app e dare ai tuoi utenti un migliore esperienza.

Ricorda, le prestazioni sono importanti tanto per le app mobili quanto per le app Web e non c'è motivo di indovinare cosa sta facendo rallentare la tua app quando c'è un modo molto più facilmente disponibile.