1. Introdução
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
- 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.
- 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.
- 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:
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:
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:
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
:
Passe o cursor sobre Google Cloud Platform
para acessar a página do Install
:
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
:
Depois que você concluir a integração, o Datadog cria automaticamente vários painéis relacionados ao Google Cloud em Dashboards
:
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
:
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:
- Escolha o método de detecção:
Threshold
. - Defina a métrica:
gcp.gce.instance.is_running
de (de qualquer lugar)sum by
(tudo) - Defina condições de alerta:
- Acionar quando a métrica for
below
o limite deat least once
durante os últimos5 minutes
- Limite de alerta:
< 2
- Notificar sua equipe:
@eventarc_<your-project-id>_<your-region>_<your-channel-name>
- 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
:
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.
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.