Con solo unas pocas líneas de código, puedes actualizar tu app para usar Cloud Logging y lograr casi las mismas funciones de filtrado y correlación de registros que estaban disponibles con el servicio de registro de App Engine.
A fin de migrar a Cloud Logging, conecta el controlador de registro AppEngineHandler
al módulo de registro de Python y, luego, sigue usando el módulo de registro de Python para escribir entradas de registro. Puedes realizar estas actualizaciones en la app de Python 2 y ver el mismo comportamiento de registro cuando la app se ejecuta en los entornos de ejecución de Python 2 o Python 3.
Diferencias clave entre el registro de App Engine y Cloud Logging
El registro de App Engine requiere que uses el módulo de registro de Python para escribir entradas de registro de la app. Cloud Logging admite los siguientes enfoques:
(Recomendado) Usa el módulo de registro de Python con
AppEngineHandler
como el controlador de registro. Este enfoque idiomático solo requiere algunas líneas de código adicionales para registrar el controlador de Cloud Logging y, por lo tanto, hace que la app sea más portátil en otros entornos de Python.Escribe entradas en
stdout
ostderr
. Estas entradas aparecen en el explorador de registros, pero, para habilitar el filtrado y la correlación con los registros de solicitudes, debes formatear las entradas como un objeto JSON y proporcionar metadatos específicos. Para obtener más información sobre este enfoque, consulta Registro estructurado.Usa la biblioteca cliente de Cloud Logging directamente. Si usas
AppEngineHandler
, con este enfoque se logra el mismo resultado que con el módulo de registro de Python, pero cambiar de esta biblioteca a un framework de registro diferente podría requerir actualizaciones significativas en tu código.
Con el registro de App Engine, el explorador de registros asigna un nivel de gravedad a los registros de solicitudes y el nivel refleja la gravedad más alta de cualquier entrada de registro de la app que esté correlacionada con la solicitud. Por ejemplo, si una solicitud provoca que la app emita una entrada de registro de advertencia, el explorador de registros mostrará un ícono de advertencia junto a la entrada de registro de la solicitud. Cuando expandes la entrada de la solicitud, verás la entrada de registro de advertencia anidada en la entrada de la solicitud.
Con Cloud Logging, el visor de registros no asigna un nivel de gravedad a los registros de solicitudes. Cuando expandas una entrada de solicitud, verás las entradas de la app anidadas dentro de la entrada de la solicitud y esas entradas de la app mostrarán un ícono de gravedad. Sin embargo, la entrada de la solicitud no muestra un ícono de gravedad y no puede filtrarse por nivel de gravedad.
Las cuotas y la retención de datos son las mismas para App Engine y Cloud Logging. Sin embargo, si superas la cuota gratuita de datos de registro, los precios de Cloud Logging pueden ser diferentes de los precios de los registros de App Engine.
Antes de comenzar la migración
Habilita la API de Cloud Logging en el proyecto que contiene la app.
Asegúrate de que la app tenga permiso para escribir registros.
De forma predeterminada, la cuenta de servicio predeterminada de la app tiene permiso para escribir registros.
Si la app usa una cuenta de servicio o de usuario diferente, o si cambiaste los permisos de la cuenta de servicio predeterminada, asegúrate de que la cuenta que uses tenga permiso para escribir registros.
Descripción general del proceso de migración
Para migrar la app de Python a fin de usar Cloud Logging en lugar del registro de App Engine, haz lo siguiente:
Instala la biblioteca cliente de Cloud para Cloud Logging.
Conecta
AppEngineHandler
al módulo de registro de Python.Implementa la app en App Engine y confirma que el registro funciona como se espera.
Instala la biblioteca cliente de Cloud para Cloud Logging
Para hacer que AppEngineHandler
esté disponible en tu app cuando se ejecute en App Engine, haz lo siguiente:
Crea un archivo
requirements.txt
en la misma carpeta que el archivoapp.yaml
y agrega las siguientes líneas:google-cloud-logging==1.14.0
Te recomendamos usar la versión 1.14.0 de la biblioteca cliente de Cloud Logging, ya que admite apps de Python 2.7.
En el archivo
app.yaml
de la aplicación, especifica las bibliotecas RPC ysetuptools
de Google obligatorias y la biblioteca SSL opcional en la secciónlibraries
:libraries: - name: grpcio version: 1.0.0 - name: setuptools version: 36.6.0 - name: ssl version: latest
Algunas bibliotecas cliente no necesitan la biblioteca SSL. Si no incluyes la biblioteca SSL para una biblioteca cliente que la necesita, verás un error de SSL en el visor de registros cuando tu app reciba una solicitud.
Crea un directorio para almacenar tus bibliotecas de terceros, como
lib/
. Luego, usapip install
para instalar las bibliotecas en el directorio. Por ejemplo:pip install -t lib -r requirements.txt
Crea un archivo
appengine_config.py
en la misma carpeta que el archivoapp.yaml
. Agrega lo siguiente al archivoappengine_config.py
:# appengine_config.py import pkg_resources from google.appengine.ext import vendor # Set path to your libraries folder. path = 'lib' # Add libraries installed in the path folder. vendor.add(path) # Add libraries to pkg_resources working set to find the distribution. pkg_resources.working_set.add_entry(path)
En el archivo
appengine_config.py
del ejemplo anterior, se supone que la carpetalib
se encuentra en el directorio de trabajo actual. Si no puedes garantizar quelib
esté siempre en el directorio de trabajo actual, especifica la ruta completa a la carpetalib
. Por ejemplo:import os path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
Para el desarrollo local, recomendamos que instales dependencias en un entorno virtual como virtualenv para Python 2.
Conecta AppEngineHandler
al módulo de registro de Python
En cada archivo en los que se escriben entradas de registro, haz lo siguiente:
- Importa la biblioteca cliente de Cloud Logging.
- Crea una instancia del cliente de Cloud Logging.
Recupera el controlador de Cloud Logging que sea adecuado para el entorno actual. Cuando la app se ejecuta en App Engine, el cliente de Cloud Logging recupera
AppEngineHandler
.Con
AppEngineHandler
, se formatearán las entradas como un objeto JSON y se proporcionarán los metadatos necesarios para admitir el filtrado por gravedad y correlacionar las entradas de la app con entradas de registro de solicitudes.Ejecuta el método
setup_logging()
del cliente de Cloud Logging, que adjunta su objeto de escucha predeterminado como el controlador de registro para el registrador raíz de Python.
Por ejemplo:
Una vez que se adjunte el controlador, se enviarán a Logging todos los registros a nivel de INFO
o superior que se emitan en tu aplicación de forma predeterminada:
Implementa tu app
Cuando estés listo para implementar tu app, debes hacer lo siguiente:
-
La única forma de probar las actualizaciones y confirmar que los niveles de gravedad se asignen y que las entradas de la app se correlacionen con las entradas de las solicitudes es implementar la app en el entorno de ejecución de Python 3.
Si implementas las actualizaciones en el entorno de ejecución de Python 2, el servicio de registro de App Engine detectará las entradas del registrador raíz de Python y las formateará de forma correcta para el explorador de registros.
Si ejecutas la app de forma local, Cloud Logging no usa
AppEngineHandler
y App Engine no puede escribir entradas de solicitud. Visualiza el explorador de registros y confirma que los niveles de gravedad se asignen a las entradas de la app. Expande una entrada de solicitud y confirma que las entradas que escribe la app mientras se procesa la solicitud aparezcan anidadas debajo de la entrada de la solicitud.
Si la app se ejecuta sin errores, usa la división de tráfico a fin de aumentar de forma gradual el tráfico de tu app actualizada. Supervisa la app para detectar cualquier problema antes de enrutar más tráfico a la app actualizada.