Informa errores

En este instructivo, se muestra cómo informar y hacer un seguimiento de las excepciones no detectadas en la app de Python Bookshelf con Google Cloud Console.

Error Reporting proporciona un panel centralizado que muestra los recuentos de cada error único, seguimiento de pila y un historial de casos. También puedes configurar una alerta que se active cuando se produzcan errores.

Esta página forma parte de un instructivo de varias páginas. Para comenzar desde el principio y ver las instrucciones de configuración, ve a la app de Bookshelf en Python.

Configuración

Esta sección usa código en el directorio 5-logging. Edita los archivos y ejecuta comandos en este directorio.

  1. Abre el archivo config.py para editarlo y reemplaza los siguientes valores:
    • Configura [PROJECT_ID] con el ID del proyecto, que se puede ver en Cloud Console.
    • Establece el valor de [DATA_BACKEND] en el mismo valor que usaste en el instructivo Usa datos estructurados.
    • Si estás usando Cloud SQL o MongoDB, configura los valores en la sección Cloud SQL o Mongo con los mismos valores que usaste en el paso Usar datos estructurados.
    • Configura el valor de [CLOUD_STORAGE_BUCKET] como el nombre de tu bucket de Cloud Storage.
    • En la sección OAuth2 configuration, configura los valores de [GOOGLE_OAUTH2_CLIENT_ID] y [GOOGLE_OAUTH2_CLIENT_SECRET] en el ID de cliente y el secreto de aplicación que creaste anteriormente.

  2. Guarda el archivo config.py y ciérralo.

Si estás usando Cloud SQL:

  1. Abre el archivo app.yaml para editarlo.
  2. Establece el valor de cloudsql-instance en el mismo valor que se usa para [CLOUDSQL_CONNECTION_NAME] en el archivo config.py. Usa el formato project:region:cloudsql-instance. Quita todos los comentarios de esta línea.
  3. Guarda el archivo app.yaml y ciérralo.

Instala dependencias

Para crear un entorno virtual y poder instalar dependencias, usa los siguientes comandos:

Linux/macOS

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

Ejecuta la app en tu máquina local

  1. Inicia un servidor web local:

    python main.py
    
  2. En el navegador, ingresa la siguiente dirección:

    http://localhost:8080
    

Presiona Control+C para salir del trabajador y luego del servidor web local.

Implementar la app en el entorno flexible de App Engine

  1. Implementa la app de muestra:

    gcloud app deploy
    
  2. En el navegador, ingresa la siguiente URL:

    https://PROJECT_ID.REGION_ID.r.appspot.com

    Reemplaza lo siguiente:

Si actualizas la app, implementarás la versión actualizada mediante el mismo comando que usaste para implementarla. La implementación crea una versión nueva de tu app y la promueve a la versión predeterminada. Las versiones anteriores de tu app se conservan, al igual que sus instancias de máquina virtual (VM) asociadas. Todas estas instancias de VM y versiones de la app son recursos facturables. Para reducir costos, borra las versiones no predeterminadas de tu app.

Para borrar la versión de una app:

  1. En la consola de Google Cloud, ve a la página Versiones de App Engine.

    Ir a Versiones

  2. Selecciona la casilla de verificación de la versión no predeterminada de la app que deseas borrar.
  3. Para borrar la versión de la app, haz clic en Borrar.

Para obtener más información sobre la limpieza de recursos facturables, consulta la sección Limpia en el paso final de este instructivo.

Simular un error

Para ver Error Reporting en acción, ingresa intencionalmente un error en tu código y, luego, busca la excepción en la página de Error Reporting de Cloud Console.

  1. En bookshelf/crud.py, agrega una operación que acceda a una variable no definida y genere un ReferenceError en la vista de índice.

    @crud.route("/")
    def list():
       x[3]
    
  2. Implementa la app.

    gcloud app deploy
  3. Accede a la página de índice.

    gcloud app browse

    Puedes ver el mensaje An internal error occurred.

  4. En Cloud Console, ve a la página de Error Reporting de Stackdriver.

    Ir a Python

    Verás el error en la lista.

    Ver errores

  5. Haz clic en el error para ver información sobre el error, como cuándo se vio por última vez, la cantidad de veces que sucedió el error, un histograma con las horas de ocurrencia y el seguimiento de pila.

Comprende el código

Para informar excepciones no detectadas, el código primero usa el decorador errorhandler de Flask y, luego, informa la excepción a Error Reporting mediante las bibliotecas cliente de Cloud para Python.

@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 agrega automáticamente la información de seguimiento y usa una función auxiliar para extraer los detalles relevantes de la solicitud de Flask, que propaga Error Reporting con los seguimientos de pila relevantes y los contextos HTTP para alguna excepción InternalServerError HTTP 500 no detectada en tu app.

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.

Para borrar el proyecto, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.