Estadísticas de la app para Java (solo para el entorno de ejecución de Java 7)

El SDK de Java incluye una biblioteca de estadísticas de la aplicación que se usa para perfilar el rendimiento de la RPC (llamada de procedimiento remoto) de tu aplicación. Una RPC de App Engine es una llamada de red de ida y vuelta entre tu aplicación y una API de servicio de App Engine. Por ejemplo, todas estas llamadas a la API son llamadas RPC:

  • Llamadas a Datastore como DatastoreService.get(), DatastoreService.put() o DatastoreService.query().
  • Llamadas a Memcache como MemcacheService.get() o MemcacheService.getAll().
  • Llamadas a la recuperación de URL.
  • Llamadas al correo.

La optimización o depuración de una aplicación escalable puede ser un desafío, ya que varios problemas pueden provocar un rendimiento bajo o costos inesperados. Es muy difícil depurar estos problemas con las fuentes de información regulares, como registros o estadísticas de tiempo de solicitud. La mayoría de las solicitudes de la aplicación pasan la mayor parte de su tiempo esperando a que se completen las llamadas de red para satisfacer la solicitud.

Para que tu aplicación se mantenga rápida, debes saber lo siguiente:

  • ¿Tu aplicación realiza llamadas RPC innecesarias?
  • ¿Debería almacenar datos en caché en vez de realizar reiteradas llamadas RPC para obtener los mismos datos?
  • ¿Tu aplicación tendrá un mejor rendimiento si varias solicitudes se ejecutan en paralelo en lugar de en serie?

La biblioteca de estadísticas de la aplicación te ayuda a responder estas preguntas y a verificar que tu aplicación use las llamadas RPC de la forma más eficaz. Para ello, te permite perfilar tus llamadas RPC. Las estadísticas de la aplicación te permiten seguir todas las llamadas RPC para una solicitud determinada y los informes sobre el tiempo y costo de cada llamada.

(Para obtener más información sobre la administración del costo de la aplicación, consulta el artículo Administra el uso de recursos de tu app).

Mira el video de demostración.

Configuración

No tienes que descargar o instalar nada para comenzar a usar las estadísticas de la aplicación. Solo tienes que configurar tu aplicación, volver a implementar y acceder a la consola de estadísticas de la aplicación como se describe en los pasos siguientes. La biblioteca de estadísticas de la aplicación se encarga del resto.

Dependencias

Debes agregarle la dependencia appengine-api-labs a tu proyecto. A continuación, se muestra una forma de hacerlo en el archivo pom.xml de Maven:

<dependency>
 <groupId>com.google.appengine</groupId>
 <artifactId>appengine-api-labs</artifactId>
 <version>1.9.76</version>
 <!-- <scope>test</scope> -->
</dependency>

1. Instala el registrador de eventos

Las estadísticas de la aplicación recopilan información sobre cada solicitud con un filtro de servlet, una clase proporcionada por el SDK. Debes agregar los elementos <filter> y <filter-mapping> a tu descriptor de implementación (web.xml) para instalar el filtro en las solicitudes que deseas supervisar.

Para instalar el filtro de servlet, agrega una sección similar a la siguiente en el elemento de nivel superior de tu archivo web.xml:

<pre suppresswarning="yes" class="prettyprint">
<filter>
  <filter-name>appstats</filter-name>
   <filter-class>com.google.appengine.tools.appstats.AppstatsFilter</filter-class>
</filter>

<filter-mapping>
  <filter-name>appstats</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
</pre>

Esto instala el filtro para todas las URL, con <url-pattern> configurado como /*. (Esto incluye a la consola web de estadísticas de la aplicación explicada a continuación, que es preferible excluir del registro). Puede especificar un patrón diferente para limitar las estadísticas de la aplicación a URL que coincidan con el patrón.

2. Configura la ruta de acceso de la consola

Si quieres acceder a la consola de las estadísticas de la app, puedes visitar una URL para tu aplicación en un navegador web. Esta consola se configura como parte de tu aplicación, con una clase de servlet proporcionada por el SDK.

Si deseas configurar la consola en la ruta de URL /appstats/ , asegurada para que solo los administradores de la aplicación puedan acceder a ella, agrega lo siguiente en el elemento de nivel superior de tu archivo web.xml:

<pre suppresswarning="yes" class="prettyprint">
<servlet>
  <servlet-name>appstats</servlet-name>
  <servlet-class>com.google.appengine.tools.appstats.AppstatsServlet</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>appstats</servlet-name>
  <url-pattern>/appstats/*</url-pattern>
</servlet-mapping>

<security-constraint>
  <web-resource-collection>
    <web-resource-name>appstats</web-resource-name>
    <url-pattern>/appstats/*</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name>admin</role-name>
  </auth-constraint>
</security-constraint>
</pre>

3. Configuración opcional

Registros

La clase AppstatsFilter se puede configurar para escribir información específica de las solicitudes en los registros de la aplicación. Para habilitar este registro, modifica el elemento filter creado en el paso 1 de forma que incluya el parámetro logMessage.

<pre suppresswarning="yes" class="prettyprint">
<filter>
  <filter-name>appstats</filter-name>
  <filter-class>com.google.appengine.tools.appstats.AppstatsFilter</filter-class>
  <init-param>
    <param-name>logMessage</param-name>
    <param-value>Appstats available: /appstats/details?time={ID}</param-value>
  </init-param>
</filter>
</pre>

El valor de texto de param-value se adjunta al registro de cada solicitud procesada por el filtro, con {ID} reemplazado por el ID de la solicitud. El texto en este ejemplo proporciona una ruta a los detalles de las estadísticas de la aplicación de la solicitud.

Estas entradas de registro se escriben en el nivel "INFO", por lo que también debes configurar el nivel de registro como "INFO". Esto se puede establecer específicamente para la clase AppstatsFilter si agregas lo siguiente a tu archivo logging.properties:

<pre suppresswarning="yes" class="prettyprint">
com.google.appengine.tools.appstats.AppstatsFilter.level = INFO
</pre>

Muestra el costo

Las estadísticas de la aplicación pueden realizar un seguimiento del costo y el tiempo de las RPC. Si tu aplicación es suficientemente rápida, pero más costosa de lo esperado, busca operaciones que cuesten más de lo que pensabas. Para activar el seguimiento de costos, configura el parámetro calculateRpcCosts de tu filtro appstats como true:

<pre suppresswarning="yes" class="prettyprint">
<filter>
  <filter-name>appstats</filter-name>
  <filter-class>com.google.appengine.tools.appstats.AppstatsFilter</filter-class>
  <init-param>
    <param-name>calculateRpcCosts</param-name>
    <param-value>true</param-value>
  </init-param>
</filter>
</pre>

Acceso público

De forma predeterminada, solo los administradores de aplicaciones autenticados pueden acceder a la consola de estadísticas de la aplicación. Para permitir el acceso público a la consola, debes realizar estos dos procedimientos:

  • Modifica el elemento servlet para la clase AppstatsServlet creada en el paso 2 de forma que incluya el parámetro requireAdminAuthentication configurado como false:

    <pre suppresswarning="yes"  class="prettyprint">
    <servlet>
      <servlet-name>appstats</servlet-name>
      <servlet-class>com.google.appengine.tools.appstats.AppstatsServlet</servlet-class>
      <init-param>
        <param-name>requireAdminAuthentication</param-name>
        <param-value>false</param-value>
      </init-param>
    </servlet>
    </pre>
    
  • Quita el elemento security-constraint creado en el paso 2.

4. Prueba las estadísticas de la aplicación desde el servidor de desarrollador

Puedes probar la configuración de las estadísticas de la aplicación con el servidor de desarrollador:

5. Implementa

Cuando estés satisfecho con la configuración de tus estadísticas de la aplicación, implementa tu app. Accede a la consola en http://your_app_id.appspot.com/appstats.

Un recorrido por la consola de las estadísticas de la app

La consola de estadísticas de la aplicación brinda información general sobre las llamadas RPC realizadas, las rutas de URL solicitadas, el historial de solicitudes recientes y detalles sobre solicitudes individuales:

  • En la tabla Estadísticas de la RPC, se muestran estadísticas para cada tipo de RPC realizada por tu aplicación. Para desplegar la entrada que muestra un desglose por solicitud de ruta de la RPC, haz clic en el botón de signo más:

    captura de pantalla

  • En la tabla Estadísticas de ruta, se muestran estadísticas para cada solicitud de ruta enviada a tu aplicación. Para desplegar la entrada que muestra un desglose por RPC de la solicitud de ruta, haz clic en el botón de signo más:

    captura de pantalla

    Si habilitaste la característica de seguimiento de costos de la API, también se mostrarán los costos.

  • En la tabla Historial de solicitudes, se muestran datos que corresponden a solicitudes individuales. Para desplegar la entrada que muestra un desglose por RPC, haz clic en el botón de signo más. Si deseas mostrar un cronograma de la solicitud, incluidos los tiempos individuales de la RPC, haz clic en el vínculo de una solicitud:

    captura de pantalla

  • En el gráfico Cronograma de la RPC, se muestra cuándo se realizaron llamadas RPC específicas y cuánto tiempo se empleó en procesar las solicitudes. La barra Total de RPC representa el tiempo total dedicado a esperar llamadas RPC, y la barra Total general muestra el tiempo total dedicado a procesar la solicitud. Como puedes ver en el cronograma siguiente, la mayor parte del tiempo se destinó a llamadas RPC. Esto es lo que suele ocurrir. En las otras pestañas, se muestra información adicional sobre la solicitud. Es muy importante que comprendas el impacto que tienen las llamadas RPC en el tiempo de respuesta de tu aplicación para analizar su rendimiento.

    captura de pantalla

Cómo funciona

El filtro de servlet de las estadísticas de la aplicación se agrega al marco de trabajo de la llamada de procedimiento remoto que subyace en las API de servicio de App Engine. Este filtro registra las estadísticas de todas las llamadas a la API realizadas durante el controlador de solicitudes y luego almacena los datos en Memcache con un espacio de nombres __appstats__. Se conservan las estadísticas de las 1,000 solicitudes más recientes (aproximadamente). Los datos incluyen registros resumidos, de alrededor de 200 bytes cada uno, y registros detallados, de hasta 100 KB cada uno.

La versión de Java de estadísticas de la aplicación usa valores fijos y comportamientos sobre cómo se almacenan los datos en Memcache y en el almacén de datos. No se pueden configurar como en la versión de Python de estadísticas de la aplicación.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Entorno estándar de App Engine para Java 8