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 dos serviços do Google Cloud com eventos de diversas fontes. Ele permite criar arquiteturas orientadas a eventos em que os microsserviços são acoplados com flexibilidade e distribuídos. Ele também cuida da ingestão, da entrega, da segurança, da autorização e do tratamento de erros de eventos para você, o que melhora a agilidade do desenvolvedor e a resiliência de aplicativos.

O Datadog é uma plataforma de monitoramento e segurança para aplicativos de nuvem. Ele reúne traces, métricas e registros completos 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 em uma 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 Cloud Vision AI e BigQuery, e qualquer API baseada em HTTP.

No primeiro codelab, você aprendeu a rotear 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 o Workflows. Mais especificamente, você vai criar duas máquinas virtuais do Compute Engine e monitorá-las com um monitor Datadog. Quando uma das VMs for excluída, você vai receber um alerta do Datadog para o Workflows pelo Eventarc. Por sua vez, o Workflows recriará a VM excluída para voltar para o número de VMs em execução.

O que você vai aprender

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

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

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

Verifique 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 ver 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

Se quiser usar o Datadog para monitorar um projeto, você precisa 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 com o Datadog usa uma conta de serviço para fazer chamadas à API Cloud Logging e coletar métricas no nível do nó das 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 da conta de serviço no diretório inicial 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 do Install:

31b365a31bc50cc8.png

Para instalar a integração, faça upload da chave da conta de serviço na seção Upload Private Key File e clique em Install Integration:

92e475e4da7f826.png

Depois que você 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 cerca de um minuto, as VMs serão criadas e executadas no console do Cloud. Após 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 aos alertas de um monitor do Datadog. O fluxo de trabalho pode ser tão sofisticado quanto você quiser, mas, nesse caso, ele vai verificar o número de instâncias de VM em execução e, se estiver abaixo de duas, 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 está implantado, mas ainda não está em execução. Ele é executado por um gatilho do Eventarc quando um alerta do Datadog é recebido.

7. Criar um gatilho do Eventarc

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

Crie um gatilho com o canal Datadog, o tipo de evento e também 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

É possível listar os acionadores para ver se o acionador 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 Datadog e conectá-lo ao Eventarc.

O monitor verificará o número de VMs do Compute Engine em execução e alertará se estiver 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 monitor. 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 (de qualquer lugar) sum by (tudo)
  3. Defina condições de alerta:
  4. Acionar quando a métrica for below o limite de 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 de monitor: Compute Engine instances < 2

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

9. Testar o monitor e o acionamento

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

Após alguns segundos, a instância será exibida no Console do Google Cloud.

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

50f93d560b6c1973.png

Depois que o Datadog monitorar alertas, ele vai aparecer para o Workflows via Eventarc. Se você verificar os registros do Workflows, vai notar que o Workflows verifica para descobrir a diferença entre a contagem atual de instâncias e a contagem esperada de instâncias:

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

Ela 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 pelo Workflows 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 Datadog com o Google Cloud.
  • Como criar um fluxo de trabalho para verificar e criar VMs do Compute Engine.
  • Como conectar alertas de monitoramento do Datadog ao Workflows com Eventarc.
  • Como criar um monitor do Datadog e um alerta sobre exclusões de VM.