Usando New Relic para monitorear tu aplicación de Android

Tan interesantes como son las aplicaciones web, no son el único juego en la ciudad. En estos días, las aplicaciones móviles son una parte masiva del panorama de desarrollo de software. Al igual que con las aplicaciones web, queremos que nuestro código de aplicación móvil sea eficaz.

Afortunadamente, en el último año o dos, New Relic se ha concentrado en desarrollar una solución para monitorear el rendimiento de sus aplicaciones móviles. Hoy veremos cómo puede comenzar a usar New Relic para monitorear el rendimiento de una aplicación de Android.

¿Por qué monitorear aplicaciones móviles en absoluto??

Lo mejor de crear una aplicación web es que siempre puede implementar una nueva versión, al instante forzando toda su base de usuarios para utilizar su nuevo código. Entonces, si no estaba monitoreando su código anteriormente, puede conectar fácilmente New Relic o piratear algo personalizado, eliminarlo y comenzar a obtener métricas en unos pocos minutos..

Con las aplicaciones móviles, no eres tan afortunado. Por supuesto, puede lanzar una nueva versión cuando lo desee, pero el proceso es potencialmente una aprobación más prolongada de la tienda de aplicaciones, por ejemplo. E incluso cuando tu nueva versión está disponible, no puedes obligar a tus usuarios a actualizar. Por lo tanto, es importante pensar en cualquier tipo de monitoreo que desee realizar antes de lanzar la primera versión de su aplicación..

Incluso si no necesita preocuparse por el rendimiento de su aplicación por un tiempo, una vez que lo haga, su solución de monitoreo ya estará en su lugar, solo necesita comenzar a interpretar las métricas..

Además, es una aplicación móvil rara en estos días que no tiene un componente web. Casi todas las aplicaciones en estos días realizan solicitudes HTTP a una API y, a menudo, a muchas API diferentes.

Como sabemos, las llamadas de red no siempre son las cosas más confiables. Sería genial si pudiéramos averiguar con qué frecuencia fallan las llamadas a la API para nuestros usuarios y, lo que es más importante, la lentitud de nuestras llamadas a la API en promedio. Es la única forma de saber si nuestros usuarios están teniendo una buena experiencia con nuestra aplicación o si se sienten frustrados por el retraso..

Si no estás monitoreando tu aplicación, solo puedes adivinar sobre este tipo de cosas. No sé sobre usted, pero por lo general me siento mucho más cómodo con los datos en frío..

Hay muchas otras preguntas importantes que una buena solución de monitoreo puede ayudarnos a responder, pero podemos cubrirlas mientras trabajamos con nuestra aplicación de Android, así que comencemos a analizar.

Construyendo una aplicación básica de Android

Normalmente, para un artículo introductorio como este, me gusta centrarme en el tema en cuestión, en este caso New Relic para dispositivos móviles, y mantener el resto del código como Hola Mundo como sea posible.

Es fácil construir un Hola Mundo Aplicación de Android, Google incluso tiene un tutorial al respecto. Desafortunadamente, esa aplicación es solo un poco también BASIC. No hace llamadas a la red, lo que significa que no podríamos ver una gran parte de lo que New Relic ofrece para el monitoreo de aplicaciones móviles. Así, modificaremos ligeramente nuestra aplicación básica.. 

Nuestra aplicación tendrá dos pantallas, en la primera pantalla podremos ingresar un identificador de Twitter y enviarlo. En este punto, nuestra aplicación irá a la segunda pantalla y mostrará un texto de marcador de posición. Mientras tanto, nuestra aplicación se irá a Twitter y buscará el último tweet para ese manejo. Una vez que el tweet esté disponible, actualizaremos la segunda pantalla para mostrarlo. La aplicación sigue siendo bastante básica, pero esperamos que sea lo suficientemente compleja como para que podamos obtener algunos datos interesantes de New Relic.

No voy a caminar a través de la configuración de toda la aplicación, pero aquí están las partes interesantes. Según el tutorial de Google, cuando presionamos el botón en la primera pantalla, pasará el valor del campo de texto a la segunda pantalla, pero en nuestro caso será un identificador de Twitter:

public void sendMessage (vista de vista) Intent intent = new Intent (this, DisplayMessageActivity.class); EditText editText = (EditText) findViewById (R.id.edit_message); Mensaje de cadena = editText.getText (). ToString (); intent.putExtra (EXTRA_MESSAGE, mensaje); startActivity (intención); 

En la segunda pantalla, queremos obtener el último tweet para ese identificador. Pero no podemos hacerlo en el Hilo, necesitamos un AsyncTask. Crearemos uno y lo lanzaremos dentro del onCreate Método de la segunda actividad:

@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 = nuevo TextView (este); textView.setTextSize (40); nueva FetchLatestTweetTask (textView, handle) .execute (); // Establecer la vista de texto como el diseño de actividad setContentView (textView);  

La tarea real se ve así:

clase pública FetchLatestTweetTask extiende AsyncTask TextView de texto privado ve; mango de cadena privado; public FetchLatestTweetTask (TextView textView, String handle) this.textView = textView; this.handle = manejar;  @Override protegido String doInBackground (Void ... args) Twitter twitter = new TwitterFactory (). GetInstance (); Estado de la cadena = nulo; intente User user = twitter.showUser (handle); status = user.getStatus (). getText ();  catch (Exception e) e.printStackTrace ();  estado de retorno;  void protegido onPreExecute () textView.setText (String.format ("Obteniendo el tweet de @% s ...", manejador));  void protegido onPostExecute (cadena tweet) textView.setText (tweet); 

Mostramos un texto de marcador de posición antes de recuperar el tweet y actualizamos el texto del marcador de posición con el contenido del tweet después de que lo hayamos buscado. Usamos Twitter4J para hablar con la API de Twitter. Para que la biblioteca API funcione, he dejado un twitter4j.properties archivo en el / src carpeta del proyecto para que termine en el classpath según la documentación. 

El archivo de propiedades contiene la clave de consumidor OAuth, el secreto del consumidor, la clave de token de acceso y el secreto de token de acceso para la aplicación de Twitter que configuré solo para esto.

Este es todo el código interesante en nuestra aplicación, el resto es solo una plantilla genérica según el tutorial introductorio de Google.

Configuración de la aplicación New Relic For You

Configurar New Relic para comenzar a monitorear tu aplicación de Android es muy fácil. En su cuenta New Relic, haga clic en Móvil en el menu Aquí es donde vivirán todas sus aplicaciones móviles, al igual que las aplicaciones web en vivo bajo la Aplicaciones opción del menú.

Ahora haga clic en el Añadir una nueva aplicación botón:

Esto lo llevará a otra pantalla donde New Relic lo guiará a través de la configuración de una nueva aplicación:

Hacemos clic en Androide y dale un nombre a nuestra aplicación Una vez que le hayas dado un nombre a la aplicación, debes presionar Continuar para que New Relic genere una nueva clave API para tu aplicación.

A continuación, necesitamos instalar el agente de New Relic. Estoy usando Eclipse, así que voy a Ayuda> Instalar nuevo software ... y agrega New Relic como sitio:

Hacer clic Siguiente Y espera a que Eclipse haga su cosa. Una vez hecho esto, necesitas reiniciar Eclipse. En este punto, debería poder hacer clic derecho en su proyecto en Eclipse y debería haber un Instalar nueva reliquia opción de menú Cuando hacemos clic en él, el tarro del agente de New Relic terminará en el / libs carpeta de nuestro proyecto.

Por cierto, si aparece una nueva versión del agente de New Relic, la actualizas de la misma manera. Primero, haz Ayuda> Buscar actualizaciones para obtener las últimas actualizaciones. Después de eso, simplemente haga clic derecho en su proyecto y debería haber una Actualizar New Relic opción de menú, que actualizará el tarro de reliquia nueva cuando se haga clic:

Ahora tenemos que dar nuestros permisos de aplicación para INTERNET y ACCESS_NETWORK_STATE como New Relic tendrá que enviar datos a sus servidores. Nuestro AndroidManifest.xml se verá así:

    ...  

Ahora solo tenemos que lanzar el agente. En nuestro MainActivity.java importamos nueva reliquia:

importar com.newrelic.agent.android.NewRelic;

Entonces empezamos el agente dentro del onCreate método:

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

Tenga en cuenta el token de aplicación. Si presionas Continuar cuando le dio un nombre a su solicitud, esto ya debe estar previamente completado para usted. Una vez que su aplicación esté en funcionamiento, siempre puede volver a buscarla en el Ajustes menú para su aplicación.

Después de este paso, creamos el proyecto y lo implementamos en un emulador o un dispositivo físico. Prefiero implementarlo en un dispositivo de prueba, ya que me parece que es más rápido, más sensible y más fácil de trabajar. Usaré mi Nexus 4.

Si observamos la pestaña LogCat cuando la aplicación se está implementando, deberíamos ver un resultado similar a este:

02-23 17: 25: 17.004: I / com.newrelic.agent.android (25592): Configuración cargada: 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 = 1,000, response_body_limit = 2,048, server_timestamp = 0, stack_trace_limit = 100, activity_trace_max_size = 65.534, activity_trace_max_report_attempts = 1, activity_trace_min_utilization = ,30000001192092896, at_capture = ActivityTraceConfiguration maxTotalTraceCount = 1 02-23 17:25 : 17.054: I / com.newrelic.agent.android (25592): El monitor de estado de la aplicación ha comenzado 02-23 17: 25: 17.104: I / com.newrelic.agent.android (25592): Motor de medición inicializado. 02-23 17: 25: 17.114: I / com.newrelic.agent.android (25592): New Relic Agent v3.264.0

Así es como sabemos que New Relic se ha cargado. Después de eso, si seguimos mirando LogCat, veremos algo como esto a cada minuto, más o menos:

02-23 17: 55: 40.410: I / com.newrelic.agent.android (31413): Harvester: conectado 02-23 17: 55: 40.410: I / com.newrelic.agent.android (31413): Harvester: Enviando 2 transacciones HTTP. 02-23 17: 55: 40.410: I / com.newrelic.agent.android (31413): Harvester: Enviando 0 errores HTTP. 02-23 17: 55: 40.410: I / com.newrelic.agent.android (31413): Harvester: Enviando 0 trazas de actividad.

Esta es New Relic llamando a casa para enviar datos. Si ahora volvemos a la interfaz de usuario de New Relic, deberíamos comenzar a ver los datos..

Explorando los Dashboards

Cuando vaya a ver su aplicación en New Relic, primero llegará a Visión general pantalla. Similar a la pantalla de resumen de la aplicación web, muestra varias métricas importantes acerca de su aplicación, como Tiempo de respuesta http, Interacciones mas lentas, etc.

La actividad en esos gráficos es esporádica, ya que solo tenemos un cliente que envía datos y solo hemos hecho un par de interacciones..

Entonces, ¿cuáles son algunas de las cosas más interesantes que puedes ver en New Relic para tu aplicación móvil? Bueno, ahí está el App> Dispositivos pestaña que te muestra en qué dispositivos la gente está usando tu aplicación. Esto es interesante, ya que puede decir de un vistazo qué tipo de teléfonos / mesas está utilizando la mayoría de su base de usuarios. ¿Las personas son en su mayoría en dispositivos más antiguos o más nuevos? ¿Son principalmente en tabletas o teléfonos? Estos son datos valiosos..

Puede profundizar en cada dispositivo y ver qué tan bien está funcionando su aplicación allí. ¿El tiempo de interacción para ese dispositivo es más lento de lo que cabría esperar? ¿Qué pasa con el tiempo de respuesta Http? ¿Cuántos usuarios activos utilizan actualmente su aplicación en este tipo de dispositivo? En nuestro caso:

Solo hay un dispositivo, así que no hay mucho que ver. Pero si un gran porcentaje de su base de usuarios estaba en un dispositivo donde su aplicación no estaba funcionando muy bien, lo vería de inmediato y podría solucionar el problema.

Similar a Dispositivos pestaña, hay la Versiones del sistema operativo pestaña, que desglosa el uso de su aplicación por la versión de Android que sus usuarios han instalado:

Puedes saber si necesitas centrar más tu atención en las versiones más recientes de Android o si la mayoría de tu base de usuarios todavía está en una versión anterior..

Luego está la Red Tab y sus hijos. En el Mapa En la pestaña, puede ver a qué API se conecta su aplicación y qué tan bien está funcionando cada una de ellas. Cuál es el rendimiento, el tiempo de respuesta y la tasa de error:

En nuestro caso, solo tenemos la API de Twitter y en realidad es bastante lento. Tal vez podríamos considerar almacenar algunas de las respuestas durante un período de tiempo..

En el Redes> Solicitudes Http pestaña, podemos profundizar en cada punto final de cada API que usamos de una manera similar a la forma en que profundizamos en los dispositivos y las versiones del sistema operativo. Podemos averiguar qué puntos finales se utilizan más y cuáles son los más lentos. Esto nos da algunas pistas sólidas sobre dónde dirigir nuestros esfuerzos de optimización. Esto es especialmente cierto si también controlamos las API que se están utilizando.

En el Red> Geografía pestaña, puede saber de dónde provienen la mayoría de sus usuarios y en la Transportistas En la pestaña puedes ver qué tipo de conexión a internet tienen tus usuarios. En nuestro caso, estoy en Wi-Fi:

Es muy valioso saber si su base de usuarios está usando Wi-Fi, 3G o 4G, ya que sus esfuerzos de optimización pueden ser completamente diferentes dependiendo de la falla..

Debajo Ajustes> Alertas, También puede definir algunas condiciones para sus API externas para que New Relic le notifique si los tiempos de respuesta superan un cierto umbral o si las tasas de error superan un cierto porcentaje.

Esto es potencialmente menos valioso para las API que no controla, pero sigue siendo un buen indicador si una API que está utilizando es inestable o no tiene mucho rendimiento.

Los dos últimos interesantes son. Uso> Versiones y Uso> Uniques mensuales. La primera le muestra qué versiones de su aplicación se están utilizando en la naturaleza. Esto le permite saber con qué rapidez los usuarios descargan las actualizaciones de su aplicación. También le muestra qué tan bien está funcionando cada versión de su aplicación en el dispositivo. ¿La nueva versión usa más memoria que la versión anterior??

Los únicos mensuales básicamente te dan una idea si las personas realmente están interactuando con tu aplicación. Es posible que tengas 10 millones de descargas, pero si el número de unidades mensuales es bajo, entonces las cosas no son tan buenas como parecen.

Conclusión

Esta es una descripción básica de algunas, pero no todas las características interesantes de las aplicaciones de New Relic para Android. En sí mismas, ninguna de las características es alucinante, pero son buenos datos sólidos que, para una aplicación móvil, no se puede obtener de otra manera..

Cómo se usa su aplicación y en qué dispositivos, qué tan bien se están desempeñando sus llamadas de red en una conexión lenta, este es el tipo de datos que lo obliga a dejar de adivinar y tomar decisiones informadas sobre cómo mejorar su aplicación y brindar a sus usuarios mejor experiencia.

Recuerde, el rendimiento es tan importante para las aplicaciones móviles como para las aplicaciones web, y no hay razón para adivinar qué hace que su aplicación sea lenta cuando hay una manera mucho mejor disponible..