Instrada gli avvisi di monitoraggio di Datadog a Google Cloud con Eventarc (parte 2)

1. Introduzione

cb762f29e9183a3f.png 3c7ca8629bc25d9c.png 1c05e3d0c2bd2b45.png

Eventarc semplifica la connessione dei servizi Google Cloud a eventi provenienti da una varietà di origini. Consente di creare architetture basate su eventi in cui i microservizi sono a basso accoppiamento e distribuiti. Si occupa anche dell'importazione, della distribuzione, della sicurezza, dell'autorizzazione e della gestione degli errori degli eventi per te, migliorando l'agilità degli sviluppatori e la resilienza delle applicazioni.

Datadog è una piattaforma di monitoraggio e sicurezza per le applicazioni cloud. Riunisce tracce, metriche e log end-to-end per rendere osservabili applicazioni, infrastruttura e servizi di terze parti.

Flussi di lavoro è una piattaforma di orchestrazione completamente gestita che esegue i servizi in un ordine definito da te chiamato flusso di lavoro. Questi flussi di lavoro possono combinare servizi ospitati su Cloud Run o Cloud Functions, servizi Google Cloud come Cloud Vision AI e BigQuery e qualsiasi API basata su HTTP.

Nel primo codelab, hai imparato come instradare gli avvisi di monitoraggio di Datadog a Google Cloud con Eventarc. In questo secondo codelab, imparerai a rispondere agli avvisi di monitoraggio di Datadog con Workflows. In particolare, creerai due macchine virtuali Compute Engine e le monitorerai con un monitoraggio Datadog. Dopo aver eliminato una delle VM, riceverai un avviso da Datadog a Workflows tramite Eventarc. A sua volta, Workflows ricrea la VM eliminata per riportare il numero di VM in esecuzione a 2.

Cosa imparerai a fare

  • Come abilitare l'integrazione di Datadog con Google Cloud.
  • Come creare un flusso di lavoro per controllare e creare VM di Compute Engine.
  • Come connettere gli avvisi di monitoraggio di Datadog a Workflows con Eventarc.
  • Creare un monitoraggio Datadog e un avviso sulle eliminazioni delle VM.

2. Configurazione e requisiti

Configurazione dell'ambiente da seguire in modo autonomo

  1. Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Il Nome progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google e può essere aggiornata in qualsiasi momento.
  • L'ID progetto deve essere univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca. di solito non ti importa cosa sia. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (che solitamente è identificato come PROJECT_ID), quindi, se non ti piace, generane un altro a caso oppure puoi fare un tentativo personalizzato e controllare se è disponibile. Poi c'è "congelato" dopo la creazione del progetto.
  • C'è un terzo valore, il numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
  1. Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare le risorse/le API Cloud. Eseguire questo codelab non dovrebbe costare molto. Per arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial, segui eventuali "pulizie" istruzioni riportate alla fine del codelab. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.

Avvia Cloud Shell

Anche se Google Cloud può essere utilizzato da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.

Dalla console Google Cloud, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:

55efc1aaa7a4d3ad.png

Dovrebbe richiedere solo qualche istante per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere una schermata simile al seguente:

7ffe5cbb04455448.png

Questa macchina virtuale viene caricata con tutti gli strumenti di sviluppo necessari. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Tutto il lavoro in questo lab può essere svolto semplicemente con un browser.

Configura gcloud

In Cloud Shell, imposta l'ID progetto e salvalo come variabile PROJECT_ID.

Inoltre, imposta una variabile REGION su us-central1. Questa è la regione in cui creerai le risorse in seguito.

PROJECT_ID=[YOUR-PROJECT-ID]
REGION=us-central1
gcloud config set core/project $PROJECT_ID

Abilita API

Abilita tutti i servizi necessari:

gcloud services enable \
  workflows.googleapis.com \
  workflowexecutions.googleapis.com

3. Verifica il canale Datadog

Assicurati che il canale Datadog che hai creato nel primo codelab sia attivo. In Cloud Shell, esegui questo comando per recuperare i dettagli del canale:

CHANNEL_NAME=datadog-channel
gcloud eventarc channels describe $CHANNEL_NAME --location $REGION

L'output dovrebbe essere simile al seguente:

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'

Puoi anche vedere lo stato del canale nella console Google Cloud:

8399d528ccbd4c20.png

Lo stato del canale deve essere ACTIVE. In caso contrario, torna al primo codelab e segui i passaggi per creare e attivare un canale con Datadog.

4. Abilita l'integrazione con Google Cloud di Datadog

Per utilizzare Datadog per monitorare un progetto, devi abilitare le API necessarie per Datadog, creare un account di servizio e connettere l'account di servizio a Datadog.

Abilita le API per Datadog

gcloud services enable compute.googleapis.com \
  cloudasset.googleapis.com \
  monitoring.googleapis.com

Creare un account di servizio

L'integrazione di Google Cloud di Datadog utilizza un account di servizio per effettuare chiamate all'API Cloud Logging e raccogliere metriche a livello di nodo dalle tue istanze Compute Engine.

Crea un account di servizio per Datadog:

DATADOG_SA_NAME=datadog-service-account

gcloud iam service-accounts create $DATADOG_SA_NAME \
    --display-name "Datadog Service Account"

Abilita l'account di servizio Datadog per raccogliere metriche, tag, eventi ed etichette utente concedendo i seguenti ruoli 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

Creare e scaricare una chiave dell'account di servizio. Il file della chiave ti serve per completare l'integrazione con Datadog.

Crea un file della chiave dell'account di servizio nella home directory di Cloud Shell:

gcloud iam service-accounts keys create ~/key.json \
  --iam-account $DATADOG_SA_EMAIL

In Cloud Shell, fai clic su More ⁝ e seleziona Download File. Nel campo File path, inserisci key.json. Per scaricare il file della chiave, fai clic su Download.

Connetti l'account di servizio a Datadog

Nel tuo account Datadog, vai alla sezione Integrations e cerca il riquadro di integrazione Google Cloud:

cf1ffa6547fba3e4.png

Passa il mouse sopra Google Cloud Platform per passare alla pagina Install:

31b365a31bc50cc8.png

Installa l'integrazione caricando la chiave dell'account di servizio nella sezione Upload Private Key File, quindi fai clic su Install Integration:

92e475e4da7f826.png

Dopo aver completato l'integrazione, Datadog crea automaticamente una serie di dashboard correlate a Google Cloud in Dashboards:

66fdf2d26e4710d.png

5. Creazione di VM di Compute Engine

Poi, crea alcune macchine virtuali (VM) Compute Engine. Monitorerai queste VM con un monitoraggio Datadog e risponderai agli avvisi di Datadog con un flusso di lavoro in Google Cloud.

Crea due VM di Compute Engine:

gcloud compute instances create instance-1 instance-2 --zone us-central1-a

Dovresti vedere le VM create e in esecuzione tra circa un minuto nella console Cloud. Dopo un po' di tempo (in genere 10 minuti), dovresti anche vedere queste VM in Datadog nella dashboard Google Compute Engine in Dashboards:

78a51374c1d0c11e.png

6. Crea un flusso di lavoro

Ora che sono in esecuzione due VM, crea un flusso di lavoro che risponda agli avvisi di un monitoraggio Datadog. Il flusso di lavoro può essere sofisticato come vuoi, ma in questo caso controllerà il numero di istanze VM in esecuzione e, se è inferiore a 2, creerà nuove istanze VM per garantire che ci siano sempre 2 VM in esecuzione.

Crea un file workflow-datadog2.yaml con il seguente contenuto:

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}

Tieni presente che il flusso di lavoro riceve un evento come parametro. Questo evento proverrà dal monitoraggio di Datadog tramite Eventarc. Una volta ricevuto l'evento, il flusso di lavoro controlla il numero di istanze in esecuzione e, se necessario, crea nuove istanze VM.

Esegui il deployment del flusso di lavoro:

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

Il deployment del flusso di lavoro è stato eseguito, ma non è ancora in esecuzione. Verrà eseguito da un trigger Eventarc alla ricezione di un avviso Datadog.

7. Crea un trigger Eventarc

Ora è tutto pronto per connettere gli eventi del provider Datadog a Workflows con un trigger Eventarc. Utilizzerai il canale e l'account di servizio che hai configurato nel primo codelab.

Crea un trigger con il canale Datadog, il tipo di evento e anche una destinazione del flusso di lavoro:

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

Puoi elencare gli attivatori per verificare che quello appena creato sia attivo:

gcloud eventarc triggers list --location $REGION

NAME: datadog-trigger2
TYPE: datadog.v1.alert
DESTINATION: Workflows: workflow-datadog2
ACTIVE: Yes

8. Crea un monitoraggio Datadog

Ora creerai un monitoraggio Datadog e lo connetterai a Eventarc.

Il monitoraggio controllerà il numero di VM di Compute Engine in esecuzione e invierà un avviso se è inferiore a 2.

Per creare un monitoraggio in Datadog, accedi a Datadog. Passa il mouse sopra Monitors nel menu principale e fai clic su New Monitor nel sottomenu. Esistono molti tipi di monitor. Scegli il tipo di monitor Metric.

Nella pagina New Monitor, crea un monitor con quanto segue:

  1. Scegli il metodo di rilevamento: Threshold.
  2. Definisci la metrica: gcp.gce.instance.is_running da (ovunque) sum by (tutto)
  3. Imposta le condizioni di avviso:
  4. Trigger attivato quando la metrica è below e la soglia at least once negli ultimi 5 minutes
  5. Soglia di avviso: < 2
  6. Invia una notifica al tuo team: @eventarc_<your-project-id>_<your-region>_<your-channel-name>
  7. Nome monitor di esempio: Compute Engine instances < 2

Ora, premi Create in basso per creare il monitor.

9. Testa monitoraggio e trigger

Per testare il monitoraggio Datadog, il trigger Eventarc e infine il flusso di lavoro, eliminerai una delle VM:

gcloud compute instances delete instance-2 --zone us-central1-a

Dopo alcuni secondi, dovresti vedere l'istanza eliminata nella console Google Cloud.

Esiste un po' di latenza prima che questa modifica venga visualizzata in Datadog. Dopo un po' di tempo (in genere 10 minuti), dovresti vedere il monitor in Datadog per rilevare e avvisare l'utente nella sezione Manage Monitors:

50f93d560b6c1973.png

Una volta che Datadog monitora gli avvisi, dovresti vedere che vengono inviati a Workflows tramite Eventarc. Se controlli i log di Workflows, dovresti vedere che Workflows controlla la differenza tra il conteggio delle istanze attuali e quello previsto:

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

Risponde all'avviso creando una nuova istanza VM con il prefisso datadog-instance-##.

Alla fine, avrai ancora 2 VM nel tuo progetto, una creata inizialmente e l'altra creata da Workflows dopo l'avviso di Datadog.

11e42028e7142690.png

10. Complimenti

Complimenti, hai completato il codelab.

Argomenti trattati

  • Come abilitare l'integrazione di Datadog con Google Cloud.
  • Come creare un flusso di lavoro per controllare e creare VM di Compute Engine.
  • Come connettere gli avvisi di monitoraggio di Datadog a Workflows con Eventarc.
  • Creare un monitoraggio Datadog e un avviso sulle eliminazioni delle VM.