Le Collecteur OpenTelemetry vous permet de collecter, traiter et exporter des données de télémétrie de vos applications de manière indépendante des fournisseurs. Lorsqu’il est configuré avec l’Exportateur Datadog et le Connecteur Datadog, vous pouvez envoyer vos traces, journaux et métriques à Datadog sans l’Agent Datadog.
Exportateur Datadog : Transmet les données de trace, de métrique et de journaux des SDK OpenTelemetry à Datadog (sans l’Agent Datadog)
Connecteur Datadog : Calcule les métriques de trace à partir des données de span collectées
Créez un fichier de configuration nommé collector.yaml.
Utilisez le fichier d’exemple suivant pour commencer.
Définissez votre clé API Datadog comme variable d’environnement DD_API_KEY.
The following examples use 0.0.0.0 as the endpoint address for convenience. This allows connections from any network interface. For enhanced security, especially in local deployments, consider using localhost instead.
For more information on secure endpoint configuration, see the OpenTelemetry security documentation.
AWS EKS Fargate n'est pas un environnement pris en charge pour le Collecteur OpenTelemetry pour le moment. Déployer le Collecteur sur EKS Fargate entraînera une facturation incorrecte de l'hôte d'infrastructure.
receivers:otlp:protocols:http:endpoint:0.0.0.0:4318grpc:endpoint:0.0.0.0:4317# The hostmetrics receiver is required to get correct infrastructure metrics in Datadog.hostmetrics:collection_interval:10sscrapers:paging:metrics:system.paging.utilization:enabled:truecpu:metrics:system.cpu.utilization:enabled:truedisk:filesystem:metrics:system.filesystem.utilization:enabled:trueload:memory:network:processes:# The prometheus receiver scrapes metrics needed for the OpenTelemetry Collector Dashboard.prometheus:config:scrape_configs:- job_name:'otelcol'scrape_interval:10sstatic_configs:- targets:['0.0.0.0:8888']filelog:include_file_path:truepoll_interval:500msinclude:- /var/log/**/*example*/*.logprocessors:batch:send_batch_max_size:100send_batch_size:10timeout:10sconnectors:datadog/connector:exporters:datadog/exporter:api:site:key:${env:DD_API_KEY}service:pipelines:metrics:receivers:[hostmetrics, prometheus, otlp, datadog/connector]processors:[batch]exporters:[datadog/exporter]traces:receivers:[otlp]processors:[batch]exporters:[datadog/connector, datadog/exporter]logs:receivers:[otlp, filelog]processors:[batch]exporters:[datadog/exporter]
Cette configuration de base permet de recevoir des données OTLP via HTTP et gRPC, et configure un processeur par lot.
Pour une liste complète des options de configuration pour l’exportateur Datadog, consultez le fichier de configuration d’exemple entièrement documenté. Des options supplémentaires comme les paramètres api::site et host_metadata peuvent être pertinentes en fonction de votre déploiement.
Configuration du processeur par lots
Le processeur par lots est requis pour les environnements non destinés au développement. La configuration exacte dépend de votre charge de travail spécifique et des types de signaux.
Configurez le processeur par lots en fonction des limites d’admission de Datadog :
Vous pouvez rencontrer 413 - Request Entity Too Large erreurs si vous regroupez trop de données de télémétrie dans le processeur par lots.
3 - Configurez votre application
Pour améliorer les métadonnées des traces et optimiser l’intégration avec Datadog :
Utilisez des détecteurs de ressources : S’ils sont fournis par le SDK de langage, attachez les informations de conteneur en tant qu’attributs de ressource. Par exemple, en Go, utilisez l’option de ressource WithContainer().
Apply Unified Service Tagging : Assurez-vous d’avoir configuré votre application avec les attributs de ressource appropriés pour unified service tagging. Cela relie la télémétrie Datadog avec des tags pour le nom du service, l’environnement de déploiement et la version du service. L’application doit définir ces tags en utilisant les conventions sémantiques OpenTelemetry : service.name, deployment.environment et service.version.
4 - Configurez le logger pour votre application
Étant donné que la fonctionnalité de journalisation des SDK OpenTelemetry n’est pas entièrement prise en charge (voir votre langage spécifique dans la documentation OpenTelemetry pour plus d’informations), Datadog recommande d’utiliser une bibliothèque de journalisation standard pour votre application. Suivez la documentation de collecte de journaux spécifique au langage pour configurer le logger approprié dans votre application. Datadog encourage fortement la configuration de votre bibliothèque de journalisation pour qu’elle produise vos journaux au format JSON afin d’éviter la nécessité de règles de parsing personnalisées.
Configurer le récepteur filelog
Configurer le récepteur filelog en utilisant opérateurs. Par exemple, s’il existe un service checkoutservice qui écrit des journaux dans /var/log/pods/services/checkout/0.log, un exemple de journal pourrait ressembler à ceci :
{"level":"info","message":"order confirmation email sent to \"jack@example.com\"","service":"checkoutservice","span_id":"197492ff2b4e1c65","timestamp":"2022-10-10T22:17:14.841359661Z","trace_id":"e12c408e028299900d48a9dd29b0dc4c"}
include : La liste des fichiers que le récepteur suit
start_at: end : Signale de lire le contenu nouvellement écrit
poll_internal : Définit la fréquence de sondage
Opérateurs :
json_parser : Analyse les journaux JSON. Par défaut, le récepteur filelog convertit chaque ligne de journal en un enregistrement de journal, qui est le body du modèle de données des journaux. Ensuite, le json_parser convertit le corps JSON en attributs dans le modèle de données.
trace_parser : Extraire le trace_id et le span_id du journal pour corréler les journaux et les traces dans Datadog.
Remapper l’attribut service.name d’OTel à service pour les journaux
Pour les versions 0.83.0 et ultérieures de Datadog Exporter, le champ service des journaux OTel est peuplé selon la convention sémantique OTelservice.name. Cependant, service.name n’est pas l’un des attributs de service par défaut dans le prétraitement des journaux de Datadog.
Pour que le champ service soit correctement peuplé dans vos journaux, vous pouvez spécifier service.name comme source du service d’un journal en définissant un processeur de remappage de service de journal.
Optionnel : utiliser Kubernetes
AWS EKS Fargate n'est pas un environnement pris en charge pour le Collecteur OpenTelemetry pour le moment. Déployer le Collecteur sur EKS Fargate entraînera une facturation incorrecte de l'hôte d'infrastructure.
Il existe plusieurs façons de déployer le Collecteur OpenTelemetry et le Datadog Exporter dans une infrastructure Kubernetes. Pour que le récepteur filelog fonctionne, le déploiement Agent/DaemonSet est la méthode de déploiement recommandée.
Dans des environnements conteneurisés, les applications écrivent des journaux dans stdout ou stderr. Kubernetes collecte les journaux et les écrit à un emplacement standard. Vous devez monter l’emplacement sur le nœud hôte dans le Collecteur pour le récepteur filelog. Ci-dessous se trouve un exemple d’extension avec les montages requis pour l’envoi des journaux.
apiVersion:apps/v1metadata:name:otel-agentlabels:app:opentelemetrycomponent:otel-collectorspec:template:metadata:labels:app:opentelemetrycomponent:otel-collectorspec:containers:-name:collectorcommand:-"/otelcol-contrib"-"--config=/conf/otel-agent-config.yaml"image:otel/opentelemetry-collector-contrib:0.71.0env:-name:POD_IPvalueFrom:fieldRef:fieldPath:status.podIP# The k8s.pod.ip is used to associate pods for k8sattributes-name:OTEL_RESOURCE_ATTRIBUTESvalue:"k8s.pod.ip=$(POD_IP)"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 metrics.volumeMounts:-name:otel-agent-config-volmountPath:/conf-name:varlogpodsmountPath:/var/log/podsreadOnly:true-name:varlibdockercontainersmountPath:/var/lib/docker/containersreadOnly:truevolumes:-name:otel-agent-config-volconfigMap:name:otel-agent-confitems:-key:otel-agent-configpath:otel-agent-config.yaml# Mount nodes log file location.-name:varlogpodshostPath:path:/var/log/pods-name:varlibdockercontainershostPath:path:/var/lib/docker/containers
Configuration du Datadog Exporter prête à l’emploi
Vous pouvez trouver des exemples fonctionnels de configuration prête à l’emploi pour le Datadog Exporter dans le exporter/datadogexporter/examples dossier du projet OpenTelemetry Collector Contrib. Voir le fichier d’exemple de configuration complet, ootb-ec2.yaml. Remarque : Cet exemple est pour des applications s’exécutant directement sur un hôte EC2. Pour les applications conteneurisées, voir la documentation de déploiement.
Configurez chacun des composants suivants selon vos besoins :