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 con eventi provenienti da varie 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, il che migliora 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 le tue applicazioni, la tua infrastruttura e i tuoi servizi di terze parti.

Workflows è 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 a indirizzare 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. Più nello specifico, creerai due macchine virtuali Compute Engine e le monitorerai con un monitor Datadog. Una volta eliminata una delle VM, riceverai un avviso da Datadog a Workflows tramite Eventarc. A sua volta, Workflows ricreerà la VM eliminata per riportare il numero di VM in esecuzione a 2.

Obiettivi didattici

  • Come attivare 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.
  • Come creare un monitor e un avviso Datadog per le eliminazioni di VM.

2. Configurazione e requisiti

Configurazione dell'ambiente 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 del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google e puoi aggiornarla 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). Cloud Console genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (che in genere è identificato come PROJECT_ID), quindi, se non ti piace, generane un altro casuale oppure puoi provare il tuo e vedere se è disponibile. Viene "congelato" dopo la creazione del progetto.
  • Esiste un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
  1. Successivamente, devi abilitare la fatturazione in Cloud Console per utilizzare le risorse/API Cloud. L'esecuzione di questo codelab non dovrebbe costare molto, se non nulla. Per arrestare le risorse in modo da non incorrere in costi di fatturazione al termine di questo tutorial, segui le istruzioni di "pulizia" riportate alla fine del codelab. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.

Avvia Cloud Shell

Sebbene Google Cloud possa essere gestito da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.

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

55efc1aaa7a4d3ad.png

Bastano pochi istanti per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere un risultato simile a questo:

7ffe5cbb04455448.png

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

Configura gcloud

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

Imposta anche una variabile REGION su us-central1. Questa è la regione in cui creerai le risorse in un secondo momento.

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

Abilita API

Attiva 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 visualizzare 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 di Datadog con Google Cloud

Per utilizzare Datadog per monitorare un progetto, devi attivare le API necessarie per Datadog, creare un service account e collegarlo a Datadog.

Attiva 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 service account per effettuare chiamate all'API Cloud Logging per raccogliere metriche a livello di nodo dalle istanze di Compute Engine.

Crea un service account per Datadog:

DATADOG_SA_NAME=datadog-service-account

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

Consenti al service account Datadog di 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

Crea e scarica una chiave del service account. Per completare l'integrazione con Datadog, devi disporre del file della chiave.

Crea un file della chiave del service account 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 poi seleziona Download File. Nel campo File path, inserisci key.json. Per scaricare il file della chiave, fai clic su Download.

Collegare il service account 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 andare alla pagina Install:

31b365a31bc50cc8.png

Installa l'integrazione caricando la chiave del service account nella sezione Upload Private Key File e poi facendo 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. Crea VM Compute Engine

Poi, crea alcune macchine virtuali (VM) Compute Engine. Monitorerai queste VM con un monitor Datadog e risponderai agli avvisi 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 dopo circa un minuto nella console Cloud. Dopo un po' di tempo (in genere 10 minuti), dovresti vedere queste VM anche in Datadog nella dashboard Google Compute Engine in Dashboards:

78a51374c1d0c11e.png

6. Crea un flusso di lavoro

Ora che hai due VM in esecuzione, crea un flusso di lavoro che risponda agli avvisi di un monitor Datadog. Il flusso di lavoro può essere sofisticato quanto vuoi, ma in questo caso controllerà il numero di istanze VM in esecuzione e, se scende al di sotto di 2, creerà nuove istanze VM per assicurarsi che siano sempre in esecuzione 2 VM.

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 Datadog tramite Eventarc. Una volta ricevuto l'evento, il flusso di lavoro controlla il numero di istanze in esecuzione e crea nuove istanze VM, se necessario.

Esegui il deployment del workflow:

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

Il workflow è stato implementato, ma non è ancora in esecuzione. Verrà eseguita da un trigger Eventarc quando viene ricevuto un avviso Datadog.

7. Crea un trigger Eventarc

Ora puoi connettere gli eventi del provider Datadog a Workflows con un trigger Eventarc. Utilizzerai il canale e il service account 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 i trigger 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 monitor Datadog e lo connetterai a Eventarc.

Il monitoraggio controllerà il numero di VM Compute Engine in esecuzione e invierà un avviso se scende al di sotto di 2.

Per creare un monitor 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 Metrictipo di monitor.

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. Si attiva quando la metrica è below la soglia at least once durante gli ultimi 5 minutes
  5. Soglia di avviso: < 2
  6. Informa il tuo team: @eventarc_<your-project-id>_<your-region>_<your-channel-name>
  7. Esempio di nome del monitor: Compute Engine instances < 2

Ora, premi Create in basso per creare il monitor.

9. Testare il monitor e il trigger

Per testare il monitor Datadog, il trigger Eventarc ed eventualmente il workflow, 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.

È presente 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 segnalare questo problema nella sezione Manage Monitors:

50f93d560b6c1973.png

Una volta che il monitor Datadog genera un avviso, dovresti vederlo andare a Workflows tramite Eventarc. Se controlli i log di Workflows, dovresti vedere che Workflows verifica la differenza tra il conteggio delle istanze corrente e quello previsto:

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

Risponde a questo avviso creando una nuova istanza VM con il prefisso datadog-instance-##.

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

11e42028e7142690.png

10. Complimenti

Congratulazioni, hai completato il codelab.

Argomenti trattati

  • Come attivare 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.
  • Come creare un monitor e un avviso Datadog per le eliminazioni di VM.