Ingesta OTLP por el Datadog Agent
La ingesta OTLP en el Agent es una forma de enviar datos de telemetría directamente desde aplicaciones instrumentadas con SDKs de OpenTelemetry al Datadog Agent. Desde las versiones 6.32.0 y 7.32.0, el Datadog Agent puede ingerir trazas (traces) OTLP y métricas OTLP a través de gRPC o HTTP. Desde las versiones 6.48.0 y 7.48.0, el Datadog Agent puede ingerir logs OTLP a través de gRPC o HTTP.
La ingesta OTLP en el Agent te permite utilizar características de observabilidad en el Datadog Agent. Los datos de las aplicaciones instrumentadas con SDK de OpenTelemetry no pueden ser utilizados en algunos productos propiedad de Datadog, tales como Application Security Management, Continuous Profiler e Ingestion Rules. Las métricas de tiempo de ejecución de OpenTelemetry son compatibles con algunos lenguajes.
Para empezar, primero instrumentas tu aplicación con SDKs de OpenTelemetry. A continuación, exportas los datos de telemetría en formato OTLP al Datadog Agent. La configuración de esto varía en función del tipo de infraestructura en la que se despliega tu servicio, como se describe en la página siguiente. Aunque el objetivo es ser compatible con la última versión de OTLP, la ingesta OTLP en el Agent no es compatible con todas las versiones de OTLP. Las versiones de OTLP que son compatible con el Datadog Agent son las que también son compatibles con el receptor OTLP en el OpenTelemetry Collector. Para verificar las versiones exactas compatibles, comprueba la versión go.opentelemetry.io/collector
en el archivo go.mod
del Agent.
Lea la documentación de instrumentación de OpenTelemetry para entender cómo dirigir tu instrumentación al Agent. La sección receiver
descrita a continuación sigue el esquema de configuración del receptor OTLP de OpenTelemetry Collector.
Nota: La configuración admitida es una ingesta desde el Agent desplegado en cada host que genera datos de OpenTelemetry. No se puede enviar telemetría de OpenTelemetry desde recopiladores o aplicaciones instrumentadas que ejecutan un host en un Agent en un host diferente. Pero, siempre que el Agent sea local del recopilador o aplicación instrumentada por SDK, puedes configurar múltiples pipelines.
Activación de la ingesta OTLP en el Datadog Agent
La ingesta OTLP está desactivada por defecto, y puedes activarla actualizando la configuración de tu archivo datadog.yaml
o estableciendo las variables de entorno. Las siguientes configuraciones de datadog.yaml
habilitan endpoints en los puertos por defecto.
Para gRPC, puerto por defecto 4317:
otlp_config:
receiver:
protocols:
grpc:
endpoint: localhost:4317
Para HTTP, puerto por defecto 4318:
otlp_config:
receiver:
protocols:
http:
endpoint: localhost:4318
Alternativamente, configura los endpoints proporcionando el puerto a través de las variables de entorno:
- Para gRPC (
localhost:4317
): DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT
- Para HTTP (
localhost:4318
): DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT
Estos deben pasarse tanto a los procesos centrales del Agent como los del Trace Agent. Si se ejecuta en un entorno contenedorizado, utiliza 0.0.0.0
en lugar de localhost
para garantizar que el servidor esté disponible en interfaces no locales.
Configura ya sea gRPC o HTTP para esta función. Aquí hay una aplicación de ejemplo que muestra la configuración para ambos.
La ingesta OTLP de logs en el Datadog Agent está desactivada por defecto para que no se produzca un uso inesperado de logs que pueda afectar tu facturación. Para habilitar la ingesta OTLP de logs:
Habilita explícitamente la recopilación de logs en su conjunto siguiendo la configuración de la recopilación de logs del Host Agent:
Establece otlp_config.logs.enabled
en true:
otlp_config:
logs:
enabled: true
Sigue la configuración del Datadog Docker Agent.
Para el contenedor del Datadog Agent, establece las siguientes variables de entorno de endpoint y expone el puerto correspondiente:
- Para gRPC: establece
DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT
en 0.0.0.0:4317
y expone el puerto 4317
. - Para HTTP: establece
DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT
en 0.0.0.0:4318
y expone el puerto 4318
.
Si deseas habilitar la ingesta OTLP de logs, configura las siguientes variables de entorno de endpoint en el contenedor del Datadog Agent:
- Establece
DD_LOGS_ENABLED
en true. - Establece
DD_OTLP_CONFIG_LOGS_ENABLED
en true.
Sigue la [configuración de Kubernetes Agent1.
Configura las siguientes variables de entorno tanto en el contenedor del Trace Agent como en el contenedor principal del Agent:
Para gRPC:
name: DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT # enables gRPC receiver on port 4317
value: "0.0.0.0:4317"
Para HTTP:
name: DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT # enables HTTP receiver on port 4318
value: "0.0.0.0:4318"
Asigna los puertos de contenedor 4317 o 4318 al puerto host para el contenedor principal del Agent:
Para gRPC:
ports:
- containerPort: 4317
hostPort: 4317
name: traceportgrpc
protocol: TCP
Para HTTP
ports:
- containerPort: 4318
hostPort: 4318
name: traceporthttp
protocol: TCP
Si deseas habilitar la ingesta OTLP de logs, configura las siguientes variables de entorno de endpoint en el contenedor principal del Agent:
Habilita la recopilación de logs con tu DaemonSet:
name: DD_LOGS_ENABLED
value: "true"
Y activa la ingesta OTLP de logs:
name: DD_OTLP_CONFIG_LOGS_ENABLED
value: "true"
Sigue la [configuración de Kubernetes Agent1.
Habilita los endpoints OTLP en el Agent editando la sección datadog.otlp
del archivo values.yaml
:
Para gRPC:
otlp:
receiver:
protocols:
grpc:
enabled: true
Para HTTP:
otlp:
receiver:
protocols:
http:
enabled: true
Esto habilita cada protocolo en el puerto por defecto (4317
para OTLP/gRPC y 4318
para OTLP/HTTP).
Sigue la [configuración de Kubernetes Agent1.
Activa el protocolo preferido:
Para gRPC:
--set "datadog.otlp.receiver.protocols.grpc.enabled=true"
Para HTTP:
--set "datadog.otlp.receiver.protocols.http.enabled=true"
Esto habilita cada protocolo en el puerto por defecto (4317
para OTLP/gRPC y 4318
para OTLP/HTTP).
Hay muchas otras variables y configuraciones de entorno compatibles con el Datadog Agent. Para obtener información general de todas ellas, consulte la plantilla de configuración.
Envío de trazas, métricas y logs de OpenTelemetry al Datadog Agent
Para el contenedor de la aplicación, configura la variable de entorno OTEL_EXPORTER_OTLP_ENDPOINT
para que apunte al contenedor del Datadog Agent. Por ejemplo:
OTEL_EXPORTER_OTLP_ENDPOINT=http://<datadog-agent>:4318
Ambos contenedores deben estar definidos en el mismo puente red, que se gestiona automáticamente si utilizas Docker Compose. De lo contrario, sigue el ejemplo de Docker en Rastreo de aplicaciones Docker para configurar un puente red con los puertos correctos.
En el archivo de despliegue de la aplicación, configura el endpoint al que el cliente de OpenTelemetry envía trazas con la variable de entorno OTEL_EXPORTER_OTLP_ENDPOINT
.
Para gRPC:
env:
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: "http://$(HOST_IP):4317" # sends to gRPC receiver on port 4317
Para HTTP:
env:
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: "http://$(HOST_IP):4318" # sends to HTTP receiver on port 4318
Nota: Para mejorar las etiquetas (tags) de contenedor para métricas personalizadas, establece los atributos de recurso apropiados en el código de la aplicación donde se generan tus métricas OTLP. Por ejemplo, establece el atributo de recurso container.id
en el UID del pod.
Cuando configures el endpoint para enviar trazas, asegúrate de utilizar la ruta correcta que pide tu biblioteca OTLP. Algunas bibliotecas esperan que las trazas se envíen a la ruta /v1/traces
, mientras que otros utilizan la ruta raíz /
.
Referencias adicionales
Más enlaces, artículos y documentación útiles: