Replace <DD_API_KEY> with your actual Datadog API key.
Configure the OTel Collector
Après avoir déployé l’opérateur OTel, créez la ressource OpenTelemetryCollector qui déclenche le déploiement du collecteur.
Utilisez le fichier node-collector.yaml pour spécifier votre configuration 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'# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Remplacez <CLUSTER_NAME> par un nom pour votre cluster.
Ajoutez un récepteur OTLP et l’exportateur Datadog pour tous les signaux souhaités : Publiez les ports OTLP sur le nœud avec hostPort afin que les pods d’application puissent atteindre l’instance du Collector s’exécutant sur le même nœud :
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']
(Facultatif) Activez des fonctionnalités supplémentaires :
L'activation de ces fonctionnalités peut entraîner des frais supplémentaires. Consultez la page de tarification et parlez à votre Customer Success Manager avant de continuer.
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
(Facultatif) Collectez les logs des conteneurs à partir du système de fichiers du nœud :
L'activation de la collecte des logs peut entraîner des frais supplémentaires. Consultez la page de tarification et parlez à votre Customer Success Manager avant de continuer.
Le récepteur filelog lit les logs des conteneurs à partir du nœud. Comme l’Opérateur ne monte pas automatiquement les chemins des hosts, ajoutez les répertoires de logs en tant que volumes en lecture seule :
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
Fichier node-collector.yaml terminé
Votre fichier node-collector.yaml devrait ressembler à ceci :
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
Remplacez <CLUSTER_NAME> par un nom pour votre cluster.
Utilisez un fichier YAML pour spécifier les paramètres du chart Helm pour le Collector chart.
Créez un fichier node-collector-values.yaml vide :
touch node-collector-values.yaml
Les paramètres non spécifiés utilisent les valeurs par défaut de values.yaml.
Choisissez le mode daemonset et utilisez DDOT comme 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
Pour FED, définissez tag: 7.83.1-fips pour utiliser l'image DDOT conforme FIPS. Consultez la conformité FIPS.
Le Helm chart du Collector publie les ports OTLP sur chaque nœud par défaut (hostPort: 4317 pour gRPC et hostPort: 4318 pour HTTP), afin que les pods d'application puissent atteindre l'instance du Collector s'exécutant sur le même nœud. Consultez Configurer l'application.
Configurez l’exportateur Datadog et le secret de la clé d’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'# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Remplacez <CLUSTER_NAME> par un nom pour votre cluster.
(Facultatif) Activez des fonctionnalités Datadog supplémentaires :
L'activation de ces fonctionnalités peut entraîner des frais supplémentaires. Consultez la page de tarification et parlez à votre Customer Success Manager avant de continuer.
Votre fichier node-collector-values.yaml devrait ressembler à ceci :
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
Déployez le Collector
Appliquez le fichier node-collector.yaml pour créer la ressource OpenTelemetryCollector. Le Datadog Operator déploie le Collector en tant que DaemonSet, en exécutant une instance par nœud :
kubectl apply -f node-collector.yaml
Installez le Helm chart OpenTelemetry Collector avec votre fichier de valeurs :
Pour appliquer des modifications ultérieures, exécutez helm upgrade node-collector open-telemetry/opentelemetry-collector -f node-collector-values.yaml.
Installez le Datadog Agent principal aux côtés de DDOT
Si vous souhaitez exécuter le Datadog Agent principal sur les mêmes nœuds que le Collector DDOT autonome — par exemple, pour collecter des métriques d’infrastructure, l’APM ou des logs via l’Agent principal pendant que DDOT gère l’ingestion OTLP — vous pouvez l’installer séparément en utilisant le Datadog Operator.
Par défaut, le Datadog Operator Helm chart surveille DatadogAgent les ressources uniquement dans l’espace de nommage où le Datadog Operator est installé (watchNamespaces: []). Si la DatadogAgent ressource se trouve dans un espace de nommage différent de celui du Datadog Operator, par exemple pour la garder séparée du espace de nommage de la OpenTelemetryCollector ressource, définissez watchNamespaces pour inclure l’espace de nommage où la DatadogAgent la ressource est créée :
Si le Datadog Operator ne surveille pas l’espace de nommage où la DatadogAgent ressource est créée, la ressource échoue silencieusement à se réconcilier, sans erreur, sans événement Kubernetes et sans mise à jour de statut pour indiquer le problème.
Envoyez votre télémétrie à Datadog
Pour envoyer vos données de télémétrie à Datadog :
Exemple d’application instrumentée avec l’API OpenTelemetry
À titre d’exemple, vous pouvez utiliser l’exemple d’application Calendar qui est déjà instrumenté pour vous. Le code suivant instrumente la méthode CalendarService.getDate() en utilisant les annotations et l’API OpenTelemetry :
Le conteneur de votre application doit envoyer des données au collecteur DDOT exécuté sur le même nœud. Comme le collecteur publie les ports OTLP sur le nœud avec hostPort, l’application peut atteindre le collecteur local via l’adresse IP du nœud (status.hostIP).
Si la variable d’environnement OTEL_EXPORTER_OTLP_ENDPOINT n’est pas déjà définie, ajoutez-la au fichier manifeste de déploiement de votre application :
Le Unified service tagging relie les données d’observabilité dans Datadog afin que vous puissiez naviguer entre les métriques, les traces et les logs avec des tags cohérents.
Dans les environnements conteneurisés, définissez env, service et version à l’aide des variables d’environnement des attributs de ressource OpenTelemetry. Le collecteur DDOT détecte cette configuration de marquage et l’applique aux données qu’il collecte à partir des conteneurs.
Ajoutez les variables d’environnement suivantes au manifeste de déploiement de votre application :
Redéployez votre application pour appliquer les modifications apportées au manifeste de déploiement. Une fois la configuration mise à jour active, [Unified Service Tagging] est entièrement activé pour vos métriques, traces et logs.
Explorez les données d’observabilité dans Datadog
Utilisez Datadog pour explorer les données d’observabilité de votre application.
Automatisation du parc
Explorez la configuration de votre Collector.
Surveillance des conteneurs en temps réel
Surveillez l’état de vos conteneurs à l’aide des fonctionnalités de Live Container Monitoring.
État de santé des nœuds d’infrastructure
Affichez les métriques d’exécution et d’infrastructure pour visualiser, surveiller et mesurer les performances de vos nœuds.
Logs
Consultez les logs pour surveiller et diagnostiquer les opérations de l’application et du système.
Traces
Affichez les traces et les spans pour observer l’état et les performances des requêtes traitées par votre application, avec des métriques d’infrastructure corrélées dans la même trace.
Métriques runtime
Surveillez les métriques runtime (JVM) pour vos applications.
Métriques de santé du Collector
Affichez les métriques du DDOT Collector pour surveiller la santé du Collector.
Pour aller plus loin
Documentation, liens et articles supplémentaires utiles: