Ejecuta el Collector, especificando el archivo de configuración mediante el parámetro --config
:
otelcontribcol_linux_amd64 --config collector.yaml
Para ejecutar el OpenTelemetry Collector como una imagen de Docker y recibir trazas (traces) del 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
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 este ejemplo completo de configuración de OpenTelemetry Collector con el Exportador de Datadog como DaemonSet, incluyendo el ejemplo de configuración de la aplicación.
Algunas opciones de configuración en el ejemplo (repetidas más abajo) aseguran que los puertos esenciales del DaemonSet están expuestos y accesibles a tu aplicación:
# ...
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 no necesitas los puertos HTTP estándar y gRPC para tu aplicación, puedes eliminar las opciones correspondientes de 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 es capaz de extraer los metadatos necesarios para adjuntar a trazas. Hay roles adicionales que deben configurarse para permitir el acceso a estos metadatos. El ejemplo está completo, listo para usar, y tiene los roles correctos configurados.
Proporciona tu contenedor de aplicación. Para configurar tu contenedor de aplicación, asegúrate de que se utiliza el nombre de host correcto del endpoint OTLP. El OpenTelemetry Collector se ejecuta como un DaemonSet, por lo que el actual host necesita ser dirigido. Establece tu variable de entorno OTEL_EXPORTER_OTLP_ENDPOINT
del contenedor de aplicación correctamente, como en el gráfico de 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"
# ...
Para desplegar OpenTelemetry Collector y el Exportador de Datadog en un despliegue de Kubernetes Gateway
Utiliza este ejemplo completo de configuración de OpenTelemetry Collector con el Exportador de Datadog como DaemonSet, incluyendo el ejemplo de configuración de la aplicación.
Algunas opciones de configuración en el ejemplo (repetidas más abajo) aseguran que los puertos esenciales del DaemonSet están expuestos y accesibles a tu aplicación:
# ...
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 no necesitas los puertos HTTP estándar y gRPC para tu aplicación, puedes eliminar las opciones correspondientes de 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 es capaz de extraer los metadatos necesarios para adjuntar a trazas. Hay roles adicionales que deben configurarse para permitir el acceso a estos metadatos. El ejemplo está completo, listo para usar, y tiene los roles correctos configurados.
Proporciona tu contenedor de aplicación. Para configurar tu contenedor de aplicación, asegúrate de que se utiliza el nombre de host correcto del endpoint OTLP. El OpenTelemetry Collector se ejecuta como un DaemonSet, por lo que el actual host necesita ser dirigido. Establece tu variable de entorno OTEL_EXPORTER_OTLP_ENDPOINT
del contenedor de aplicación correctamente, como en el gráfico de 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 gateway de OpenTelemetry Collector.
Para garantizar que los metadatos de Kubernetes sigan aplicándose a trazas, indica al procesadork8sattributes
que reenvíe la IP del pod a la gateway de Collector para 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}
# ...