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
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
Crea un archivo de configuración llamado collector.yaml.
Utiliza el siguiente archivo de ejemplo para comenzar.
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:4318grpc:endpoint:0.0.0.0:4317# The hostmetrics receiver is required to get correct infrastructure metrics in Datadog.hostmetrics:collection_interval:10sscrapers:paging:metrics:system.paging.utilization:enabled:truecpu:metrics:system.cpu.utilization:enabled:truedisk:filesystem:metrics:system.filesystem.utilization:enabled:trueload:memory:network:processes:# The prometheus receiver scrapes metrics needed for the OpenTelemetry Collector Dashboard.prometheus:config:scrape_configs:- job_name:'otelcol'scrape_interval:10sstatic_configs:- targets:['0.0.0.0:8888']filelog:include_file_path:truepoll_interval:500msinclude:- /var/log/**/*example*/*.logprocessors:batch:send_batch_max_size:100send_batch_size:10timeout:10sconnectors: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
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"}
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 OTelservice.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.
Opcional: Usando Kubernetes
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/v1metadata:name:otel-agentlabels:app:opentelemetrycomponent:otel-collectorspec:template:metadata:labels:app:opentelemetrycomponent:otel-collectorspec:containers:-name:collectorcommand:-"/otelcol-contrib"-"--config=/conf/otel-agent-config.yaml"image:otel/opentelemetry-collector-contrib:0.71.0env:-name:POD_IPvalueFrom:fieldRef:fieldPath:status.podIP# The k8s.pod.ip is used to associate pods for k8sattributes-name:OTEL_RESOURCE_ATTRIBUTESvalue:"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-volmountPath:/conf-name:varlogpodsmountPath:/var/log/podsreadOnly:true-name:varlibdockercontainersmountPath:/var/lib/docker/containersreadOnly:truevolumes:-name:otel-agent-config-volconfigMap:name:otel-agent-confitems:-key:otel-agent-configpath:otel-agent-config.yaml# Mount nodes log file location.-name:varlogpodshostPath:path:/var/log/pods-name:varlibdockercontainershostPath: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: