Sardine named a Leader in The Forrester Wave™: Financial Crime Management Solutions, Q3 2026

Learn More
Engineering
Product

Integrando o GCP com datadog e terraform

Kazuki Nishiura
Kazuki Nishiura
bg-image
bg-image
Integrando o 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 dinamicamente os logs por rótulos personalizados. Com o GCP dá até para fazer algo parecido, mas não muito bem.
  • Configurar aviso e alerta para o mesmo monitor.
  • Compartilhar a definição de um monitor entre diferentes projetos do GCP (produção e staging) com limites diferentes.
  • Compartilhar a definição de um painel entre diferentes projetos do GCP.
  • Uma interface geral mais limpa e intuitiva, com menos bugs.

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

Configurando a integração do GCP a partir do datadog

O primeiro passo é selecionar "integrations" > "Google Cloud Platform" no datadog e adicionar 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 = "Service Account for datadog connection"}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 a tag específica "datadog:monitored" nos hosts que queremos monitorar, e coletamos métricas apenas desses hosts

Image

Além disso, é importante observar que o conector do datadog não coleta todas as métricas que o GCP oferece. Por exemplo, costumávamos usar o valor p95 das métricas gcp.loadbalancing.https.backend_latencies em nosso monitoramento, mas o datadog só consegue coletar avg e sumsqdev desde agosto de 2021. Precisamos definir nossas próprias métricas personalizadas no 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 pubsub.

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}

Você pode precisar definir um pipeline de logs personalizado para que a estrutura dos seus logs seja refletida corretamente na UI de logs do datadog. Aqui está o nosso pipeline.

Image

Métricas personalizadas (datadog agent)

Para coletar métricas adicionais, logs e métricas personalizadas, você precisará instalar o datadog agent. O agent é oferecido como imagem Docker, além de pacotes para a maioria dos sistemas operacionais, então geralmente é muito fácil de instalar.

Uma complicação para nós foi 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 para a maior parte da nossa aplicação, nossa imagem Docker da aplicação é bem simples — simplesmente copiamos a aplicação golang na imagem scratch. Isso significa que não há sistema operacional no qual instalar o pacote do datadog, então precisamos descobrir uma forma de executar duas imagens Docker (nossa imagem de aplicação e a imagem do datadog agent) no sistema operacional otimizado para contêineres.

Embora 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! Embora ainda estejamos no meio da configuração, já estamos vendo valor no datadog e estamos muito satisfeitos com ele!