Estadísticas de la aplicación para Python 2

El SDK de Python 2 incluye una biblioteca de estadísticas de la aplicación que se usa para perfilar el rendimiento de las RPC (llamadas 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 ndb.get_multi(), ndb.put_multi() o ndb.gql()
  • Llamadas a Memcache, como memcache.get() o memcache.get_multi()
  • Llamadas a la recuperación de URL, como urlfetch.fetch()
  • Llamadas de correo, como mail.send()

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. Con las estadísticas de la aplicación, puedes seguir todas las llamadas RPC para una solicitud determinada y los informes sobre el tiempo y costo de cada llamada.

Si optimizas el uso de RPC de la aplicación, también podrás reducir los costos en tu factura. Consulta Administra recursos de apps.

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.

1. Instalar el registrador de eventos

Con el fin de registrar las estadísticas sobre las solicitudes web, cada controlador de solicitudes para tu aplicación debe invocar las estadísticas de la aplicación. Según el marco de trabajo que utilice la aplicación, elige una de las siguientes opciones:

  • Controladores de solicitudes WSGI

    Para utilizar las estadísticas de la aplicación con los controladores de solicitudes WSGI, incluidos los marcos de trabajo WSGI, como webapp2, debes unir tu aplicación WSGI con el middleware de estadísticas de la aplicación. La forma más sencilla de lograr esto es definir un middleware WSGI para envolver todas las aplicaciones WSGI mediante appengine_config.py.

    Si aún no existe, crea un archivo llamado appengine_config.py en el directorio raíz de la aplicación. Agrega la siguiente función al archivo:

    def webapp_add_wsgi_middleware(app):
        from google.appengine.ext.appstats import recording
        app = recording.appstats_wsgi_middleware(app)
        return app

    Antes de invocar tu aplicación WSGI, el entorno de ejecución importará este archivo y llamará a la función webapp_add_wsgi_middleware, si se encuentra.

    Consulta Configuración opcional a continuación para obtener más información sobre appengine_config.py.

  • Marco de trabajo de Django

    Para instalar el middleware de estadísticas de la aplicación en una aplicación de Django, edita el archivo settings.py y agrega la siguiente línea para que sea el primer elemento en MIDDLEWARE_CLASSES:

        MIDDLEWARE_CLASSES = (
      'google.appengine.ext.appstats.recording.AppStatsDjangoMiddleware',
    
      # ...
    )
    

    El middleware de estadísticas de la aplicación debe ser el primer elemento para que el generador de perfiles pueda incluir otros middlewares en sus estadísticas.

    El middleware de Django llama a las estadísticas de la aplicación para registrar eventos, según corresponda. No es necesario que cambies ningún otro código de la aplicación.

2. Configura la ruta de acceso de la consola

Con el fin de acceder a la consola de las estadísticas de la aplicación, debes visitar una URL para la aplicación en un navegador web. Debes configurar la ruta de la URL de una de las dos maneras siguientes:

  • URL predeterminada

    Para asignar estadísticas de la aplicación al directorio predeterminado (/_ah/stats/), agrega las appstats integradas al archivo app.yaml:

    runtime: python27
    api_version: 1
    threadsafe: yes
    
    builtins:
    - appstats: on
    
    handlers:
    - url: .*
      script: main.app
    
  • URL personalizada

    Si necesitas asignar las estadísticas de la aplicación a un directorio que no sea el predeterminado, puedes usar la directiva url en app.yaml:

      - url: /stats.*
      script: google.appengine.ext.appstats.ui.app
      

3. Configuración opcional

Para configurar el comportamiento de las estadísticas de la aplicación, puedes agregar contenido al archivo appengine_config.py en el directorio raíz de la aplicación. Para obtener un ejemplo completo de las opciones de configuración, consulta el archivo google/appengine/ext/appstats/sample_appengine_config.py en el SDK.

Estos son algunos datos que debes saber sobre appengine_config.py:

  • Si tus controladores de solicitudes modifican sys.path, debes hacer las mismas modificaciones a sys.path en appengine_config.py para que la interfaz web de la estadística de la aplicación pueda ver todos los archivos.

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 appstats_CALC_RPC_COSTS = True en el archivo appengine_config.py.

4. Probar las estadísticas desde el servidor de desarrollo

Puedes probar la configuración de las estadísticas con el servidor de desarrollo. Si configuraste la ruta de la consola para que utilice la URL predeterminada antes mencionada, puedes acceder a la consola desde http://localhost:8080/_ah/stats/.

5. Implementa

Una vez que estés satisfecho con la configuración de las estadísticas de la aplicación, implementa la aplicación. Si configuraste la ruta de acceso de la consola para usar la URL predeterminada anterior, puedes acceder a la consola en http://your_app_id.appspot.com/_ah/stats.

Un recorrido por la consola de las estadísticas de la aplicación

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 del signo más:

    captura de pantalla

  • En la tabla Estadísticas de ruta de acceso (Path Stats), 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 del 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 (Requests History), se muestran datos que corresponden a solicitudes individuales. Cuando se hace clic en el botón del signo más, se expande la entrada para mostrar un desglose por RPC. Cuando se hace clic en un vínculo de solicitud, se muestra un cronograma para la solicitud, que incluye el tiempo de RPC individual:

    captura de pantalla

  • En el grafo Cronograma (Timeline) de la RPC, se muestra cuándo se realizaron llamadas RPC específicas y cuánto tiempo se empleó para procesar las solicitudes. La barra Total de RPC (RCP Total) muestra el tiempo total dedicado a llamadas RPC y la barra Total general (Grand Total) muestra el tiempo total dedicado al procesamiento de la solicitud. Como puedes ver en el siguiente cronograma, la mayor parte del tiempo se dedicó a las llamadas de RPC. Esto es lo que suele ocurrir. Las demás pestañas muestran información adicional sobre la solicitud. Comprender el impacto de las llamadas de RPC en el tiempo de respuesta de tu aplicación es muy valioso cuando analizas su rendimiento.

    captura de pantalla

  • El Playground interactivo permite a los desarrolladores ingresar un código de Python arbitrario en un formulario web y ejecutarlo en el entorno de sus aplicaciones.

    Después de navegar a las estadísticas de la aplicación, haz clic en el vínculo del Playground interactivo. Se mostrará un formulario con una sola área de texto. Ingresa cualquier código de Python arbitrario que desees en el área de texto y, luego, envía el formulario para ejecutarlo. Cualquier resultado que se haya impreso en el flujo de salida estándar se muestra junto al área de texto, y se muestra un análisis del cronograma de las llamadas RPC generadas por tu código.

    El Playground interactivo se puede habilitar o inhabilitar. De forma predeterminada, está inhabilitado en producción y habilitado en el SDK. Para habilitarlo, agrega la siguiente línea a tu archivo appengine_config.py:

    <pre suppresswarning="yes" class="prettyprint">
    appstats_SHELL_OK = True
    </pre>
    

Cómo funciona

Las estadísticas de la aplicación usan enlaces de la API para agregarse al marco de trabajo de la llamada de procedimiento remoto que subyace a las API de servicio de App Engine. 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 de __appstats__. Las estadísticas de la aplicación conservan las estadísticas de las 1,000 solicitudes más recientes. Los datos incluyen registros resumidos, alrededor de 200 bytes cada uno, y registros detallados, de hasta 100 KB cada uno. Puedes controlar la cantidad de detalles almacenados en los registros detallados. (Consulta Configuración opcional y el archivo de configuración de ejemplo).

Los enlaces de la API agregan sobrecarga a los controladores de solicitudes. Las estadísticas de la aplicación agregan un mensaje a los registros en el nivel de la "información" para informar la cantidad de recursos consumidos por la biblioteca. La línea de registros debería ser similar a la siguiente línea:

<pre suppresswarning="yes" class="prettyprint">
INFO 2009-08-25 12:04:07,277 recording.py:290] Saved; key: __appstats__:046800, part: 160 bytes, full: 25278 bytes, overhead: 0.019 + 0.018; link: http://your_app_id.[REGION_ID].r.appspot.com/stats/detail?time=1234567890123
</pre>

Esta línea informa la clave de Memcache que se actualizó, el tamaño de los registros de resumen (part) y detalles (full), y el tiempo (en segundos) que se usó para registrar esta información. La línea de registros incluye el vínculo a la interfaz administrativa de las estadísticas de la aplicación que muestra los datos para este evento.