Enruta alertas de supervisión de Datadog a Google Cloud con Eventarc (parte 2)

1. Introducción

cb762f29e9183a3f.png 8c7ca8629bc25d9c.png 1c05e3d0c2bd2b45.png

Eventarc facilita la conexión de los servicios de Google Cloud con eventos de una variedad de fuentes. Te permite crear arquitecturas controladas por eventos en las que los microservicios están vinculados y distribuidos de manera flexible. También se encarga de la transferencia de eventos, la entrega, la seguridad, la autorización y el manejo de errores por ti, lo que mejora la agilidad del desarrollador y la resiliencia de las aplicaciones.

Datadog es una plataforma de supervisión y seguridad para aplicaciones en la nube. Reúne seguimientos, métricas y registros 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 un orden que tú definas 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 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 Workflows. 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 en Workflows a través de Eventarc. A su vez, Workflows volverá a crear la VM borrada para volver a 2 la cantidad de VMs en ejecución.

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 las alertas de supervisión de Datadog a Workflows con Eventarc.
  • Cómo crear un supervisor de Datadog y crear alertas sobre las eliminaciones de VM

2. Configuración y requisitos

Configuración del entorno de autoaprendizaje

  1. 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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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.
  1. 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:

55efc1aaa7a4d3ad.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:

7ffe5cbb04455448.png

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, configura el 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:

8399d528ccbd4c20.png

El estado del canal debe ser ACTIVE. De lo contrario, 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

Si quieres usar Datadog para supervisar un proyecto, debes habilitar las APIs necesarias para Datadog, crear una cuenta de servicio y conectarla 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 realizar llamadas a la API de Cloud Logging y recopilar métricas a nivel de 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"

Habilita la cuenta de servicio de Datadog para recopilar métricas, etiquetas, eventos y etiquetas de usuario. Para ello, otorga los siguientes roles de IAM:

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 claves de la cuenta de servicio en el 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 la tarjeta de integración de Google Cloud:

cf1ffa6547fba3e4.png

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

31b365a31bc50cc8.png

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:

92e475e4da7f826.png

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

66fdf2d26e4710d.png

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

Deberías ver las VMs creadas y en ejecución en aproximadamente un minuto en la consola de Cloud. Después de un tiempo (por lo general, 10 min), también deberías ver estas VMs en Datadog, en el panel de Google Compute Engine, en Dashboards:

78a51374c1d0c11e.png

6. Crea un flujo de trabajo

Ahora que tienes 2 VMs en ejecución, crea un flujo de trabajo que responda a las alertas desde 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á nuevas instancias de VM para asegurarse de 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 nuevas instancias de VM si es necesario.

Implementa el flujo de trabajo:

WORKFLOW_NAME=workflow-datadog2
gcloud workflows deploy $WORKFLOW_NAME \
  --source workflow-datadog2.yaml \
  --location $REGION

Se implementó el flujo de trabajo, pero aún no se está ejecutando. Lo ejecutará un activador de Eventarc cuando se reciba una alerta de Datadog.

7. Crea un activador de Eventarc

Ya está todo listo para 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 supervisor 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 lo siguiente:

  1. Elige el método de detección: Threshold.
  2. Define la métrica: gcp.gce.instance.is_running de (en todas partes) sum by (todo)
  3. Establece condiciones de alerta:
  4. Se activa cuando la métrica below el umbral at least once durante los últimos 5 minutes
  5. Umbral de alerta: < 2
  6. Notificar a tu equipo: @eventarc_<your-project-id>_<your-region>_<your-channel-name>
  7. Ejemplo de nombre de supervisor: Compute Engine instances < 2

Ahora, presiona Create en la parte inferior para crear el monitor.

9. Prueba el supervisor 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 la instancia borrada 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 min), deberías ver el monitor en Datadog para detectarlo y alertarlo en la sección Manage Monitors:

50f93d560b6c1973.png

Una vez que Datadog supervise las alertas, deberías ver que esa alerta va a Workflows a través de Eventarc. Si revisas los registros de Workflows, deberías ver que Workflows verifica la diferencia entre el recuento de instancias actual y el esperado:

2022-03-28 09:30:53.371 BST instanceCount->1 diffInstanceCount->1

Para responder 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 otra que creó Workflows después de la alerta de Datadog.

11e42028e7142690.png

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 las alertas de supervisión de Datadog a Workflows con Eventarc.
  • Cómo crear un supervisor de Datadog y crear alertas sobre las eliminaciones de VM