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

Learn More
Engineering
Product

Integración de GCP con datadog y terraform

Kazuki Nishiura
Kazuki Nishiura
bg-image
bg-image
Integración de GCP con datadog y terraform
Subscribe to newsletter
Share

En Sardine, nos tomamos la estabilidad muy en serio. A medida que escalamos hacia más comercios y una mayor variedad de casos de uso, la monitorización y las alertas se vuelven aún más críticas. Usamos GCP para el hosting, y aunque GCP ofrece algunas funcionalidades básicas, decidimos usar datadog para mejorar nuestra configuración de monitorización.

Los beneficios de usar datadog incluyen:

  • Capacidad de filtrar y agrupar dinámicamente los logs por etiquetas personalizadas. Con GCP se puede hacer algo parecido, pero no realmente.
  • Configurar advertencias y alertas para el mismo monitor.
  • Compartir la definición de un monitor entre distintos proyectos de GCP (producción y staging) con distintos umbrales.
  • Compartir la definición de un panel entre distintos proyectos de GCP.
  • Una interfaz general más limpia e intuitiva, con menos errores.

Datadog ofrece una guía en línea para integrarse con GCP. Como usamos terraform para gestionar nuestra infraestructura, quisimos configurar todo mediante terraform.

Configuración de la integración de GCP desde datadog

El primer paso es seleccionar «integrations» > «Google Cloud Platform» en datadog y añadir tu proyecto. Para esto, necesitarás una cuenta de servicio con los permisos adecuados:

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}"}

Además, puedes limitar la recopilación de métricas a hosts con etiquetas específicas. Como en nuestro proyecto de desarrollo nuestros desarrolladores pueden crear cualquier cosa en cualquier momento, establecimos la etiqueta específica «datadog:monitored» en los hosts que queremos monitorizar, y solo recopilamos métricas de esos hosts

Image

Además, es importante tener en cuenta que el conector de datadog no recopila todas las métricas que ofrece GCP. Por ejemplo, solíamos usar el valor p95 de las métricas gcp.loadbalancing.https.backend_latencies en nuestra monitorización, pero datadog solo puede recopilar avg y sumsqdev a partir de agosto de 2021. Tuvimos que definir nuestras propias métricas personalizadas a nivel de aplicación.

Recopilación de logs

Para las aplicaciones que se ejecutan en GCE o GKE, se puede usar el Datadog Agent para recopilar logs localmente. Para otros logs, tendrás que reenviarlos usando un log sink y 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}

Es posible que necesites definir una pipeline de logs personalizada para que la estructura de tus logs se refleje correctamente en la interfaz de logs de datadog. Aquí está nuestra pipeline.

Image

Métricas personalizadas (datadog agent)

Para recopilar métricas adicionales, logs y métricas personalizadas, necesitarás instalar el datadog agent. El agent se ofrece como imagen de Docker, así como en paquetes para la mayoría de sistemas operativos, por lo que suele ser muy fácil de instalar.

Una complicación para nosotros fue que aún no usábamos GKE. Estábamos usando un managed instance group con un sistema operativo optimizado para contenedores. Como usamos golang para la mayoría de nuestras aplicaciones, nuestra imagen Docker de la aplicación es bastante simple: simplemente copiamos la aplicación golang en la imagen scratch. Esto significa que no hay un sistema operativo donde instalar el paquete de datadog, así que tuvimos que encontrar una forma de ejecutar dos imágenes Docker (nuestra imagen de aplicación y la imagen del datadog agent) en el sistema operativo optimizado para contenedores.

Aunque no está bien documentado, resulta que puedes iniciar un Docker en el startup_script de la VM.

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

¡Y eso es todo! Aunque todavía estamos en medio de la configuración, ya estamos viendo el valor de datadog y estamos muy contentos con él.