SardineCon SF/2026

Learn More

Integração do GCP com Datadog e Terraform

Kazuki Nishiura
Kazuki Nishiura
bg-image
bg-image
Integração do GCP com Datadog e Terraform
Subscribe to newsletter
Share

Na Sardine, levamos a estabilidade muito a sério. À medida que escalamos para mais comerciantes e uma variedade de casos de uso, o monitoramento e os alertas se tornam ainda mais críticos. Usamos o GCP para hospedagem e, embora o GCP ofereça algumas funcionalidades básicas, decidimos usar o Datadog para elevar o nível da nossa configuração de monitoramento.

Os benefícios de usar o Datadog incluem:

  • Capacidade de filtrar e agrupar logs dinamicamente por rótulo personalizado. Você até consegue fazer algo parecido com o GCP, mas não de verdade.
  • Configurar aviso e alerta para o mesmo monitor.
  • Compartilhar a definição do monitor com diferentes projetos GCP (produção e homologação) usando limites diferentes.
  • Compartilhar a definição do painel com diferentes projetos GCP.
  • Interface geral mais limpa e intuitiva, com menos bugs.

A Datadog oferece um guia online para integração com o GCP. Como usamos o Terraform para gerenciar nossa infraestrutura, queríamos configurar tudo usando o Terraform.

Configurar a integração do GCP no Datadog

O primeiro passo é selecionar “integrations” > “Google Cloud Platform” no Datadog e adicionar o seu projeto. Para isso, você precisará de uma conta de serviço com as permissões adequadas:

resource "google_service_account" "datadog-connect" { account_id = "datadog-connect" display_name = "Conta de serviço para conexão do Datadog"}resource "google_project_iam_member" "datadog-connect" { for_each = toset([ "roles/cloudasset.viewer", "roles/compute.viewer", "roles/monitoring.viewer", ]) role = each.key member = "serviceAccount:${google_service_account.datadog-connect.email}"}

Além disso, você pode limitar a coleta de métricas a hosts com tags específicas. Como, em nosso projeto de desenvolvimento, nossos desenvolvedores podem criar qualquer coisa a qualquer momento, definimos o rótulo específico “datadog:monitored” para os hosts que são alvos de monitoramento e coletamos métricas apenas desses hosts.

Imagem

Além disso, é importante observar que o conector do Datadog não coleta todas as métricas que o GCP fornece. Por exemplo, costumávamos usar o valor p95 de gcp.loadbalancing.https.backend_latencies nas nossas monitorizações, mas o Datadog só consegue coletar avg e sumsqdev desde agosto de 2021. Precisámos definir as nossas próprias métricas personalizadas ao nível da aplicação.

Coleta de logs

Para aplicações em execução no GCE ou GKE, o Datadog Agent pode ser usado para coletar logs localmente. Para outros logs, você precisará encaminhá-los usando um log sink e o Pub/Sub.

resource "google_pubsub_topic" "export-logs-to-datadog" { name = "export-logs-to-datadog"}resource "google_pubsub_subscription" "datadog-logs" { name = "datadog-logs" topic = google_pubsub_topic.export-logs-to-datadog.name message_retention_duration = "604800s" retain_acked_messages = false ack_deadline_seconds = 60 push_config { push_endpoint = "https://gcp-intake.logs.datadoghq.com/v1/input/${var.datadog_key}/" }}resource "google_logging_project_sink" "datadog-sink" { name = "datadog-sink" destination = "pubsub.googleapis.com/${google_pubsub_topic.export-logs-to-datadog.id}" filter = "" unique_writer_identity = true}resource "google_project_iam_member" "pubsub-publisher-permisson" { role = "roles/pubsub.publisher" member = google_logging_project_sink.datadog-sink.writer_identity}

Talvez seja necessário definir um pipeline de logs personalizado para que a estrutura dos seus logs seja refletida corretamente na interface de logs do Datadog. Aqui está o nosso pipeline.

Imagem

Métricas personalizadas (agente Datadog)

Para coletar métricas adicionais, logs e métricas personalizadas, você precisará instalar o Datadog Agent. O Agent é oferecido como imagem Docker, bem como em pacotes para a maioria dos sistemas operacionais, portanto, geralmente é muito fácil de instalar.

Uma complicação para nós era que ainda não estávamos usando o GKE. Estávamos usando um managed instance group com um sistema operacional otimizado para contêineres. Como usamos golang na maior parte da nossa aplicação, a nossa imagem Docker da aplicação é bem simples — nós simplesmente copiamos a aplicação em golang para a imagem scratch. Isso significa que não há um sistema operacional onde possamos instalar o pacote do datadog, então precisávamos descobrir uma forma de executar duas imagens Docker (a imagem da nossa aplicação e a imagem do agente do datadog) no sistema operacional otimizado para contêineres.

Embora isso não esteja bem documentado, descobrimos que é possível iniciar um Docker no startup_script da VM.

module "managed_instance_group_template" { source = "terraform-google-modules/vm/google//modules/instance_template" ...startup_script = "docker run -d --name dd-agent ...."

É isso! Mesmo ainda no meio da configuração, já estamos vendo valor no Datadog e estamos muito satisfeitos com ele!