Resumen

El OpenTelemetry Collector te permite recopilar, procesar y exportar datos de telemetría de tus aplicaciones de manera neutral ante proveedores. Cuando se configura con el Exportador de Datadog y el Conector de Datadog, puedes enviar tus trazas, registros y métricas a Datadog sin el Datadog Agent.

  • Exportador de Datadog: Reenvía datos de trazas, métricas y registros desde los SDKs de OpenTelemetry a Datadog (sin el Datadog Agent)
  • Conector de Datadog: Calcula métricas de traza a partir de los datos de tramo recopilados
Diagrama: El SDK de OpenTelemetry en el código envía datos a través de OTLP al servidor que ejecuta el OpenTelemetry Collector con el Exportador de Datadog, que reenvía a la plataforma de observabilidad de Datadog.
Para ver qué características de Datadog son compatibles con esta configuración, consulta la tabla de compatibilidad de funciones bajo Full OTel.

Instala y configura

1 - Descarga el OpenTelemetry Collector

Descarga la última versión de la distribución OpenTelemetry Collector Contrib, desde el repositorio del proyecto.

2 - Configura el Exportador y el Conector de Datadog

Para usar el Exportador de Datadog y el Conector de Datadog, configúralos en tu configuración del OpenTelemetry Collector:

  1. Crea un archivo de configuración llamado collector.yaml.
  2. Utiliza el siguiente archivo de ejemplo para comenzar.
  3. Establece tu clave de API de Datadog como la variable de entorno DD_API_KEY.
The following examples use 0.0.0.0 as the endpoint address for convenience. This allows connections from any network interface. For enhanced security, especially in local deployments, consider using localhost instead. For more information on secure endpoint configuration, see the OpenTelemetry security documentation.
AWS EKS Fargate no es un entorno compatible para el OpenTelemetry Collector en este momento. Desplegar el Collector en EKS Fargate resultará en una facturación incorrecta del servidor de infraestructura.
receivers:
  otlp:
    protocols:
      http:
        endpoint: 0.0.0.0:4318
      grpc:
        endpoint: 0.0.0.0:4317
  # The hostmetrics receiver is required to get correct infrastructure metrics in Datadog.
  hostmetrics:
    collection_interval: 10s
    scrapers:
      paging:
        metrics:
          system.paging.utilization:
            enabled: true
      cpu:
        metrics:
          system.cpu.utilization:
            enabled: true
      disk:
      filesystem:
        metrics:
          system.filesystem.utilization:
            enabled: true
      load:
      memory:
      network:
      processes:
  # The prometheus receiver scrapes metrics needed for the OpenTelemetry Collector Dashboard.
  prometheus:
    config:
      scrape_configs:
      - job_name: 'otelcol'
        scrape_interval: 10s
        static_configs:
        - targets: ['0.0.0.0:8888']

  filelog:
    include_file_path: true
    poll_interval: 500ms
    include:
      - /var/log/**/*example*/*.log

processors:
  batch:
    send_batch_max_size: 100
    send_batch_size: 10
    timeout: 10s

connectors:
  datadog/connector:

exporters:
  datadog/exporter:
    api:
      site: 
      key: ${env:DD_API_KEY}

service:
  pipelines:
    metrics:
      receivers: [hostmetrics, prometheus, otlp, datadog/connector]
      processors: [batch]
      exporters: [datadog/exporter]
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [datadog/connector, datadog/exporter]
    logs:
      receivers: [otlp, filelog]
      processors: [batch]
      exporters: [datadog/exporter]

Esta configuración básica permite la recepción de datos OTLP a través de HTTP y gRPC, y configura un procesador por lotes.

Para una lista completa de opciones de configuración para el Exportador de Datadog, consulta el archivo de configuración de ejemplo completamente documentado. Opciones adicionales como api::site y host_metadata pueden ser relevantes dependiendo de tu despliegue.

Configuración del procesador por lotes

El procesador por lotes es necesario para entornos que no son de desarrollo. La configuración exacta depende de tu carga de trabajo y tipos de señales específicos.

Configura el procesador por lotes según los límites de recepción de Datadog:

Puedes obtener 413 - Request Entity Too Large errores si agrupas demasiados datos de telemetría en el procesador por lotes.

3 - Configura tu aplicación

Para obtener mejores metadatos para trazas y una integración fluida con Datadog:

  • Utiliza detectores de recursos: Si son proporcionados por el SDK del lenguaje, adjunta información del contenedor como atributos de recurso. Por ejemplo, en Go, utiliza la opción de recurso WithContainer().

  • Aplica [Unified Service Tagging]: Asegúrate de haber configurado tu aplicación con los atributos de recurso apropiados para unified service tagging. Esto une la telemetría de Datadog con etiquetas para el nombre del servicio, el entorno de despliegue y la versión del servicio. La aplicación debe establecer estas etiquetas utilizando las convenciones semánticas de OpenTelemetry: service.name, deployment.environment y service.version.

4 - Configura el registrador para tu aplicación

Un diagrama que muestra el host, contenedor o aplicación enviando datos al receptor de filelog en el Collector y al Exportador de Datadog en el Collector enviando los datos al backend de Datadog.

Dado que la funcionalidad de registro de los SDK de OpenTelemetry no está completamente soportada (consulta tu lenguaje específico en la documentación de OpenTelemetry para más información), Datadog recomienda usar una biblioteca de registro estándar para tu aplicación. Sigue la documentación de Recolección de Registros específica del lenguaje para configurar el registrador apropiado en tu aplicación. Datadog recomienda encarecidamente configurar tu biblioteca de registro para que emita tus registros en JSON para evitar la necesidad de reglas de parseo personalizadas.

Configura el receptor de filelog

Configura el receptor de filelog utilizando operadores. Por ejemplo, si hay un servicio checkoutservice que está escribiendo registros en /var/log/pods/services/checkout/0.log, un registro de muestra podría verse así:

{"level":"info","message":"order confirmation email sent to \"jack@example.com\"","service":"checkoutservice","span_id":"197492ff2b4e1c65","timestamp":"2022-10-10T22:17:14.841359661Z","trace_id":"e12c408e028299900d48a9dd29b0dc4c"}

Ejemplo de configuración de filelog:

filelog:
   include:
     - /var/log/pods/**/*checkout*/*.log
   start_at: end
   poll_interval: 500ms
   operators:
     - id: parse_log
       type: json_parser
       parse_from: body
     - id: trace
       type: trace_parser
       trace_id:
         parse_from: attributes.trace_id
       span_id:
         parse_from: attributes.span_id
   attributes:
     ddtags: env:staging
  • include: La lista de archivos que el receptor realiza el seguimiento de las últimas líneas
  • start_at: end: Señales para leer el contenido recién escrito
  • poll_internal: Establece la frecuencia de sondeo
  • Operadores:
    • json_parser: Realiza el parseo de registros JSON. Por defecto, el receptor de filelog convierte cada línea de registro en un registro de log, que es el body del modelo de datos de los registros. Luego, el json_parser convierte el cuerpo JSON en atributos en el modelo de datos.
    • trace_parser: Extrae el trace_id y span_id del registro para correlacionar registros y trazas en Datadog.

Remapea el atributo service.name de OTel a service para los registros

Para las versiones 0.83.0 y posteriores del Exportador de Datadog, el campo service de los registros de OTel se llena como convención semántica de OTel service.name. Sin embargo, service.name no es uno de los atributos de servicio predeterminados en el preprocesamiento de registros de Datadog.

Para que el campo service se llene correctamente en tus registros, puedes especificar service.name como la fuente del servicio de un registro configurando un procesador de remapeo de servicio de registro.

AWS EKS Fargate no es un entorno compatible para el OpenTelemetry Collector en este momento. Desplegar el Collector en EKS Fargate resultará en una facturación incorrecta del servidor de infraestructura.

Existen múltiples formas de desplegar el OpenTelemetry Collector y el Exportador de Datadog en una infraestructura de Kubernetes. Para que el receptor de filelog funcione, el método de despliegue de Agent/DaemonSet es el método de despliegue recomendado.

En entornos contenedorizados, las aplicaciones escriben registros en stdout o stderr. Kubernetes recopila los registros y los escribe en una ubicación estándar. Necesitas montar la ubicación en el nodo servidor dentro del Collector para el receptor de filelog. A continuación se muestra un ejemplo de extensión con los montajes requeridos para enviar registros.

apiVersion: apps/v1
metadata:
  name: otel-agent
  labels:
    app: opentelemetry
    component: otel-collector
spec:
  template:
    metadata:
      labels:
        app: opentelemetry
        component: otel-collector
    spec:
      containers:
        - name: collector
          command:
            - "/otelcol-contrib"
            - "--config=/conf/otel-agent-config.yaml"
          image: otel/opentelemetry-collector-contrib:0.71.0
          env:
            - name: POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            # The k8s.pod.ip is used to associate pods for k8sattributes
            - name: OTEL_RESOURCE_ATTRIBUTES
              value: "k8s.pod.ip=$(POD_IP)"
          ports:
            - containerPort: 4318 # default port for OpenTelemetry HTTP receiver.
              hostPort: 4318
            - containerPort: 4317 # default port for OpenTelemetry gRPC receiver.
              hostPort: 4317
            - containerPort: 8888 # Default endpoint for querying metrics.
          volumeMounts:
            - name: otel-agent-config-vol
              mountPath: /conf
            - name: varlogpods
              mountPath: /var/log/pods
              readOnly: true
            - name: varlibdockercontainers
              mountPath: /var/lib/docker/containers
              readOnly: true
      volumes:
        - name: otel-agent-config-vol
          configMap:
            name: otel-agent-conf
            items:
              - key: otel-agent-config
                path: otel-agent-config.yaml
        # Mount nodes log file location.
        - name: varlogpods
          hostPath:
            path: /var/log/pods
        - name: varlibdockercontainers
          hostPath:
            path: /var/lib/docker/containers

Configuración del Exportador de Datadog lista para usar

Puedes encontrar ejemplos funcionales de configuración lista para usar para el Exportador de Datadog en la carpeta exporter/datadogexporter/examples del proyecto OpenTelemetry Collector Contrib. Consulta el archivo de ejemplo de configuración completo, ootb-ec2.yaml. Nota: Este ejemplo es para aplicaciones que se ejecutan directamente en un host EC2. Para aplicaciones contenedorizadas, consulta la documentación de despliegue.

Configura cada uno de los siguientes componentes según tus necesidades:


Valida tus configuraciones del Collector en Fleet Automation

Inspecciona y soluciona problemas en tus configuraciones de OpenTelemetry Collector en Fleet Automation habilitando la Extensión de Datadog.

Lectura adicional