Replace <DD_API_KEY> with your actual Datadog API key.
Configure the OTel Collector
Después de implementar el OTel Operator, cree el recurso OpenTelemetryCollector que activa la implementación del Collector.
Utilice el archivo node-collector.yaml para especificar su configuración de daemonset OpenTelemetryCollector.
node-collector.yaml
apiVersion:opentelemetry.io/v1beta1kind:OpenTelemetryCollectormetadata:name:node-collectorspec:# Deploy 1 instance per node, that will collect telemetry from that node's podsmode:daemonsetcommand:['otel-agent','run']# Will no longer be necessary from 7.82.0 onwardsconfig:exporters:datadog:api:key:${env:DD_API_KEY}site:${env:DD_SITE}sending_queue:batch:flush_timeout:10sservice:telemetry:resource:k8s.cluster.name:${env:K8S_CLUSTER_NAME}env:- name:DD_API_KEYvalueFrom:secretKeyRef:key:api-keyname:datadog-apikey- name:DD_SITEvalueFrom:secretKeyRef:key:sitename:datadog-apikey- name:DD_OTELCOLLECTOR_CONVERTER_FEATURESvalue:datadog,pprof,zpages,prometheus,infraattributes- name:K8S_CLUSTER_NAMEvalue:<CLUSTER_NAME># vvv Will no longer be necessary from 7.83.0 onwards vvv- name:DD_OTEL_STANDALONEvalue:'true'# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^# vvv Will no longer be necessary from 7.82.0 onwards vvv- name:DD_OTELCOLLECTOR_ENABLEDvalue:'true'# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Reemplace <CLUSTER_NAME> con un nombre para su clúster.
Agregue un receptor OTLP y el exportador de Datadog para todas las señales deseadas. Publique los puertos OTLP en el nodo con hostPort para que los pods de la aplicación puedan llegar a la instancia del Collector que se ejecuta en el mismo nodo:
node-collector.yaml
# [...]spec:# [...]# Publish the OTLP ports on the node's network interfaceports:- name:otlp-grpcport:4317protocol:TCPhostPort:4317- name:otlp-httpport:4318protocol:TCPhostPort:4318config:receivers:otlp:protocols:grpc:endpoint:0.0.0.0:4317http:endpoint:0.0.0.0:4318# [...]service:# [...]pipelines:logs:receivers:['otlp']exporters:['datadog']metrics:receivers:['otlp']exporters:['datadog']traces:receivers:['otlp']exporters:['datadog']
(Opcional) Habilite funciones adicionales:
Habilitar estas funciones puede generar cargos adicionales. Revise la página de precios y hable con su Gerente de Éxito del Cliente antes de continuar.
node-collector.yaml
spec:config:receivers:host_metrics:collection_interval:15sscrapers:cpu:{}load:{}memory:{}network:{}disk:{}kubelet_stats:auth_type:serviceAccountcollection_interval:15sendpoint:${env:K8S_NODE_NAME}:10250node:${env:K8S_NODE_NAME}metric_groups:- pod- container- volumeprocessors:infraattributes:cardinality:2resource/add-cluster-name:attributes:- key:k8s.cluster.namevalue:${env:K8S_CLUSTER_NAME}action:upsertconnectors:datadog/connector:traces:compute_top_level_by_span_kind:truepeer_tags_aggregation:truecompute_stats_by_span_kind:trueextensions:health_check:endpoint:"${env:K8S_POD_IP}:13133"# [...]service:# [...]extensions:['health_check']pipelines:logs:# [...]processors:['resource/add-cluster-name','infraattributes']metrics:receivers:['host_metrics','otlp','kubelet_stats','datadog/connector']processors:['resource/add-cluster-name','infraattributes']# [...]traces:# [...]processors:['resource/add-cluster-name','infraattributes']exporters:['datadog','datadog/connector']env:# [...]- name:K8S_POD_IPvalueFrom:fieldRef:apiVersion:v1fieldPath:status.podIP# K8S_NODE_NAME is added automatically by the operator
(Opcional) Recopile registros de contenedor del sistema de archivos del nodo:
Habilitar la recopilación de registros puede generar cargos adicionales. Revise la página de precios y hable con su Gerente de Éxito del Cliente antes de continuar.
El receptor filelog lee los registros de contenedor del nodo. Debido a que el Operador no monta rutas del servidor automáticamente, agregue los directorios de registro como volúmenes de solo lectura:
node-collector.yaml
spec:config:receivers:filelog:include:- /var/log/pods/*/*/*.log# Exclude the Collector's own logs to avoid a feedback loopexclude:- /var/log/pods/*_node-collector-collector-*_*/otc-container/*.logstart_at:endinclude_file_path:trueinclude_file_name:falseretry_on_failure:enabled:trueoperators:- id:container-parsertype:containermax_log_size:102400# [...]service:# [...]pipelines:logs:receivers:['otlp','filelog']# [...]# Mount the node's log directories into the Collector pod (read-only)volumes:- name:varlogpodshostPath:path:/var/log/pods- name:varlibdockercontainershostPath:path:/var/lib/docker/containersvolumeMounts:- name:varlogpodsmountPath:/var/log/podsreadOnly:true- name:varlibdockercontainersmountPath:/var/lib/docker/containersreadOnly:true
Archivo node-collector.yaml completado
Su archivo node-collector.yaml debería verse más o menos así:
node-collector.yaml
apiVersion:opentelemetry.io/v1beta1kind:OpenTelemetryCollectormetadata:name:node-collectorspec:# Deploy 1 instance per node, that will collect telemetry from that node's podsmode:daemonsetcommand:['otel-agent','run']# Will no longer be necessary from 7.82.0 onwards# Publish the OTLP ports on the node's network interfaceports:- name:otlp-grpcport:4317protocol:TCPhostPort:4317- name:otlp-httpport:4318protocol:TCPhostPort:4318config:receivers:otlp:protocols:grpc:endpoint:0.0.0.0:4317http:endpoint:0.0.0.0:4318host_metrics:collection_interval:15sscrapers:cpu:{}load:{}memory:{}network:{}disk:{}kubelet_stats:auth_type:serviceAccountcollection_interval:15sendpoint:${env:K8S_NODE_NAME}:10250node:${env:K8S_NODE_NAME}metric_groups:- pod- container- volumefilelog:include:- /var/log/pods/*/*/*.logexclude:- /var/log/pods/*_node-collector-collector-*_*/otc-container/*.logstart_at:endinclude_file_path:trueinclude_file_name:falseretry_on_failure:enabled:trueoperators:- id:container-parsertype:containermax_log_size:102400processors:infraattributes:cardinality:2resource/add-cluster-name:attributes:- key:k8s.cluster.namevalue:${env:K8S_CLUSTER_NAME}action:upsertconnectors:datadog/connector:traces:compute_top_level_by_span_kind:truepeer_tags_aggregation:truecompute_stats_by_span_kind:trueexporters:datadog:api:key:${env:DD_API_KEY}site:${env:DD_SITE}sending_queue:batch:flush_timeout:10sextensions:health_check:endpoint:"${env:K8S_POD_IP}:13133"service:telemetry:resource:k8s.cluster.name:${env:K8S_CLUSTER_NAME}extensions:['health_check']pipelines:logs:receivers:['otlp','filelog']processors:['resource/add-cluster-name','infraattributes']exporters:['datadog']metrics:receivers:['host_metrics','otlp','kubelet_stats','datadog/connector']processors:['resource/add-cluster-name','infraattributes']exporters:['datadog']traces:receivers:['otlp']processors:['resource/add-cluster-name','infraattributes']exporters:['datadog','datadog/connector']env:- name:DD_API_KEYvalueFrom:secretKeyRef:key:api-keyname:datadog-apikey- name:DD_SITEvalueFrom:secretKeyRef:key:sitename:datadog-apikey- name:DD_OTELCOLLECTOR_CONVERTER_FEATURESvalue:datadog,pprof,zpages,prometheus,infraattributes- name:K8S_CLUSTER_NAMEvalue:<CLUSTER_NAME>- name:K8S_POD_IPvalueFrom:fieldRef:apiVersion:v1fieldPath:status.podIP# K8S_NODE_NAME is added automatically by the operator# vvv Will no longer be necessary from 7.83.0 onwards vvv- name:DD_OTEL_STANDALONEvalue:'true'# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^# vvv Will no longer be necessary from 7.82.0 onwards vvv- name:DD_OTELCOLLECTOR_ENABLEDvalue:'true'# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^# Mount the node's log directories for the filelog receiver (read-only)volumes:- name:varlogpodshostPath:path:/var/log/pods- name:varlibdockercontainershostPath:path:/var/lib/docker/containersvolumeMounts:- name:varlogpodsmountPath:/var/log/podsreadOnly:true- name:varlibdockercontainersmountPath:/var/lib/docker/containersreadOnly:true
Reemplace <CLUSTER_NAME> con un nombre para su clúster.
Use un archivo YAML para especificar los parámetros del Helm chart para el Collector chart.
Cree un archivo node-collector-values.yaml vacío:
touch node-collector-values.yaml
Los parámetros no especificados usan los valores predeterminados de values.yaml.
Elija el modo daemonset y use DDOT como el Collector:
node-collector-values.yaml
mode:daemonsetimage:repository:datadog/ddot-collectortag:7.83.1ports:jaeger-compact:enabled:falsejaeger-grpc:enabled:falsejaeger-thrift:enabled:falsezipkin:enabled:false# Can be removed from 7.82.0 onwardscommand:name:opt/datadog-agent/embedded/bin/otel-agent
Para FED, establezca tag: 7.83.1-fips para usar la imagen DDOT compatible con FIPS. Consulte cumplimiento de FIPS.
El Helm chart del Collector publica los puertos OTLP en cada nodo por defecto (hostPort: 4317 para gRPC y hostPort: 4318 para HTTP), por lo que los pods de la aplicación pueden llegar a la instancia del Collector que se ejecuta en el mismo nodo. Consulte Configurar la aplicación.
Configure el exportador de Datadog y el secreto de la clave de API:
node-collector-values.yaml
config:exporters:datadog:api:key:${env:DD_API_KEY}site:${env:DD_SITE}sending_queue:batch:flush_timeout:10sextraEnvs:- name:DD_API_KEYvalueFrom:secretKeyRef:key:api-keyname:datadog-apikey- name:DD_SITEvalueFrom:secretKeyRef:key:sitename:datadog-apikey- name:DD_OTELCOLLECTOR_CONVERTER_FEATURESvalue:datadog,pprof,zpages,prometheus,infraattributes- name:K8S_CLUSTER_NAMEvalue:<CLUSTER_NAME># vvv Will no longer be necessary from 7.83.0 onwards vvv- name:DD_OTEL_STANDALONEvalue:'true'# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^# vvv Will no longer be necessary from 7.82.0 onwards vvv- name:DD_OTELCOLLECTOR_ENABLEDvalue:'true'# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Reemplace <CLUSTER_NAME> con un nombre para su clúster.
(Opcional) Habilite funciones adicionales de Datadog:
Habilitar estas funciones puede generar cargos adicionales. Revise la página de precios y hable con su Gerente de Éxito del Cliente antes de continuar.
Su archivo node-collector-values.yaml debería verse más o menos así:
node-collector-values.yaml
mode:daemonset# vvv To be removed from 7.82.0 onwards vvvcommand:name:opt/datadog-agent/embedded/bin/otel-agent# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^image:repository:datadog/ddot-collectortag:7.83.1presets:hostMetrics:# Add an hostmetrics receiver to the metrics pipelineenabled:truekubeletMetrics:# Add a kubeletstats receiver to the metrics pipelineenabled:truelogsCollection:# Add a filelog receiver to the logs pipelineenabled:trueincludeCollectorLogs:falseconfig:connectors:datadog/connector:traces:compute_top_level_by_span_kind:truepeer_tags_aggregation:truecompute_stats_by_span_kind:trueexporters:datadog:api:key:${env:DD_API_KEY}site:${env:DD_SITE}sending_queue:batch:flush_timeout:10sprocessors:infraattributes:cardinality:2resource/add-cluster-name:attributes:- key:k8s.cluster.namevalue:${env:K8S_CLUSTER_NAME}action:upsertreceivers:otlp:protocols:grpc:endpoint:0.0.0.0:4317http:endpoint:0.0.0.0:4318service:extensions:- health_checkpipelines:logs:receivers:- otlpprocessors:- resource/add-cluster-name- infraattributesexporters:- datadogmetrics:receivers:- otlp- datadog/connectorprocessors:- resource/add-cluster-name- infraattributesexporters:- datadogtraces:receivers:- otlpprocessors:- resource/add-cluster-name- infraattributesexporters:- datadog- datadog/connectortelemetry:resource:k8s.cluster.name:${env:K8S_CLUSTER_NAME}extraEnvs:- name:DD_API_KEYvalueFrom:secretKeyRef:key:api-keyname:datadog-apikey- name:DD_SITEvalueFrom:secretKeyRef:key:sitename:datadog-apikey- name:DD_OTELCOLLECTOR_CONVERTER_FEATURESvalue:datadog,pprof,zpages,prometheus,infraattributes- name:K8S_CLUSTER_NAMEvalue:<CLUSTER_NAME># vvv Will no longer be necessary from 7.83.0 onwards vvv- name:DD_OTEL_STANDALONEvalue:'true'# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^# vvv Will no longer be necessary from 7.82.0 onwards vvv- name:DD_OTELCOLLECTOR_ENABLEDvalue:'true'# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ports:jaeger-compact:enabled:falsejaeger-grpc:enabled:falsejaeger-thrift:enabled:falsezipkin:enabled:false
Implemente el Collector
Aplique el archivo node-collector.yaml para crear el recurso OpenTelemetryCollector. El OpenTelemetry Operator implementa el Collector como un DaemonSet, ejecutando una instancia por nodo:
kubectl apply -f node-collector.yaml
Instale el Helm chart del OpenTelemetry Collector con su archivo de valores:
Si desea ejecutar el Datadog Agent principal en los mismos nodos que el Collector DDOT independiente (por ejemplo, para recopilar métricas de infraestructura, APM o registros a través del Agent principal mientras DDOT maneja la ingesta de OTLP), puede instalarlo por separado utilizando el Datadog Operator.
De forma predeterminada, el Datadog Operator Helm chart observa DatadogAgent recursos solo en el espacio de nombres donde está instalado el Datadog Operator (watchNamespaces: []). Si el DatadogAgent recurso está en un espacio de nombres diferente al del Datadog Operator, por ejemplo, para mantenerlo separado del OpenTelemetryCollector espacio de nombres del recurso, establezca watchNamespaces para incluir el espacio de nombres donde el DatadogAgent recurso es creado:
Si el Datadog Operator no observa el espacio de nombres donde el DatadogAgent recurso es creado, el recurso falla silenciosamente al reconciliarse, sin error, sin evento de Kubernetes y sin actualización de estado que indique el problema.
El contenedor de su aplicación debe enviar datos al Collector de DDOT que se ejecuta en el mismo nodo. Debido a que el Collector publica los puertos OTLP en el nodo con hostPort, la aplicación puede comunicarse con el Collector local a través de la dirección IP del nodo (status.hostIP).
Si la variable de entorno OTEL_EXPORTER_OTLP_ENDPOINT aún no está configurada, agréguela al archivo de manifiesto de implementación de su aplicación:
Unified service tagging vincula los datos de observabilidad en Datadog para que pueda navegar entre métricas, trazas y registros con etiquetas consistentes.
En entornos contenerizados, configure env, service y version utilizando variables de entorno de atributos de recursos de OpenTelemetry. El Collector de DDOT detecta esta configuración de etiquetado y la aplica a los datos que recopila de los contenedores.
Agregue las siguientes variables de entorno al manifiesto de implementación de su aplicación:
Vuelva a implementar su aplicación para aplicar los cambios realizados en el manifiesto de implementación. Una vez que la configuración actualizada esté activa, Unified Service Tagging estará completamente habilitado para sus métricas, trazas y registros.
Explore los datos de observabilidad en Datadog
Utilice Datadog para explorar los datos de observabilidad de su aplicación.
Fleet Automation
Explore la configuración de su Collector.
Monitoreo en vivo de contenedor
Haga un seguimiento del estado de sus contenedores utilizando las capacidades de Container Monitoring.
Estado de salud del nodo de infraestructura
Vea las métricas de tiempo de ejecución y de infraestructura para visualizar, monitorear y medir el rendimiento de sus nodos.
Registros
Vea los registros para monitorear y solucionar problemas de las operaciones de la aplicación y del sistema.
Trazas
Visualice las trazas y los spans para observar el estado y el rendimiento de las solicitudes procesadas por su aplicación, con métricas de infraestructura correlacionadas en la misma traza.
Métricas de tiempo de ejecución
Monitoree las métricas de tiempo de ejecución (JVM) de sus aplicaciones.
Métricas de salud del colector
Visualice las métricas del DDOT Collector para hacer un seguimiento de la salud del Collector.
Lecturas adicionales
Documentación, enlaces y artículos útiles adicionales: