Alertas: Errores basados en registros en temas de Pub/Sub

1. Introducción

Última actualización: 21 de junio de 2023

Alertas sobre errores basados en registros para la disponibilidad

Las alertas basadas en registros se pueden usar para determinar la disponibilidad de una aplicación supervisando eventos o patrones específicos en los registros*.* Si recibes alertas sobre interrupciones o cualquier otro problema que afecte a los usuarios, puedes tomar medidas para minimizar el impacto en tus usuarios y clientes.

Si bien las verificaciones de tiempo de actividad proporcionan una instantánea general de la disponibilidad, puede ser más preciso usar los mensajes de error derivados de los registros como indicadores de tipos más específicos de falta de disponibilidad y tener una idea de qué proporción de usuarios experimenta un problema.

Los errores pueden surgir por una gran cantidad de causas, desde errores del usuario hasta mantenimiento de los sistemas, actualizaciones y hasta factores externos al sistema, como el mal clima. La clave para las alertas no es intentar anticipar todas las causas posibles, sino elegir algunos síntomas clave que puedan servir como punto de partida para la solución de problemas.

Temas de Pub/Sub como canal de notificaciones de alertas

Se puede usar un tema de Pub/Sub como canal de notificaciones de Google Cloud Monitoring para enviar alertas a una suscripción de Pub/Sub. Esto te permite integrar tus alertas de Cloud Monitoring con otros sistemas, incluidos los servicios de notificación de terceros.

Para usar un tema de Pub/Sub como canal de notificaciones, primero debes crear un tema y una suscripción de Pub/Sub. Luego, debes crear un canal de notificaciones de Cloud Monitoring que use el tema de Pub/Sub como destino.

Cuando se active una alerta, Cloud Monitoring enviará un mensaje al tema de Pub/Sub. Luego, el suscriptor de la suscripción a Pub/Sub puede procesar el mensaje y tomar las medidas adecuadas.

Qué compilarás

En este codelab, implementarás una app, crearás un tema de Pub/Sub y crearás una alerta basada en registros que verifique si hay errores en una parte específica de la app y use el tema de Pub/Sub como canal de notificación.

Qué aprenderás

  • Cómo crear un tema de Pub/Sub
  • Cómo crear una alerta basada en registros

Este codelab se enfoca en crear una alerta para los errores. Los conceptos y el código de la aplicación que no son relevantes se pasan por alto y se proporcionan para que simplemente los copies y pegues.

Requisitos

  • Una cuenta de Google Cloud con permisos para realizar las siguientes acciones:
  • Implementa aplicaciones de Cloud Run
  • Crea temas de Pub/Sub
  • Crea alertas

2. Cómo prepararte

Selecciona o crea un proyecto de Google Cloud

Para seleccionar un proyecto existente, usa el menú desplegable:

b35bf95b8bf3d5d8.png

Para crear un proyecto nuevo en Google Cloud, puedes seguir estos pasos:

  1. Ve a Google Cloud Platform Console.
  2. Haz clic en el botón Crear proyecto.
  3. Ingresa un nombre para tu proyecto.
  4. Selecciona una cuenta de facturación para tu proyecto.
  5. Haz clic en el botón Create (Crear).

Se creará tu proyecto y se te dirigirá al panel del proyecto. Desde allí, puedes comenzar a usar los servicios de Google Cloud.

A continuación, se incluyen algunos detalles adicionales sobre cada paso:

  • Nombre: El nombre de tu proyecto debe ser único dentro de tu organización.
  • Cuenta de facturación: Puedes usar una cuenta de facturación existente o crear una nueva.
  • Crear: Una vez que hayas ingresado toda la información requerida, haz clic en el botón Crear para crear tu proyecto.

Para obtener más información, consulta la documentación de Google Cloud sobre la creación de proyectos.

3. Implementa la aplicación de API

¿De qué trata la aplicación o API de muestra?

Nuestra aplicación es una aplicación simple de la API de Inventory que expone un extremo de la API de REST con un par de operaciones para enumerar los elementos del inventario y obtener el recuento del inventario de un elemento específico.

Una vez que implementemos la API y suponiendo que se aloja en https://<somehost>, podemos acceder a los extremos de la API de la siguiente manera:

https://<somehost>/inventory

Se enumerarán todos los artículos del producto con los niveles de inventario disponibles.

https://<somehost>/inventory/{productid}

Esto proporcionará un solo registro con el productid y el nivel de inventario disponible para ese producto.

Los datos de respuesta devueltos están en formato JSON.

Nota: Esta aplicación de la API es solo para fines de demostración y no representa una implementación segura y sólida de la API. El objetivo es tener una aplicación disponible rápidamente para explorar el propósito clave del lab, es decir, las operaciones de Google Cloud.

Datos de ejemplo y solicitud/respuesta de la API

Para simplificar el proceso, la aplicación no se basa en una base de datos en el backend. Contiene 3 IDs de productos de muestra y sus niveles de inventario disponibles.

ID del producto

Nivel de inventario disponible

I-1

10

I-2

20

I-3

30

A continuación, se muestran ejemplos de solicitudes y respuestas de la API:

Solicitud a la API

Respuesta de la API

https://<somehost>/inventory

[ { "I-1": 10, "I-2": 20, "I-3": 30 }]

https://<somehost>/inventory/I-1

{ "productid": "I-1", "qty": 10}

https://<somehost>/inventory/I-2

{ "productid": "I-2", "qty": 20}

https://<somehost>/inventory/I-200

{ "productid": I-200, "qty": -1}

Clona el repositorio

Si bien Google Cloud y Spanner se pueden operar de manera remota desde tu laptop, en este codelab usarás Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.

En GCP Console, haga clic en el ícono de Cloud Shell en la barra de herramientas superior derecha:

bce75f34b2c53987.png

El aprovisionamiento y la conexión al entorno deberían tomar solo unos minutos. Cuando termine el proceso, debería ver algo como lo siguiente:

f6ef2b5f13479f3a.png

Esta máquina virtual está cargada con todas las herramientas de desarrollo que necesitas. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Puedes realizar todo tu trabajo en este lab usando simplemente un navegador.

Configura gcloud

En Cloud Shell, establece tu ID del proyecto y guárdalo como la variable PROJECT_ID.

PROJECT_ID=[YOUR-PROJECT-ID]

gcloud config set project $PROJECT_ID

Ahora, ejecuta el siguiente comando:

$ git clone https://github.com/rominirani/cloud-code-sample-repository.git

Esto creará una carpeta llamada cloud-code-sample-repository en esta carpeta.

(Opcional) Ejecuta la aplicación en Cloud Shell

Para ejecutar la aplicación de forma local, sigue estos pasos:

  1. Desde la terminal, navega a la versión de Python de la API con el siguiente comando:

$ cd cloud-code-sample-repository

$ cd python-flask-api

  1. En la terminal, proporciona el siguiente comando (en el momento de la redacción, Cloud Shell incluye Python 3.9.x instalado y usaremos la versión predeterminada. Si planeas ejecutarlo de forma local en tu laptop, puedes usar Python 3.8 o una versión posterior:

$ python app.py

  1. Puedes ejecutar el siguiente comando para iniciar el servidor de Python de forma local.

1f798fbddfdc2c8e.png 46edf454cc70c5a6.png

Haz clic en Vista previa en el puerto 8080. 5. Se abrirá una ventana del navegador. Verás un error 404, pero no te preocupes. Modifica la URL para que solo tenga /inventory después del nombre de host.

Por ejemplo, en mi máquina, se ve de la siguiente manera:

https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory

Se mostrará la lista de elementos de inventario, como se explicó anteriormente:

709d57ee2f0137e4.png

  1. Ahora puedes detener el servidor. Para ello, ve a la terminal y presiona Ctrl + C.

Implemente la aplicación

Ahora implementaremos esta aplicación de API en Cloud Run. El proceso implicó el uso del cliente de línea de comandos de gcloud para ejecutar el comando que implementa el código en Cloud Run.

En la terminal, ejecuta el siguiente comando de gcloud:

$ gcloud run deploy --source .

Se te harán varias preguntas, y algunos de los puntos se mencionan a continuación:

  1. Nombre del servicio (python-flask-api): Puedes usar este valor predeterminado o elegir algo como my-inventory-api.
  2. API [run.googleapis.com] not enabled on project [613162942481]. Would you like to enable and retry (this will take a few minutes)? (y/N)? Y
  3. Especifica una región: Elige 31 (us-west-1)
  4. API [artifactregistry.googleapis.com] not enabled on project [613162942481]. Would you like to enable and retry (this will take a few minutes)? (y/N)? Y
  5. La implementación desde el código fuente requiere un repositorio de Docker de Artifact Registry para almacenar los contenedores compilados. Se creará un repositorio llamado [cloud-run-source-deploy] en la región [us-west1].
  6. Do you want to continue (Y/n)? Y
  7. Allow unauthenticated invocations to [my-inventory-api] (y/N)? Y

Finalmente, esto iniciará el proceso para tomar tu código fuente, alojarlo en un contenedor, enviarlo a Artifact Registry y, luego, implementar el servicio y la revisión de Cloud Run. Debes tener paciencia durante este proceso (puede tardar entre 3 y 4 minutos) y verás que se completa con la URL del servicio.

A continuación, se muestra un ejemplo de ejecución:

87ba8dbf88e8cfa4.png

Prueba la aplicación

Ahora que implementamos la aplicación en Cloud Run, puedes acceder a ella de la siguiente manera:

  1. Toma nota de la URL del servicio del paso anterior. Por ejemplo, en mi configuración, se muestra como https://my-inventory-api-bt2r5243dq-uw.a.run.app. Llamemos a este <SERVICE_URL>.
  2. Abre un navegador y accede a las siguientes 3 URLs para los extremos de la API:
  3. <SERVICE_URL>/inventory
  4. <SERVICE_URL>/inventory/I-1
  5. <SERVICE_URL>/inventory/I-100

Debe cumplir con las especificaciones que proporcionamos en una sección anterior con una solicitud y respuesta de API de muestra.

Obtén detalles del servicio de Cloud Run

Implementamos nuestro servicio de API en Cloud Run, un entorno de procesamiento sin servidores. Podemos visitar el servicio de Cloud Run a través de la consola de Google Cloud en cualquier momento.

En el menú principal, navega a Cloud Run. Se mostrará la lista de servicios que se ejecutan en Cloud Run. Deberías ver el servicio que acabas de implementar. Según el nombre que seleccionaste, deberías ver algo como lo siguiente:

2633965c4bc957cc.png

Haz clic en el nombre del servicio para ver los detalles. A continuación, se muestran los detalles de la muestra:

33042ae64322ce07.png

Observa la URL, que no es más que la URL del servicio que puedes ingresar en el navegador y acceder a la API de Inventory que acabamos de implementar. Consulta las métricas y otros detalles.

Comencemos con Google Cloud Operations Suite.

4. Crea un tema de Pub/Sub para recibir la notificación de alerta

Para crear un tema de Pub/Sub, puedes seguir estos pasos en la consola de Google Cloud:

  1. Busca Pub/Sub en el cuadro de búsqueda y navega a Pub/Sub. 935028bd8f6328ef.png
  2. Haz clic en la pestaña Temas si aún no lo hiciste. 7fd8bf91386a88fd.png
  3. Haz clic en el botón Crear tema. cd9d197f9023c41b.png
  4. Ingresa un nombre reconocible para tu tema.

173f313b4a3c4934.png

  1. Haz clic en el botón Crear. ca9a02477da21a44.png
  2. Copia el Nombre del tema con el botón del ícono de copiar. La necesitarás en la siguiente sección.

20848252ee83df93.png

5. Crea una política de alertas para los errores

Explora los registros de errores

Para ver los registros de errores de la aplicación, haz lo siguiente:

Haz clic en la pestaña Logging.

Se mostrará una interfaz de registro en la que podrás seleccionar o anular la selección de varios recursos (proyecto, recurso de Google Cloud, nombres de servicios, etcétera) junto con los niveles de registro para filtrar los mensajes de registro según sea necesario.

6605b68395185b89.png

Simula algunas solicitudes no válidas al servicio de inventario proporcionando IDs de productos que no sean I-1, I-2 ni I-3. Por ejemplo, una solicitud incorrecta es la siguiente:

https://<SERVICE_URL>/inventory/I-999

Ahora buscaremos todas las ADVERTENCIAS que generó nuestra API cuando se proporcionó un ID de producto incorrecto en la consulta.

Cómo crear una política de alertas personalizada basada en registros para errores

Supongamos que queremos estar atentos a la aparición de un mensaje de error muy específico para una parte de la aplicación. Por ejemplo, si notamos una gran cantidad de errores en la búsqueda de IDs de productos. Este problema es un síntoma de muchos problemas posibles (un vínculo incorrecto, una inconsistencia en la base de datos o un bot que enumera nuestro sitio). Si bien sería difícil o imposible imaginar todas las causas posibles, la aplicación que envía este mensaje incluso una vez es un problema de alto nivel del que queremos estar al tanto. Para generar una alerta sobre este problema, debemos crear una política basada en los datos de nuestros registros de errores.

  1. En el cuadro de consulta, inserta los siguientes parámetros de consulta:

resource.type="cloud_run_revision"

textPayload =~ "WARNING in app: Received inventory request for incorrect productid"

Debería verse algo similar a esto:

f672154cfebf0051.png

  1. Haz clic en Ejecutar consulta. Luego, se mostrarán todas las solicitudes que se recibieron y que tienen este problema.

77c190e3a2fab6bf.png

  1. Para convertir lo anterior en una alerta, haz clic en el botón Crear alerta que se encuentra en el Explorador de registros justo debajo del campo de consulta, a la derecha:

4cd3fcf142189376.png

  1. Aparecerá el formulario para crear una política de alertas basada en registros.

b82446854bad87fc.png

  1. Usa la consulta inicial para los registros que se incluirán en la alerta:

resource.type="cloud_run_revision"

textPayload =~ "WARNING in app: Received inventory request for incorrect productid"

764227db73ec3de6.png

  1. Establece la frecuencia de las notificaciones y la duración del incidente. Para el ejemplo, puedes usar los valores mínimos para cada uno:

bb3d96448ec998a1.png

  1. Por último, en "¿Quién debe recibir la notificación?", selecciona el canal de notificaciones de Pub/Sub que creaste anteriormente:

3593c48c29d4b76c.png

  1. Haz clic en Guardar. Para ver y administrar la política de alertas, visita la página Alertas y consulta la sección Políticas: ca08ea380fb37c91.png

6. Felicitaciones

Felicitaciones. Configuraste correctamente tu verificación de tiempo de actividad para enviar alertas a Pub/Sub.