Rotear alertas de monitoramento do Datadog para o Google Cloud com o Eventarc (Parte 2)

1. Introdução

cb762f29e9183a3f.png 3c7ca8629bc25d9c.png 1c05e3d0c2bd2b45.png

O Eventarc facilita a conexão de serviços do Google Cloud com eventos de várias fontes. Ele permite criar arquiteturas orientadas a eventos em que os microsserviços são distribuídos e têm acoplamento flexível. Ele também cuida da ingestão, entrega, segurança, autorização e tratamento de erros de eventos, o que melhora a agilidade do desenvolvedor e a resiliência do aplicativo.

O Datadog é uma plataforma de monitoramento e segurança para aplicativos na nuvem. Ele reúne traces, métricas e registros de ponta a ponta para tornar seus aplicativos, infraestrutura e serviços de terceiros observáveis.

O Workflows é uma plataforma de orquestração totalmente gerenciada que executa serviços na ordem definida por você, chamada de fluxo de trabalho. Esses fluxos de trabalho podem combinar serviços hospedados no Cloud Run ou no Cloud Functions, serviços do Google Cloud como o Cloud Vision AI e o BigQuery, além de qualquer API baseada em HTTP.

No primeiro codelab, você aprendeu a encaminhar alertas de monitoramento do Datadog para o Google Cloud com o Eventarc. Neste segundo codelab, você vai aprender a responder a alertas de monitoramento do Datadog com fluxos de trabalho. Mais especificamente, você vai criar duas máquinas virtuais do Compute Engine e monitorá-las com um monitor do Datadog. Quando uma das VMs for excluída, você vai receber um alerta do Datadog para o Workflows via Eventarc. Por sua vez, o Workflows vai recriar a VM excluída para que o número de VMs em execução volte a ser 2.

O que você vai aprender

  • Como ativar a integração do Google Cloud com o Datadog.
  • Como criar um fluxo de trabalho para verificar e criar VMs do Compute Engine.
  • Como conectar alertas de monitoramento do Datadog a fluxos de trabalho com o Eventarc.
  • Como criar um monitor e um alerta do Datadog sobre exclusões de VMs.

2. Configuração e requisitos

Configuração de ambiente autoguiada

  1. Faça login no Console do Google Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • O Nome do projeto é o nome de exibição para os participantes do projeto. Ele é uma string de caracteres que não é usada pelas APIs do Google e pode ser atualizada a qualquer momento.
  • O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser alterado após a definição. O Console do Cloud gera automaticamente uma string única, geralmente não importa o que seja. Na maioria dos codelabs, você precisará fazer referência ao ID do projeto, que geralmente é identificado como PROJECT_ID. Então, se você não gostar dele, gere outro ID aleatório ou crie um próprio e veja se ele está disponível. Em seguida, ele fica "congelado" depois que o projeto é criado.
  • Há um terceiro valor, um Número de projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
  1. Em seguida, você precisará ativar o faturamento no Console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não será muito cara, se tiver algum custo. Para encerrar os recursos e não gerar cobranças além deste tutorial, siga as instruções de "limpeza" encontradas no final do codelab. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.

Inicie o Cloud Shell

Embora o Google Cloud e o Spanner possam ser operados remotamente do seu laptop, neste codelab usaremos o Google Cloud Shell, um ambiente de linha de comando executado no Cloud.

No Console do Google Cloud, clique no ícone do Cloud Shell na barra de ferramentas superior à direita:

55efc1aaa7a4d3ad.png

O provisionamento e a conexão com o ambiente levarão apenas alguns instantes para serem concluídos: Quando o processamento for concluído, você verá algo como:

7ffe5cbb04455448.png

Essa máquina virtual contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Todo o trabalho neste laboratório pode ser feito apenas com um navegador.

Configurar a gcloud

No Cloud Shell, defina o ID do projeto e salve-o como a variável PROJECT_ID.

Além disso, defina uma variável REGION como us-central1. Essa é a região em que você vai criar recursos mais tarde.

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

Ativar APIs

Ative todos os serviços necessários:

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

3. Verificar o canal do Datadog

Confira se o canal do Datadog que você criou no primeiro codelab está ativo. No Cloud Shell, execute o seguinte comando para recuperar os detalhes do canal:

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

A saída será semelhante a esta:

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'

Também é possível conferir o estado do canal no console do Google Cloud:

8399d528ccbd4c20.png

O estado do canal precisa ser ACTIVE. Caso contrário, volte ao primeiro codelab e siga as etapas para criar e ativar um canal com o Datadog.

4. Ativar a integração do Datadog com o Google Cloud

Para usar o Datadog e monitorar um projeto, é necessário ativar as APIs necessárias para o Datadog, criar uma conta de serviço e conectá-la ao Datadog.

Ativar APIs para o Datadog

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

Criar uma conta de serviço

A integração do Google Cloud do Datadog usa uma conta de serviço para fazer chamadas à API Cloud Logging e coletar métricas no nível do nó das suas instâncias do Compute Engine.

Crie uma conta de serviço para o Datadog:

DATADOG_SA_NAME=datadog-service-account

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

Conceda os seguintes papéis do IAM para permitir que a conta de serviço do Datadog colete métricas, tags, eventos e rótulos de usuário:

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

Crie e faça o download de uma chave de conta de serviço. Você precisa do arquivo de chave para concluir a integração com o Datadog.

Crie um arquivo de chave de conta de serviço no diretório principal do Cloud Shell:

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

No Cloud Shell, clique em More ⁝ e selecione Download File. No campo File path, insira key.json. Para fazer o download do arquivo de chave, clique em Download.

Conectar a conta de serviço ao Datadog

Na sua conta do Datadog, acesse a seção Integrations e procure o bloco de integração Google Cloud:

cf1ffa6547fba3e4.png

Passe o cursor sobre Google Cloud Platform para acessar a página Install:

31b365a31bc50cc8.png

Instale a integração fazendo upload da chave da conta de serviço na seção Upload Private Key File e clicando em Install Integration:

92e475e4da7f826.png

Depois de concluir a integração, o Datadog cria automaticamente vários painéis relacionados ao Google Cloud em Dashboards:

66fdf2d26e4710d.png

5. Criar VMs do Compute Engine

Em seguida, crie algumas máquinas virtuais (VMs) do Compute Engine. Você vai monitorar essas VMs com um monitor do Datadog e responder aos alertas do Datadog com um fluxo de trabalho no Google Cloud.

Crie duas VMs do Compute Engine:

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

Em um minuto, você verá as VMs criadas e em execução no console do Cloud. Depois de algum tempo (normalmente 10 minutos), essas VMs também vão aparecer no Datadog, no painel Google Compute Engine em Dashboards:

78a51374c1d0c11e.png

6. Criar um fluxo de trabalho

Agora que você tem duas VMs em execução, crie um fluxo de trabalho que responda a alertas de um monitor do Datadog. O fluxo de trabalho pode ser tão sofisticado quanto você quiser, mas, neste caso, ele vai verificar o número de instâncias de VM em execução e, se ficar abaixo de 2, vai criar novas instâncias para garantir que haja duas VMs em execução o tempo todo.

Crie um arquivo workflow-datadog2.yaml com o seguinte conteúdo:

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}

O fluxo de trabalho está recebendo um evento como parâmetro. Esse evento virá do monitoramento do Datadog pelo Eventarc. Depois que o evento é recebido, o fluxo de trabalho verifica o número de instâncias em execução e cria novas instâncias de VM, se necessário.

Implante o fluxo de trabalho:

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

O fluxo de trabalho foi implantado, mas ainda não está em execução. Ele será executado por um gatilho do Eventarc quando um alerta do Datadog for recebido.

7. Criar um gatilho do Eventarc

Agora você já pode conectar eventos do provedor Datadog aos fluxos de trabalho com um gatilho do Eventarc. Você vai usar o canal e a conta de serviço que configurou no primeiro codelab.

Crie um gatilho com o canal do Datadog, o tipo de evento e um destino de fluxo de trabalho:

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

Liste os gatilhos para ver se o gatilho recém-criado está ativo:

gcloud eventarc triggers list --location $REGION

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

8. Criar um monitor do Datadog

Agora você vai criar um monitor do Datadog e conectá-lo ao Eventarc.

O monitor vai verificar o número de VMs do Compute Engine em execução e alertar se ele ficar abaixo de 2.

Para criar um monitor no Datadog, faça login no Datadog. Passe o cursor sobre Monitors no menu principal e clique em New Monitor no submenu. Há muitos tipos de monitores. Escolha o tipo de monitor Metric.

Na página New Monitor, crie um monitor com o seguinte:

  1. Escolha o método de detecção: Threshold.
  2. Defina a métrica: gcp.gce.instance.is_running de (em qualquer lugar) sum by (tudo)
  3. Defina as condições de alerta:
  4. Acionar quando a métrica for below o limite at least once durante os últimos 5 minutes
  5. Limite de alerta: < 2
  6. Notificar sua equipe: @eventarc_<your-project-id>_<your-region>_<your-channel-name>
  7. Exemplo de nome do monitor: Compute Engine instances < 2

Agora, toque em Create na parte de baixo para criar o monitor.

9. Testar o monitor e o gatilho

Para testar o monitor do Datadog, o gatilho do Eventarc e, por fim, o fluxo de trabalho, exclua uma das VMs:

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

Depois de alguns segundos, a instância será excluída no console do Google Cloud.

Há um pouco de latência para que essa mudança apareça no Datadog. Depois de algum tempo (normalmente 10 minutos), o monitor vai aparecer no Datadog para detectar e alertar sobre isso na seção Manage Monitors:

50f93d560b6c1973.png

Quando o monitor do Datadog emitir um alerta, ele será enviado para o Workflows via Eventarc. Se você verificar os registros do Workflows, vai notar que ele verifica a diferença entre a contagem de instâncias atual e a esperada:

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

Ele responde a esse alerta criando uma nova instância de VM com o prefixo datadog-instance-##.

No final, você ainda terá duas VMs no seu projeto, uma criada inicialmente e a outra criada pelos fluxos de trabalho após o alerta do Datadog.

11e42028e7142690.png

10. Parabéns

Parabéns, você concluiu o codelab.

O que aprendemos

  • Como ativar a integração do Google Cloud com o Datadog.
  • Como criar um fluxo de trabalho para verificar e criar VMs do Compute Engine.
  • Como conectar alertas de monitoramento do Datadog a fluxos de trabalho com o Eventarc.
  • Como criar um monitor e um alerta do Datadog sobre exclusões de VMs.