En Sardine nos tomamos la estabilidad muy en serio. A medida que ampliamos nuestra base de comercios y abordamos una variedad de casos de uso, el monitoreo y las alertas se vuelven aún más críticos. Usamos GCP para el alojamiento y, aunque GCP ofrece algunas funciones básicas, decidimos usar Datadog para llevar nuestro sistema de monitoreo al siguiente nivel.
Los beneficios de usar Datadog incluyen:
- Posibilidad de filtrar y agrupar registros de forma dinámica mediante etiquetas personalizadas. Con GCP se puede hacer algo parecido, pero no realmente.
- Configurar advertencias y alertas para el mismo monitor.
- Compartir la definición del monitor con diferentes proyectos de GCP (producción y staging) con distintos umbrales.
- Compartir la definición del panel con diferentes proyectos de GCP.
- Interfaz 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, queríamos configurar todo usando Terraform.
Configurar la integración de GCP desde Datadog
El primer paso es seleccionar “integrations” > “Google Cloud Platform” en Datadog y añadir tu proyecto. Para ello, necesitarás una cuenta de servicio con los permisos adecuados:
resource "google_service_account" "datadog-connect" { account_id = "datadog-connect" display_name = "Cuenta de servicio para la conexión de 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}"}
Además, puedes limitar la recopilación de métricas a los hosts con etiquetas específicas. Como en nuestro proyecto de desarrollo nuestros desarrolladores pueden crear cualquier cosa en cualquier momento, asignamos la etiqueta específica “datadog:monitored” a los hosts que son objetivos de monitorización y solo recopilamos métricas de esos hosts.

Además, es importante tener en cuenta que el conector de Datadog no recopila todas las métricas que proporciona GCP. Por ejemplo, antes usábamos el valor p95 de gcp.loadbalancing.https.backend_latencies en nuestra monitorización, pero Datadog solo puede recopilar avg y sumsqdev desde agosto de 2021. Tuvimos que definir nuestras propias métricas personalizadas a nivel de aplicación.
Recopilación de registros
Para las aplicaciones que se ejecutan en GCE o GKE, se puede usar el Agente de Datadog para recopilar los registros localmente. Para otros registros, deberás reenviarlos usando un log sink y 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}
Es posible que necesites definir una canalización de registros personalizada para que la estructura de tus logs se refleje correctamente en la interfaz de Datadog Logs. Aquí está nuestra canalización.

Métricas personalizadas (agente de Datadog)
Para recopilar métricas adicionales, registros y métricas personalizadas, necesitarás instalar datadog agent. El agente se ofrece como una imagen de Docker, así como en paquetes para la mayoría de los sistemas operativos, por lo que normalmente es muy fácil de instalar.
Una complicación para nosotros fue que aún no estábamos usando GKE. Estábamos usando un grupo de instancias administrado con un sistema operativo optimizado para contenedores. Como usamos golang para la mayor parte de nuestra aplicación, la imagen Docker de nuestra aplicación es bastante sencilla: simplemente copiamos la aplicación de golang en la imagen scratch. Esto significa que no hay un sistema operativo en el que instalar el paquete de datadog, así que tuvimos que encontrar la manera de ejecutar dos imágenes de Docker (la imagen de nuestra aplicación y la imagen del agente de datadog) en el sistema operativo optimizado para contenedores.
Aunque no está bien documentado, resulta que puedes iniciar un contenedor de Docker en el startup_script de la máquina virtual.
module "managed_instance_group_template" { source = "terraform-google-modules/vm/google//modules/instance_template" ...startup_script = "docker run -d --name dd-agent ...."
¡Eso es todo! Aunque aún estamos en medio de la configuración, ya estamos viendo el valor de Datadog y estamos muy contentos con ello.

