El SDK de Python 2 incluye la biblioteca Appstats, que se usa para crear perfiles del rendimiento de las RPCs (llamadas a procedimientos remotos) de tu aplicación. Una llamada 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 a procedimiento remoto:
- Llamadas de Datastore, como
ndb.get_multi()
,ndb.put_multi()
ondb.gql()
. - Llamadas a Memcache, como
memcache.get()
omemcache.get_multi()
. - Llamadas a obtención de URL, como
urlfetch.fetch()
. - Llamadas de correo, como
mail.send()
.
Optimizar o depurar una aplicación escalable puede ser complicado, ya que hay muchos problemas que pueden provocar un rendimiento deficiente o costes inesperados. Estos problemas son muy difíciles de depurar con las fuentes de información habituales, como los registros o las estadísticas de tiempo de solicitud. La mayoría de las solicitudes de aplicaciones pasan la mayor parte del tiempo esperando que se completen las llamadas de red como parte de la satisfacción de la solicitud.
Para que tu aplicación siga funcionando con rapidez, debes saber lo siguiente:
- ¿Tu aplicación hace llamadas RPC innecesarias?
- ¿Debería almacenar en caché los datos en lugar de hacer llamadas RPC repetidas para obtener los mismos datos?
- ¿Tu aplicación funcionará mejor si se ejecutan varias solicitudes en paralelo en lugar de en serie?
La biblioteca Appstats te ayuda a responder estas preguntas y a verificar que tu aplicación usa las llamadas RPC de la forma más eficiente, ya que te permite crear perfiles de tus llamadas RPC. Appstats te permite monitorizar todas las llamadas RPC de una solicitud determinada e informa sobre el tiempo y el coste de cada llamada.
Optimizar el uso de RPC de tu aplicación también puede reducir tu factura. Consulta Gestionar recursos de aplicaciones.
Configuración
No tienes que descargar ni instalar nada para empezar a usar Appstats. Solo tienes que configurar tu aplicación, volver a implementarla y acceder a la consola de Appstats siguiendo los pasos que se indican a continuación. La biblioteca Appstats se encarga del resto.
1. Instalar la grabadora de eventos
Para registrar estadísticas sobre las solicitudes web, cada controlador de solicitudes de tu aplicación debe invocar a Appstats. En función del framework que use tu aplicación, elige una de las siguientes opciones:
Controladores de solicitudes WSGI
Para usar Appstats con controladores de solicitudes WSGI, incluidos los frameworks WSGI como webapp2, debes envolver tu aplicación WSGI con el middleware de Appstats. La forma más sencilla de hacerlo es definir un middleware WSGI para envolver cada aplicación WSGI mediante
appengine_config.py
.Si aún no existe, crea un archivo llamado
appengine_config.py
en el directorio raíz de tu aplicación. Añade la siguiente función al archivo:Antes de invocar tu aplicación WSGI, el tiempo de ejecución importará este archivo y llamará a la función
webapp_add_wsgi_middleware
, si la encuentra.Para obtener más información sobre
appengine_config.py
, consulta la sección Configuración opcional que se muestra más abajo.Framework de Django
Para instalar el middleware Appstats en una aplicación Django, edita el archivo
settings.py
y añade la siguiente línea como primer elemento deMIDDLEWARE_CLASSES
:MIDDLEWARE_CLASSES = ( 'google.appengine.ext.appstats.recording.AppStatsDjangoMiddleware', # ... )
El middleware Appstats debe ser el primer elemento para que el generador de perfiles pueda incluir otro middleware en sus estadísticas.
El middleware de Django invoca Appstats para registrar eventos, según proceda. No debes cambiar ningún otro código de la aplicación.
2. Definir la ruta de la consola
Para acceder a la consola Appstats, visita la URL de tu aplicación en un navegador web. Debe definir la ruta de la URL de una de estas dos formas:
URL predeterminada
Para asignar Appstats al directorio predeterminado (
/_ah/stats/
), añade el elemento integradoappstats
a tu archivoapp.yaml
:URL personalizada
Si necesitas asignar Appstats a un directorio que no sea el predeterminado, puedes usar la directiva
url
enapp.yaml
:- url: /stats.* script: google.appengine.ext.appstats.ui.app
3. Configuración opcional
Puedes configurar el comportamiento de Appstats añadiendo contenido al archivo appengine_config.py en el directorio raíz de tu aplicación. Para ver un ejemplo completo de las opciones de configuración, consulta el archivo google/appengine/ext/appstats/sample_appengine_config.py
del SDK.
Algunos aspectos que debes saber sobre appengine_config.py
:
- Si los controladores de solicitudes modifican
sys.path
, debes hacer las mismas modificaciones ensys.path
enappengine_config.py
para que la interfaz web de Appstats pueda ver todos los archivos.
Mostrar coste
AppStats puede registrar el coste de las RPC, así como el tiempo. Si tu aplicación es lo suficientemente rápida, pero más cara de lo que esperabas, busca operaciones que cuesten más de lo que creías. Para activar el seguimiento de costes, asigna el valor appstats_CALC_RPC_COSTS = True
al campo appengine_config.py
en el archivo appengine_config.py
.
4. Probar Appstats desde el servidor de desarrollo
Puedes probar tu configuración de Appstats con el servidor de desarrollo. Si has configurado la ruta de la consola para usar la URL predeterminada anterior, puedes acceder a la consola en http://localhost:8080/_ah/stats/.
5. Desplegar
Cuando estés conforme con la configuración de Appstats, implementa tu aplicación. Si has configurado la ruta de la consola para usar la URL predeterminada anterior, puedes acceder a la consola en http://your_app_id.appspot.com/_ah/stats
.
Visita guiada por la consola Appstats
La consola Appstats proporciona información general sobre las llamadas RPC realizadas, las rutas de URLs solicitadas, un historial de las solicitudes recientes y detalles de las solicitudes individuales:
La tabla Estadísticas de RPC muestra estadísticas de cada tipo de RPC que realiza tu aplicación. Al hacer clic en el botón más, se despliega la entrada para mostrar un desglose por solicitud de ruta de la RPC:
La tabla Estadísticas de ruta muestra estadísticas de cada solicitud de ruta enviada a tu aplicación. Al hacer clic en el botón más, se despliega la entrada para mostrar un desglose por RPC de la solicitud de ruta:
Si has habilitado la función Seguimiento de costes de API, también se mostrarán los costes.
La tabla Historial de solicitudes muestra datos relativos a solicitudes concretas. Al hacer clic en un botón con el signo más, la entrada se despliega para mostrar un desglose por RPC. Al hacer clic en un enlace de solicitud, se muestra una cronología de la solicitud que incluye los tiempos de cada llamada a procedimiento remoto:
El gráfico Cronología de la llamada a procedimiento remoto muestra cuándo se hicieron llamadas a procedimientos remotos específicas y cuánto tiempo tardaron en procesarse las solicitudes. La barra Total de RPC muestra el tiempo total dedicado a esperar llamadas RPC, y la barra Total general muestra el tiempo total dedicado a procesar la solicitud. Como puede ver en la cronología de abajo, la mayor parte del tiempo se dedicó a las llamadas RPC. Este suele ser el caso. Las otras pestañas muestran información adicional sobre la solicitud. Conocer el impacto de las llamadas RPC en el tiempo de respuesta de tu aplicación es muy útil para analizar su rendimiento.
El playground interactivo permite a los desarrolladores introducir código Python arbitrario en un formulario web y ejecutarlo en el entorno de su aplicación.
Después de ir a Appstats, haz clic en el enlace de Interactive Playground. Se mostrará un formulario con un solo área de texto. Escribe el código Python que quieras en el área de texto y, a continuación, envía el formulario para ejecutarlo. Los resultados que se hayan impreso en la salida estándar se mostrarán junto al área de texto y se mostrará un análisis de la cronología de las llamadas RPC generadas por tu código.
El área de juegos interactiva se puede habilitar o inhabilitar. En el SDK, está habilitada de forma predeterminada, mientras que en producción está inhabilitada de forma predeterminada. Para habilitarlo, añade la siguiente línea al archivo
appengine_config.py
:<pre suppresswarning="yes" class="prettyprint"> appstats_SHELL_OK = True </pre>
Cómo funciona
La herramienta Appstats utiliza hooks de API para añadirse al marco de llamada a procedimiento remoto subyacente de las API de servicios de App Engine. Registra estadísticas de todas las llamadas a la API realizadas durante el controlador de solicitudes y, a continuación, almacena los datos en memcache con el espacio de nombres __appstats__
. Appstats conserva las estadísticas de las 1.000 solicitudes más recientes. Los datos incluyen registros de resumen, de unos 200 bytes cada uno, y registros detallados, los cuales pueden ser de hasta 100 KB cada uno. Puedes controlar la cantidad de información almacenada en los registros de llamadas detallados. (Consulta la sección Configuración opcional y el archivo de configuración de ejemplo).
Los hooks de API añaden alguna sobrecarga a los controladores de solicitudes. Appstats añade un mensaje a los registros en el nivel "info" para informar de la cantidad de recursos consumidos por la propia biblioteca Appstats. La línea de registro es parecida a esta:
<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 indica la clave de Memcache que se ha actualizado, el tamaño de los registros de resumen (part
) y de detalles (full
), y el tiempo (en segundos) que se ha dedicado a registrar esta información. La línea de registro incluye el enlace a la interfaz administrativa de Appstats que muestra los datos de este evento.