1. Introducción

Eventarc facilita la conexión de los servicios de Google Cloud con eventos de diversas fuentes. Te permite compilar arquitecturas basadas en eventos en las que los microservicios están distribuidos y con acoplamiento bajo. También se encarga de la transferencia, la entrega, la seguridad, la autorización y el manejo de errores de eventos por ti, lo que mejora la agilidad de los desarrolladores y la resiliencia de las aplicaciones.
Datadog es una plataforma de supervisión y seguridad para aplicaciones en la nube. Reúne registros, métricas y seguimientos de extremo a extremo para que tus aplicaciones, infraestructura y servicios de terceros sean observables.
Workflows es una plataforma de organización completamente administrada que ejecuta servicios en el orden que defines, llamado flujo de trabajo. Estos flujos de trabajo pueden combinar servicios alojados en Cloud Run o Cloud Functions, servicios de Google Cloud, como Cloud Vision AI y BigQuery, y cualquier API basada en HTTP.
En el primer codelab, aprendiste a enrutar las alertas de supervisión de Datadog a Google Cloud con Eventarc. En este segundo codelab, aprenderás a responder a las alertas de supervisión de Datadog con flujos de trabajo. Específicamente, crearás 2 máquinas virtuales de Compute Engine y las supervisarás con un monitor de Datadog. Una vez que se borre 1 de las VMs, recibirás una alerta de Datadog a Workflows a través de Eventarc. A su vez, Workflows volverá a crear la VM borrada para que la cantidad de VMs en ejecución vuelva a ser 2.
Qué aprenderás
- Cómo habilitar la integración de Datadog en Google Cloud
- Cómo crear un flujo de trabajo para verificar y crear VMs de Compute Engine
- Cómo conectar alertas de supervisión de Datadog a flujos de trabajo con Eventarc
- Cómo crear un monitor de Datadog y una alerta sobre las eliminaciones de VMs
2. Configuración y requisitos
Configuración del entorno de autoaprendizaje
- Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.



- El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una string de caracteres que no se utiliza en las API de Google y se puede actualizar en cualquier momento.
- El ID del proyecto debe ser único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). Cloud Console genera automáticamente una string única, que, por lo general, no importa cuál sea. En la mayoría de los codelabs, debes hacer referencia al ID del proyecto (suele ser
PROJECT_ID). Por lo tanto, si no te gusta, genera otro aleatorio o prueba con uno propio y comprueba si está disponible. Después de crear el proyecto, este ID se “congela” y no se puede cambiar. - Además, hay un tercer valor, el Número de proyecto, que usan algunas API. Obtén más información sobre estos tres valores en la documentación.
- A continuación, deberás habilitar la facturación en Cloud Console para usar las API o los recursos de Cloud. Ejecutar este codelab no debería costar mucho, tal vez nada. Si quieres cerrar los recursos para no se te facture más allá de este instructivo, sigue las instrucciones de “limpieza” que se encuentran al final del codelab. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de USD 300.
Inicia Cloud Shell
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 Google Cloud Console, haz clic en el ícono de Cloud Shell en la barra de herramientas en la parte superior derecha:

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:

Esta máquina virtual está cargada con todas las herramientas de desarrollo que necesitarás. 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.
Además, establece una variable REGION en us-central1. Esta es la región en la que crearás recursos más adelante.
PROJECT_ID=[YOUR-PROJECT-ID] REGION=us-central1 gcloud config set core/project $PROJECT_ID
Habilita las APIs
Habilita todos los servicios necesarios con el siguiente comando:
gcloud services enable \ workflows.googleapis.com \ workflowexecutions.googleapis.com
3. Verifica el canal de Datadog
Asegúrate de que el canal de Datadog que creaste en el primer codelab esté activo. En Cloud Shell, ejecuta el siguiente comando para recuperar los detalles del canal:
CHANNEL_NAME=datadog-channel gcloud eventarc channels describe $CHANNEL_NAME --location $REGION
El resultado debería ser similar al siguiente ejemplo:
activationToken: so5g4Kdasda7y2MSasdaGn8njB2 createTime: '2022-03-09T09:53:42.428978603Z' name: projects/project-id/locations/us-central1/channels/datadog-channel provider: projects/project-id/locations/us-central1/providers/datadog pubsubTopic: projects/project-id/topics/eventarc-channel-us-central1-datadog-channel-077 state: ACTIVE uid: 183d3323-8cas-4e95-8d72-7d8c8b27cf9e updateTime: '2022-03-09T09:53:48.290217299Z'
También puedes ver el estado del canal en la consola de Google Cloud:

El estado del canal debe ser ACTIVE. Si no es así, vuelve al primer codelab y sigue los pasos para crear y activar un canal con Datadog.
4. Habilita la integración de Datadog en Google Cloud
Para usar Datadog y supervisar un proyecto, debes habilitar las APIs necesarias para Datadog, crear una cuenta de servicio y conectar la cuenta de servicio a Datadog.
Habilita las APIs para Datadog
gcloud services enable compute.googleapis.com \ cloudasset.googleapis.com \ monitoring.googleapis.com
Crear una cuenta de servicio
La integración de Datadog en Google Cloud usa una cuenta de servicio para llamar a la API de Cloud Logging y recopilar métricas a nivel del nodo de tus instancias de Compute Engine.
Crea una cuenta de servicio para Datadog:
DATADOG_SA_NAME=datadog-service-account
gcloud iam service-accounts create $DATADOG_SA_NAME \
--display-name "Datadog Service Account"
Otorga los siguientes roles de IAM para permitir que la cuenta de servicio de Datadog recopile métricas, etiquetas, eventos y etiquetas de usuario:
DATADOG_SA_EMAIL=$DATADOG_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$DATADOG_SA_EMAIL \
--role roles/cloudasset.viewer
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$DATADOG_SA_EMAIL \
--role roles/compute.viewer
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$DATADOG_SA_EMAIL \
--role roles/monitoring.viewer
Crea y descarga una clave de cuenta de servicio. Necesitas el archivo de claves para completar la integración con Datadog.
Crea un archivo de clave de cuenta de servicio en tu directorio principal de Cloud Shell:
gcloud iam service-accounts keys create ~/key.json \ --iam-account $DATADOG_SA_EMAIL
En Cloud Shell, haz clic en More ⁝ y, luego, selecciona Download File. En el campo File path, ingresa key.json. Para descargar el archivo de claves, haz clic en Download.
Conecta la cuenta de servicio a Datadog
En tu cuenta de Datadog, ve a la sección Integrations y busca el mosaico de integración de Google Cloud:

Coloca el cursor sobre Google Cloud Platform para ir a la página Install:

Para instalar la integración, sube la clave de la cuenta de servicio en la sección Upload Private Key File y, luego, haz clic en Install Integration:

Después de completar la integración, Datadog crea automáticamente varios paneles relacionados con Google Cloud en Dashboards:

5. Crea VMs de Compute Engine
A continuación, crea algunas máquinas virtuales (VMs) de Compute Engine. Supervisarás estas VMs con un monitor de Datadog y responderás a las alertas de Datadog con un flujo de trabajo en Google Cloud.
Crea 2 VMs de Compute Engine:
gcloud compute instances create instance-1 instance-2 --zone us-central1-a
En un minuto, aproximadamente, deberías ver las VMs creadas y en ejecución en la consola de Cloud. Después de un tiempo (por lo general, 10 minutos), también deberías ver estas VMs en Datadog en el panel Google Compute Engine en Dashboards:

6. Crea un flujo de trabajo
Ahora que tienes 2 VMs en ejecución, crea un flujo de trabajo que responda a las alertas de un monitor de Datadog. El flujo de trabajo puede ser tan sofisticado como quieras, pero, en este caso, verificará la cantidad de instancias de VM en ejecución y, si es inferior a 2, creará instancias de VM nuevas para garantizar que haya 2 VMs en ejecución en todo momento.
Crea un archivo workflow-datadog2.yaml con el siguiente contenido:
main:
params: [event]
steps:
- init:
assign:
- projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
- zone: "us-central1-a"
- minInstanceCount: 2
- namePattern: "datadog-instance-##"
- listInstances:
call: googleapis.compute.v1.instances.list
args:
project: ${projectId}
zone: ${zone}
result: listResult
- getInstanceCount:
steps:
- initInstanceCount:
assign:
- instanceCount: 0
- setInstanceCount:
switch:
- condition: ${"items" in listResult}
steps:
- stepA:
assign:
- instanceCount: ${len(listResult.items)}
- findDiffInstanceCount:
steps:
- assignDiffInstanceCount:
assign:
- diffInstanceCount: ${minInstanceCount - instanceCount}
- logDiffInstanceCount:
call: sys.log
args:
data: ${"instanceCount->" + string(instanceCount) + " diffInstanceCount->" + string(diffInstanceCount)}
- endEarlyIfNeeded:
switch:
- condition: ${diffInstanceCount < 1}
next: returnResult
- bulkInsert:
call: googleapis.compute.v1.instances.bulkInsert
args:
project: ${projectId}
zone: ${zone}
body:
count: ${diffInstanceCount}
namePattern: ${namePattern}
instanceProperties:
machineType: "e2-micro"
disks:
- autoDelete: true
boot: true
initializeParams:
sourceImage: projects/debian-cloud/global/images/debian-10-buster-v20220310
networkInterfaces:
- network: "global/networks/default"
result: bulkInsertResult
- returnResult:
return: ${bulkInsertResult}
Ten en cuenta que el flujo de trabajo recibe un evento como parámetro. Este evento provendrá de la supervisión de Datadog a través de Eventarc. Una vez que se recibe el evento, el flujo de trabajo verifica la cantidad de instancias en ejecución y crea instancias de VM nuevas, si es necesario.
Implementa el flujo de trabajo:
WORKFLOW_NAME=workflow-datadog2 gcloud workflows deploy $WORKFLOW_NAME \ --source workflow-datadog2.yaml \ --location $REGION
El flujo de trabajo se implementó, pero aún no se ejecuta. Un activador de Eventarc la ejecutará cuando se reciba una alerta de Datadog.
7. Crea un activador de Eventarc
Ahora puedes conectar eventos del proveedor de Datadog a Workflows con un activador de Eventarc. Usarás el canal y la cuenta de servicio que configuraste en el primer codelab.
Crea un activador con el canal de Datadog, el tipo de evento y también un destino de flujo de trabajo:
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') gcloud eventarc triggers create datadog-trigger2 \ --location $REGION \ --destination-workflow $WORKFLOW_NAME \ --destination-workflow-location $REGION \ --channel $CHANNEL_NAME \ --event-filters type=datadog.v1.alert \ --service-account $PROJECT_NUMBER-compute@developer.gserviceaccount.com
Puedes enumerar los activadores para ver que el activador recién creado esté activo:
gcloud eventarc triggers list --location $REGION NAME: datadog-trigger2 TYPE: datadog.v1.alert DESTINATION: Workflows: workflow-datadog2 ACTIVE: Yes
8. Crea un monitor de Datadog
Ahora crearás un monitor de Datadog y lo conectarás a Eventarc.
El monitor verificará la cantidad de VMs de Compute Engine en ejecución y generará una alerta si es inferior a 2.
Para crear un monitor en Datadog, accede a Datadog. Coloca el cursor sobre Monitors en el menú principal y haz clic en New Monitor en el submenú. Existen muchos tipos de monitores. Elige el tipo de monitor Metric.
En la página New Monitor, crea un monitor con la siguiente configuración:
- Elige el método de detección:
Threshold. - Define la métrica:
gcp.gce.instance.is_runningde (en todas partes)sum by(todo) - Establece las condiciones de alerta:
- Se activa cuando la métrica es
belowel umbralat least oncedurante los últimos5 minutes - Umbral de alerta:
< 2 - Notifica a tu equipo:
@eventarc_<your-project-id>_<your-region>_<your-channel-name> - Ejemplo de nombre de supervisor:
Compute Engine instances < 2
Ahora, presiona Create en la parte inferior para crear el monitor.
9. Prueba el monitor y el activador
Para probar el monitor de Datadog, el activador de Eventarc y, finalmente, el flujo de trabajo, borrarás una de las VMs:
gcloud compute instances delete instance-2 --zone us-central1-a
Después de unos segundos, deberías ver que se borró la instancia en la consola de Google Cloud.
Hay un poco de latencia para que este cambio aparezca en Datadog. Después de un tiempo (por lo general, 10 minutos), deberías ver el monitor en Datadog para detectar y alertar sobre esto en la sección Manage Monitors:

Una vez que se active la alerta del monitor de Datadog, deberías ver que esa alerta se dirige a Workflows a través de Eventarc. Si revisas los registros de Workflows, verás que Workflows verifica la diferencia entre el recuento de instancias actual y el recuento de instancias esperado:
2022-03-28 09:30:53.371 BST instanceCount->1 diffInstanceCount->1
En respuesta a esa alerta, crea una instancia de VM nueva con el prefijo datadog-instance-##.
Al final, seguirás teniendo 2 VMs en tu proyecto: una que creaste inicialmente y la otra que crearon los flujos de trabajo después de la alerta de Datadog.

10. Felicitaciones
¡Felicitaciones! Completaste el codelab.
Temas abordados
- Cómo habilitar la integración de Datadog en Google Cloud
- Cómo crear un flujo de trabajo para verificar y crear VMs de Compute Engine
- Cómo conectar alertas de supervisión de Datadog a flujos de trabajo con Eventarc
- Cómo crear un monitor de Datadog y una alerta sobre las eliminaciones de VMs