Esta página te guía a través de varias opciones de implementación para OpenTelemetry Collector con el Exportador Datadog, que te permite enviar trazas (traces), métricas, y logs a Datadog.
Descargar el Collector
Para ejecutar OpenTelemetry Collector junto con el Exportador de Datadog, descarga la última versión de la distribución de OpenTelemetry Collector Contrib.
Implementar el Collector
El OpenTelemetry Collector se puede implementar en varios entornos para adaptarse a diferentes necesidades de infraestructura. Esta sección cubre las siguientes opciones de implementación:
Es importante tener en cuenta que determinadas funciones y capacidades pueden variar en función del método de implementación. Para obtener una descripción detallada de estas diferencias, consulta las Limitaciones basadas en la implementación.
Elige la opción de implementación que mejor se adapte a tu infraestructura y completa las siguientes instrucciones.
En un host
Ejecuta el programa Collector, especificando el archivo de configuración mediante el parámetro --config
:
otelcontribcol_linux_amd64 --config collector.yaml
Docker
Para ejecutar el OpenTelemetry Collector como una imagen de Docker y recibir trazas (traces) desde el mismo host:
Elige una imagen de Docker publicada, como otel/opentelemetry-collector-contrib
.
Determina qué puertos abrir en tu contenedor para que las trazas de OpenTelemetry se envíen al OpenTelemetry Collector. Por defecto, las trazas se envían a través de gRPC en el puerto 4317. Si no utilizas gRPC, utiliza el puerto 4318.
Ejecuta el contenedor y expone el puerto necesario, con el archivo collector.yaml
. Por ejemplo, si estás utilizando el puerto 4317:
$ docker run \
-p 4317:4317 \
--hostname $(hostname) \
-v $(pwd)/otel_collector_config.yaml:/etc/otelcol-contrib/config.yaml \
otel/opentelemetry-collector-contrib
Para ejecutar el OpenTelemetry Collector como una imagen de Docker y recibir trazas de otros contenedores:
Crea una red de Docker:
docker network create <NETWORK_NAME>
Ejecuta el OpenTelemetry Collector y contenedores de aplicaciones como parte de la misma red.
# Run the OpenTelemetry Collector
docker run -d --name opentelemetry-collector \
--network <NETWORK_NAME> \
--hostname $(hostname) \
-v $(pwd)/otel_collector_config.yaml:/etc/otelcol-contrib/config.yaml \
otel/opentelemetry-collector-contrib
Al ejecutar la aplicación de contenedor, asegúrate de que la variable de entorno OTEL_EXPORTER_OTLP_ENDPOINT
esté configurada para utilizar el nombre de host apropiado para el OpenTelemetry Collector. En el ejemplo siguiente, se trata de opentelemetry-collector
.
# Run the application container
docker run -d --name app \
--network <NETWORK_NAME> \
--hostname $(hostname) \
-e OTEL_EXPORTER_OTLP_ENDPOINT=http://opentelemetry-collector:4317 \
company/app:latest
Kubernetes
El uso de un DaemonSet es la forma más común y recomendada de configurar la recopilación de OpenTelemetry en un entorno de Kubernetes. Para desplegar el OpenTelemetry Collector y el Exportador de Datadog en una infraestructura de Kubernetes:
Utiliza esta configuración del ejemplo, incluida la configuración de la aplicación, para configurar OpenTelemetry Collector con el Exportador de Datadog como DaemonSet.
Asegúrate de que los puertos esenciales para el DaemonSet estén expuestos y accesibles para tu aplicación. Las siguientes opciones de configuración del ejemplo definen estos puertos:
# ...
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 Collector observability metrics.
# ...
Si tu aplicación no requiere HTTP ni gRPC, elimina los puertos no utilizados de la configuración.
Para recopilar valiosos atributos de Kubernetes, que se utilizan para el etiquetado del contenedor de Datadog, informa la IP del pod como atributo de recurso, como se muestra en el ejemplo:
# ...
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)"
# ...
Esto asegura que Kubernetes Attributes Processor, que se utiliza en el mapa de configuración, sea capaz de extraer los metadatos necesarios para adjuntar a trazas (traces). Hay roles adicionales que se deben configurar para permitir el acceso a estos metadatos. El ejemplo está completo, listo para usar y tiene configurados los roles correctos.
Configura tu contenedor de la aplicación para utilizar el nombre correcto del host del endpoint de OTLP. Dado que el OpenTelemetry Collector se ejecuta como un DaemonSet, se debe seleccionar el host actual. Ejecuta la variable de entorno OTEL_EXPORTER_OTLP_ENDPOINT
de tu contenedor de la aplicación en consecuencia, como en el gráfico del ejemplo:
# ...
env:
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
# The application SDK must use this environment variable in order to successfully
# connect to the DaemonSet's collector.
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: "http://$(HOST_IP):4318"
# ...
Configura la recopilación de metadatos del host para garantizar la exactitud de la información del host. Configura tu DaemonSet para recopilar y reenviar metadatos del host:
processors:
resourcedetection:
detectors: [system, env]
k8sattributes:
# existing k8sattributes config
transform:
trace_statements:
- context: resource
statements:
- set(attributes["datadog.host.use_as_metadata"], true)
...
service:
pipelines:
traces:
receivers: [otlp]
processors: [resourcedetection, k8sattributes, transform, batch]
exporters: [datadog]
Esta configuración recopila metadatos del host utilizando el procesador resourcedetection
, añade metadatos de Kubernetes con el procesador k8sattributes
y configura el atributo datadog.host.use_as_metadata
en true
. Para obtener más información, consulta Asignar las convenciones semánticas de OpenTelemetry a la información del host de la lista de infraestructuras.
Para desplegar OpenTelemetry Collector y el Exportador de Datadog en un despliegue de Kubernetes Gateway:
Utiliza esta configuración del ejemplo, incluida la configuración de la aplicación, para configurar OpenTelemetry Collector con el Exportador de Datadog como DaemonSet.
Asegúrate de que los puertos esenciales para el DaemonSet estén expuestos y accesibles para tu aplicación. Las siguientes opciones de configuración del ejemplo definen estos puertos:
# ...
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 Collector observability metrics.
# ...
Si tu aplicación no requiere HTTP ni gRPC, elimina los puertos no utilizados de la configuración.
Para recopilar valiosos atributos de Kubernetes, que se utilizan para el etiquetado del contenedor de Datadog, informa la IP del pod como atributo de recurso, como se muestra en el ejemplo:
# ...
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)"
# ...
Esto asegura que Kubernetes Attributes Processor, que se utiliza en el mapa de configuración, sea capaz de extraer los metadatos necesarios para adjuntar a trazas (traces). Hay roles adicionales que se deben configurar para permitir el acceso a estos metadatos. El ejemplo está completo, listo para usar y tiene configurados los roles correctos.
Configura tu contenedor de la aplicación para utilizar el nombre correcto del host del endpoint de OTLP. Dado que el OpenTelemetry Collector se ejecuta como un DaemonSet, se debe seleccionar el host actual. Configura la variable de entorno OTEL_EXPORTER_OTLP_ENDPOINT
de tu contenedor de la aplicación en consecuencia, como en el gráfico del ejemplo:
# ...
env:
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
# The application SDK must use this environment variable in order to successfully
# connect to the DaemonSet's collector.
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: "http://$(HOST_IP):4318"
# ...
Cambia el DaemonSet para incluir un exportador OTLP en lugar del Exportador de Datadog actualmente en su lugar:
# ...
exporters:
otlp:
endpoint: "<GATEWAY_HOSTNAME>:4317"
# ...
Asegúrate de que los pipelines de servicio utilizan este exportador, en lugar del de Datadog que está en el ejemplo:
# ...
service:
pipelines:
metrics:
receivers: [hostmetrics, otlp]
processors: [resourcedetection, k8sattributes, batch]
exporters: [otlp]
traces:
receivers: [otlp]
processors: [resourcedetection, k8sattributes, batch]
exporters: [otlp]
# ...
Esto asegura que cada Agent reenvíe sus datos a través del protocolo OTLP a la gateway de Collector.
Sustituye <GATEWAY_HOSTNAME>
por la dirección de tu puerta enlace de OpenTelemetry Collector.
Configura el procesador k8sattributes
para reenviar la IP del pod al Collector de puertas de enlace, de manera tal que pueda obtener los metadatos:
# ...
k8sattributes:
passthrough: true
# ...
Para más información sobre la opción passthrough
, lee su documentación.
Asegúrate de que la configuración de la gateway de Collector utiliza la misma configuración del exportador de Datadog que ha sido sustituida por el exportador OTLP en el Agent. Por ejemplo (donde <DD_SITE>
es tu sitio,
):
# ...
exporters:
datadog:
api:
site: <DD_SITE>
key: ${env:DD_API_KEY}
# ...
Configura la recopilación de metadatos del host:
En una implementación de puerta de enlace, debes asegurarte de que los recopiladores del Agent recopilen los metadatos del host y que el recopilador de puertas de enlace los conserve. Esto garantiza que los agentes recopilen los metadatos del host y que se reenvíen correctamente a través de la puerta de enlace a Datadog.
Para obtener más información, consulta Asignar convenciones semánticas de OpenTelemetry a la información del host de la lista de infraestructuras.
Configuración del Agent Collector:
processors:
resourcedetection:
detectors: [system, env]
k8sattributes:
passthrough: true
exporters:
otlp:
endpoint: "<GATEWAY_HOSTNAME>:4317"
service:
pipelines:
traces:
receivers: [otlp]
processors: [resourcedetection, k8sattributes, transform, batch]
exporters: [otlp]
Configuración del recopilador de puertas de enlace:
processors:
k8sattributes:
extract:
metadata: [node.name, k8s.node.name]
exporters:
datadog:
api:
key: ${DD_API_KEY}
hostname_source: resource_attribute
service:
pipelines:
traces:
receivers: [otlp]
processors: [k8sattributes, batch]
exporters: [datadog]
Resolución de nombres de host
Consulta Asignación de convenciones semánticas de OpenTelemetry a nombres de host para entender cómo se resuelve el nombre de host.
Limitaciones basadas en el despliegue
El OpenTelemetry Collector tiene dos métodos principales de despliegue: Agent y Gateway. Según tu método de despliegue, los siguientes componentes están disponibles:
Modo de despliegue | Métricas de host | Métricas de orquestación de Kubernetes | Trazas | Autoingesta de logs |
---|
como Gateway | | | | |
como Agent | | | | |
Referencias adicionales
Más enlaces, artículos y documentación útiles: