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 pueden usarse para determinar la disponibilidad de una aplicación mediante la supervisión de eventos o patrones específicos en los registros.** Cuando recibes alertas sobre interrupciones y otros problemas para los usuarios, puedes tomar medidas para minimizar el impacto en tus usuarios y clientes.

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

Los errores pueden surgir de cualquier cantidad de causas, desde los errores de los usuarios hasta el mantenimiento de los sistemas, las actualizaciones y hasta factores externos al sistema, como el mal clima. La clave en las alertas no es tratar de 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

Un tema de Pub/Sub se puede usar como un 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 a Pub/Sub. Luego, debes crear un canal de notificaciones de Cloud Monitoring que use el tema de Pub/Sub como destino.

Cuando se activa una alerta, Cloud Monitoring envía un mensaje al tema de Pub/Sub. 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 errores en una parte específica de la app y use el tema de Pub/Sub como canal de notificaciones.

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 errores. Los conceptos que no son relevantes y el código de la aplicación se pasan por alto y se proporcionan para que simplemente los copies y pegues.

Requisitos

  • Una cuenta de Google Cloud con permisos para lo siguiente:
  • 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 Crear.

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

Aquí hay algunos detalles adicionales sobre cada paso:

  • Nombre: El nombre del proyecto debe ser único dentro de la 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 cómo crear proyectos.

3. Implementa la aplicación de la API

¿De qué se trata la API o aplicación 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 de inventario de elementos específicos.

Una vez que implementamos la API y suponemos que está alojada en https://<somehost>, podemos acceder a los extremos de la API de la siguiente manera:

https://<somehost>/inventory

Esto mostrará una lista de todos los artículos de productos con los niveles de inventario disponibles.

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

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

Los datos de respuesta que se muestran están en formato JSON.

Nota: Esta aplicación de la API solo tiene fines de demostración y no representa una implementación de la API segura y sólida. Se diseñó para que podamos acceder a una aplicación rápida que nos permita explorar el propósito clave del lab, es decir, Google Cloud Operations.

Datos de muestra y solicitud/respuesta de la API

Para simplificar el proceso, la aplicación no funciona con una base de datos en el backend. Contiene 3 IDs de productos de muestra y los niveles de inventario a mano.

Número de identificación del producto

Nivel de inventario de mano

I-1

10

I-2

20

I-3

30

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

Solicitud a la API

Respuesta de la API

https://&lt;somehost&gt;/inventory

[ { &quot;I-1&quot;: 10, &quot;I-2&quot;: 20, &quot;I-3&quot;: 30 }]

https://&lt;somehost&gt;/inventory/I-1

{ &quot;productid&quot;: &quot;I-1&quot;, &quot;qty&quot;: 10}

https://&lt;somehost&gt;/inventory/I-2

{ &quot;productid&quot;: &quot;I-2&quot;, &quot;qty&quot;: 20}

https://&lt;somehost&gt;/inventory/I-200

{ &quot;productid&quot;: I-200, &quot;qty&quot;: -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. Todo tu trabajo en este lab se puede hacer simplemente con un navegador.

Configura gcloud

En Cloud Shell, establece el 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

Se creará una carpeta titulada cloud-code-sample-repository en esta carpeta.

Ejecuta la aplicación en Cloud Shell (opcional)

Puedes ejecutar la aplicación de manera local si sigues 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 (al momento de escribir, Cloud Shell tiene instalado Python 3.9.x y usaremos la versión predeterminada. Si planeas ejecutarlo de manera local en tu laptop, puedes optar por Python 3.8 o superior) :

$ python app.py

  1. Puedes ejecutar el siguiente comando para iniciar el servidor 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, y eso está bien. Modifica la URL y cámbiala para que solo tenga /inventory después del nombre de host.

Por ejemplo: en mi máquina, se ve así:

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

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

709d57ee2f0137e4.png

  1. Puedes detener el servidor ahora; para ello, ve a la terminal y presiona Ctrl + C

Implemente la aplicación

Ahora, implementaremos esta aplicación de la API en Cloud Run. El proceso implica usar el cliente de línea de comandos de gcloud para ejecutar el comando de implementación del código en Cloud Run.

En la terminal, ejecuta el siguiente comando de gcloud:

$ gcloud run deploy --source .

Para ello, deberás responder varias preguntas, y algunos de los puntos se mencionan a continuación:

  1. Nombre del servicio (python-flask-api): Puedes elegir este valor predeterminado o algo como my-inventory-api
  2. La API [run.googleapis.com] no está habilitada en el proyecto [613162942481]. ¿Deseas habilitarla y volver a intentarlo (el proceso tardará unos minutos)? (y/N)? Y
  3. Especifica una región: Elige 31 (us-west-1)
  4. La API [artifactregistry.googleapis.com] no está habilitada en el proyecto [613162942481]. ¿Deseas habilitarla y volver a intentarlo (el proceso tardará unos minutos)? (y/N)? Y
  5. La implementación desde el código fuente requiere un repositorio de Docker de Artifact Registry para almacenar 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. ¿Quieres permitir invocaciones no autenticadas de [my-inventory-api] (y/N)? Y

Finalmente, esto iniciará el proceso para tomar tu código fuente, alojarlo en contenedores, 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 deberías ver cómo se completa con la URL del servicio que se te muestra.

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 la aplicación de la API 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 esto <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

Debería cumplir con las especificaciones que proporcionamos en una sección anterior con un ejemplo de Solicitud y Respuesta de la API.

Obtener detalles del servicio de Cloud Run

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

Desde el menú principal, navega a Cloud Run. Se mostrará la lista de servicios que ejecutas en Cloud Run. Deberías ver el servicio que acabas de implementar. Según el nombre que hayas seleccionado, deberías ver algo como esto:

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 de servicio que puedes presionar 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's operations suite ahora.

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 estás allí. 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. Lo necesitarás para la próxima sección.

20848252ee83df93.png

5. Crea una política de alertas para 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 Registro.

Esto mostrará una interfaz de registro en la que puedes seleccionar o anular la selección de varios recursos (proyecto, recurso de Google Cloud, nombres de servicios, etc.) junto con 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 producto que no sean I-1, I-2 ni I-3. Por ejemplo: una solicitud incorrecta es:

https://&lt;SERVICE_URL&gt;/inventory/I-999

Ahora, buscaremos todas las WARNINGs generadas por nuestra API cuando se proporcione un ID del producto incorrecto en la consulta.

Crea una política de alertas personalizada basada en registros para los errores

Supongamos que queremos estar atentos a un mensaje de error muy específico para una parte de la aplicación. Supongamos que notamos una gran cantidad de errores al buscar IDs de productos. Este problema es un síntoma de varios 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 alertarlo, necesitamos crear una política basada en los datos de nuestros registros de errores.

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

resource.type=&quot;cloud_run_revision&quot;

textPayload =~ "ADVERTENCIA en la app: Se recibió una solicitud de inventario correspondiente a un productid incorrecto"

Debería verse algo similar a esto:

f672154cfebf0051.png

  1. Haz clic en Ejecutar consulta. Esto te mostrará todas las solicitudes que han llegado y que tienen este problema.

77c190e3a2fab6bf.png

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

4cd3fcf142189376.png

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

b82446854bad87fc.png

  1. Usa la consulta inicial para obtener 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 notificación y la duración del incidente. A los fines del ejemplo, puedes usar los valores mínimos de cada uno de ellos:

bb3d96448ec998a1.png

  1. Por último, para “¿Quién debe recibir la notificación?”, selecciona el canal de notificaciones de Pub/Sub que creaste antes:

3593c48c29d4b76c.png

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

6. Felicitaciones

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