Informar sobre errores

En este tutorial, se muestra cómo informar y hacer un seguimiento de las excepciones no capturadas de la aplicación Bookshelf para Python con Google Stackdriver Error Reporting.

Stackdriver Error Reporting registra los errores de la aplicación. Proporciona un panel centralizado donde aparecen los recuentos de cada error único, los seguimientos de pila y un historial de casos. También se pueden configurar alertas para cuando se produzcan nuevos errores.

Esta página forma parte de un tutorial de varias páginas. Para empezar en orden y consultar las instrucciones de configuración, ve a la sección relativa a la aplicación Bookshelf para Python.

Establecer configuración

En esta sección, se usa el código del directorio 5-logging. Edita los archivos y ejecuta los comandos de este directorio.

  1. Abre config.py para editarlo.
  2. Utiliza el ID del proyecto, que puede verse en la consola de GCP, como el valor de PROJECT_ID.
  3. Define DATA_BACKEND con el mismo valor que empleaste en el tutorial sobre el uso de datos estructurados.
  4. Si utilizas Cloud SQL o MongoDB, usa los mismos valores que empleaste en el paso sobre el uso de datos estructurados en las secciones Cloud SQL o Mongo.
  5. En CLOUD_STORAGE_BUCKET, establece como valor el nombre del segmento de Cloud Storage.

  6. En la sección OAuth2 configuration, define los valores de GOOGLE_OAUTH2_CLIENT_ID y GOOGLE_OAUTH2_CLIENT_SECRET con el ID y el secreto de cliente que creaste anteriormente en la aplicación.

  7. Guarda y cierra config.py.

Si usas Cloud SQL, sigue estos pasos:

  1. Abre app.yaml para editarlo.
  2. En cloud_sql_instances, establece el mismo valor que utilizaste para CLOUDSQL_CONNECTION_NAME en config.py . Debe tener el formato project:region:cloudsql-instance. Elimina los comentarios de toda esta línea.
  3. Guarda y cierra app.yaml.

Instalar dependencias

Introduce los comandos siguientes para crear un entorno virtual e instalar las dependencias:

Linux/macOS X

virtualenv -p python3 env
source env/bin/activate
pip install -r requirements.txt

Windows

virtualenv -p python3 env
env\scripts\activate
pip install -r requirements.txt

Ejecutar la aplicación en la máquina local

  1. Inicia un servidor web local:

    python main.py
    
  2. Introduce la siguiente dirección en el navegador web:

    http://localhost:8080

Presiona Control + C para salir del servidor web local.

Desplegar la aplicación en el entorno flexible de App Engine

  1. Despliega la aplicación de muestra:

    gcloud app deploy
    
  2. Introduce la siguiente dirección en el navegador web. Sustituye [YOUR_PROJECT_ID] por el ID del proyecto:

    https://[YOUR_PROJECT_ID].appspot.com
    

Si actualizas la aplicación, podrás desplegar la versión actualizada con el mismo comando que utilizaste para desplegar la aplicación por primera vez. El nuevo despliegue crea una nueva versión de la aplicación y la establece como la versión predeterminada. No obstante, se conservarán las versiones anteriores, al igual que las instancias de máquina virtual asociadas. Ten en cuenta que todas estas versiones de la aplicación y las instancias de máquina virtual son recursos facturables.

Si eliminas las versiones no predeterminadas de la aplicación, puedes reducir los costes.

Para eliminar una versión de la aplicación, sigue las instrucciones que figuran a continuación:

  1. In the GCP Console, go to the Versions page for App Engine.

    Go to the Versions page

  2. Select the checkbox for the non-default app version you want to delete.
  3. Click Delete to delete the app version.

Consulta la sección sobre cómo eliminar los recursos facturables en el último paso de este tutorial para obtener más información al respecto.

Simular un error

Si quieres observar cómo funciona Stackdriver Error Reporting, puedes introducir un error deliberadamente en el código. De esta forma, verás la excepción en la consola de Error Reporting.

En bookshelf/crud.py, añade una operación que acceda a una variable sin definir y lance un ReferenceError en la vista de índice.

@crud.route("/")
def list():
    x[3]

Ahora vuelve a desplegar la aplicación:

gcloud app deploy

Y accede a la página de índice para provocar el error:

gcloud app browse

Se debería mostrar An internal error occurred.

En la consola de Google Cloud Platform, selecciona Stackdriver > Error Reporting.

Ir a Error Reporting

En el panel, se debería ver el error:

Ver errores

Puedes hacer clic en el error para ver más detalles, como cuándo se ha visto por última vez, la cantidad de veces que ha ocurrido, un histograma temporal de los casos y el seguimiento de pila.

Información sobre el código

Para informar de las excepciones no capturadas, el código utiliza el elemento Decorator errorhandler de Flask y, luego, usa el cliente de Python para Google Cloud para notificar la excepción a Stackdriver Error Reporting.

@app.errorhandler(500)
def server_error(e):
    client = error_reporting.Client(app.config['PROJECT_ID'])
    client.report_exception(
        http_context=error_reporting.build_flask_context(request))
    return """
    An internal error occurred.
    """, 500

El cliente añade automáticamente la información de rastreo y utiliza una función auxiliar para extraer los detalles pertinentes de la petición de Flask. De esta manera, en Error Reporting aparecerán los seguimientos de pila y los contextos HTTP correspondientes de las excepciones HTTP 500 de InternalServerError no capturadas de la aplicación.

Ten en cuenta que el controlador del error 500 solo se activa cuando la aplicación no está en el modo DEBUG. Al desplegar la aplicación, el modo DEBUG estará desactivado, pero de manera predeterminada este modo DEBUG está activo de forma local, por lo que las excepciones no se notificarán a Error Reporting. En cambio, la información del seguimiento de pila se procesará directamente en el navegador. Puedes cambiar la configuración de depuración local en main.py.

Eliminar los recursos

Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud Platform, sigue estas instrucciones:

La forma más fácil de evitar la facturación consiste en eliminar el proyecto que has creado para el tutorial.

Para eliminar el proyecto, sigue las instrucciones que figuran a continuación:

  1. In the GCP Console, go to the Projects page.

    Go to the Projects page

  2. In the project list, select the project you want to delete and click Delete .
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

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

Enviar comentarios sobre...