Ingestion OTLP par le Datadog Agent
L’ingestion OTLP dans l’Agent est un moyen d’envoyer des données de télémétrie directement depuis des applications instrumentées avec des SDK OpenTelemetry vers le Datadog Agent. Depuis les versions 6.32.0 et 7.32.0, le Datadog Agent peut ingérer des traces OTLP et des métriques OTLP via gRPC ou HTTP. Depuis les versions 6.48.0 et 7.48.0, le Datadog Agent peut ingérer des logs OTLP via gRPC ou HTTP.
L’ingestion OTLP dans l’Agent vous permet d’utiliser les fonctionnalités d’observabilité de le Datadog Agent. Les données provenant d’applications instrumentées avec le SDK OpenTelemetry ne peuvent pas être utilisées dans certains produits propriétaires Datadog, tels que App and API Protection, Continuous Profiler et Ingestion Rules. Les métriques d’exécution OpenTelemetry sont prises en charge pour certains langages.
Configuration initiale
Pour commencer, vous devez d’abord instrumenter votre application avec les SDK OpenTelemetry. Ensuite, exportez les données de télémétrie au format OTLP vers le Datadog Agent. La configuration varie en fonction du type d’infrastructure sur laquelle votre service est déployé, comme décrit sur la page ci-dessous. Bien que l’objectif soit d’être compatible avec la dernière version d’OTLP, l’ingestion OTLP dans l’Agent n’est pas compatible avec toutes les versions d’OTLP. Les versions d’OTLP compatibles avec le Datadog Agent sont celles qui sont également prises en charge par le récepteur OTLP dans l’OpenTelemetry Collector. Pour vérifier les versions exactes prises en charge, consultez le fichier go.opentelemetry.io/collector version dans l’Agent go.mod.
Lisez la documentation sur l’instrumentation OpenTelemetry pour comprendre comment diriger votre instrumentation vers l’Agent. La section receiver décrite ci-dessous suit le schéma de configuration du récepteur OTLP de l’OpenTelemetry Collector.
La configuration prise en charge consiste en un Agent d'ingestion déployé sur chaque host générant des données OpenTelemetry. Vous ne pouvez pas envoyer de télémétrie OpenTelemetry depuis des collecteurs ou des applications instrumentées s'exécutant sur un host vers un Agent sur un host différent. Cependant, à condition que l'Agent soit local au collecteur ou à l'application instrumentée par le SDK, vous pouvez configurer plusieurs pipelines.
Activation de l’ingestion OTLP sur le Datadog Agent
L’ingestion OTLP est désactivée par défaut, et vous pouvez l’activer en mettant à jour la configuration de votre fichier datadog.yaml ou en définissant des variables d’environnement. Les configurations datadog.yaml suivantes activent les points de terminaison sur les ports par défaut. Lorsqu’elle est activée, l’ingestion des métriques et des traces est activée par défaut. L’ingestion des logs est désactivée par défaut pour éviter une facturation inattendue des logs.
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.
Pour gRPC, port par défaut 4317 :
otlp_config:
receiver:
protocols:
grpc:
endpoint: 0.0.0.0:4317
logs:
enabled: false
Pour HTTP, port par défaut 4318 :
otlp_config:
receiver:
protocols:
http:
endpoint: 0.0.0.0:4318
logs:
enabled: false
Alternativement, configurez les points de terminaison en fournissant le port via les variables d’environnement :
- Pour gRPC (
localhost:4317) : DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT - Pour HTTP (
localhost:4318) : DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT
Ceux-ci doivent être transmis à la fois aux processus de l’Agent principal et de l’Agent de trace. Si vous exécutez dans un environnement conteneurisé, utilisez 0.0.0.0 au lieu de localhost pour vous assurer que le serveur est disponible sur des interfaces non locales.
Configurez soit gRPC, soit HTTP pour cette fonctionnalité. Voici un exemple d’application qui montre la configuration pour les deux.
Suivez la configuration de le Datadog Agent Docker.
Pour le conteneur de le Datadog Agent, définissez les variables d’environnement de endpoint suivantes et exposez le port correspondant :
- Pour gRPC : Définissez
DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT sur 0.0.0.0:4317 et exposez le port 4317. - Pour HTTP : Définissez
DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT sur 0.0.0.0:4318 et exposez le port 4318.
Problème connu : À partir de la version 7.61.0 de l'Agent, les pipelines d'ingestion OTLP peuvent échouer au démarrage dans les environnements Docker, affichant l'erreur : Error running the OTLP ingest pipeline: failed to register process metrics: process does not exist.
Si vous utilisez une version affectée, vous pouvez utiliser l'une de ces solutions de contournement :
1. Définissez la variable d'environnement HOST_PROC par /proc dans votre conteneur Docker Agent.
2. Supprimez /proc/:/host/proc/:ro de volumes dans votre conteneur Docker Agent.
3. Définissez pid par host dans votre conteneur Docker Agent.
Ces configurations peuvent être appliquées via la docker commande ou fichier Docker compose.
Suivez le guide d’installation de l’Agent Kubernetes pour l’installation de base.
Activez le protocole souhaité, gRPC ou HTTP, dans le manifeste datadog-agent.yaml de votre Opérateur :
Pour gRPC :
apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
name: datadog
spec:
# (...)
features:
otlp:
receiver:
protocols:
grpc:
enabled: true
For HTTP:
apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
name: datadog
spec:
# (...)
features:
otlp:
receiver:
protocols:
http:
enabled: true
After making your changes, apply the new configuration by using the following command:
kubectl apply -n $DD_NAMESPACE -f datadog-agent.yaml
Cela active chaque protocole sur le port par défaut (4317 pour OTLP/gRPC et 4318 pour OTLP/HTTP). Les métriques et les traces sont activées par défaut.
Suivez le guide d’installation de l’Agent Kubernetes pour l’installation de base.
Activez le protocole souhaité, gRPC ou HTTP, dans le fichier datadog-values.yaml de votre Helm :
Pour gRPC :
datadog:
# (...)
otlp:
receiver:
protocols:
grpc:
enabled: true
For HTTP:
datadog:
# (...)
otlp:
receiver:
protocols:
http:
enabled: true
After making your changes, upgrade your Datadog Helm chart using the following command:
helm upgrade -f datadog-values.yaml <RELEASE NAME> datadog/datadog
Cela active chaque protocole sur le port par défaut (4317 pour OTLP/gRPC et 4318 pour OTLP/HTTP). Les métriques et les traces sont activées par défaut.
Suivez le guide d’installation manuelle de Kubernetes pour l’installation de base.
Configurez les variables d’environnement suivantes dans le conteneur trace-agent et le conteneur agent principal :
Pour gRPC :
name: DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT # enables gRPC receiver on port 4317
value: "0.0.0.0:4317"
For HTTP:
name: DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT # enables HTTP receiver on port 4318
value: "0.0.0.0:4318"
Mappez les ports de conteneur 4317 ou 4318 sur le port host pour le conteneur agent principal :
Pour gRPC :
ports:
- containerPort: 4317
hostPort: 4317
name: traceportgrpc
protocol: TCP
For HTTP
ports:
- containerPort: 4318
hostPort: 4318
name: traceporthttp
protocol: TCP
Pour des instructions détaillées sur l’utilisation d’OpenTelemetry avec AWS Lambda et Datadog, notamment :
- Instrumentation de vos fonctions Lambda avec OpenTelemetry
- Utilisation de la prise en charge de l’API OpenTelemetry au sein des SDK Datadog
- Envoi de traces OpenTelemetry à la Datadog Lambda Extension
Consultez la documentation Serverless pour AWS Lambda et OpenTelemetry.
Activation de l’ingestion de logs OTLP
L’ingestion de logs OTLP est désactivée par défaut pour éviter une facturation inattendue. Pour l’activer, vous devez explicitement activer à la fois la collecte de logs et l’ingestion de logs OTLP.
Définissez les variables d’environnement suivantes dans le conteneur de le Datadog Agent :
DD_LOGS_ENABLED=trueDD_OTLP_CONFIG_LOGS_ENABLED=true
Dans votre fichier datadog-agent.yaml
spec:
# (...)
features:
otlp:
#(... enable gRPC or HTTP ingestion...)
logCollection:
enabled: true
override:
nodeAgent:
containers:
agent:
env:
- name: DD_OTLP_CONFIG_LOGS_ENABLED
value: "true"
After making your changes, apply the new configuration by using the following command:
kubectl apply -n $DD_NAMESPACE -f datadog-agent.yaml
Dans votre fichier datadog-values.yaml:
datadog:
# (...)
otlp:
#(... enable gRPC or HTTP ingestion...)
logs:
enabled: true
logs:
enabled: true
After making your changes, upgrade your Datadog Helm chart using the following command:
helm upgrade -f datadog-values.yaml <RELEASE NAME> datadog/datadog
Définissez les variables d’environnement suivantes dans le conteneur de l’Agent principal :
- name: DD_LOGS_ENABLED
value: "true"
- name: DD_OTLP_CONFIG_LOGS_ENABLED
value: "true"
Pour plus d’informations, consultez la collecte de logs avec votre DaemonSet.
De nombreuses autres variables d’environnement et paramètres sont pris en charge dans le Datadog Agent. Pour un aperçu, consultez les fichiers de configuration de l’Agent.
Envoi de traces, de métriques et de logs OpenTelemetry à le Datadog Agent
Après avoir activé l’ingestion OTLP sur le Datadog Agent, configurez votre application instrumentée par OpenTelemetry pour exporter les données de télémétrie vers le endpoint OTLP de l’Agent. Définissez la variable d’environnement OTEL_EXPORTER_OTLP_ENDPOINT dans votre environnement d’application pour diriger les données vers l’Agent. Sans cette configuration, votre application n’envoie pas de données de télémétrie à l’Agent, même si le récepteur OTLP de l’Agent est activé.
Définissez la variable d’environnement OTEL_EXPORTER_OTLP_ENDPOINT dans l’environnement de votre application:
Pour gRPC :
export OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4317"
Pour HTTP:
export OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4318"
Pour le conteneur d’application, définissez la variable d’environnement OTEL_EXPORTER_OTLP_ENDPOINT pour pointer vers le conteneur de le Datadog Agent. Exemple :
OTEL_EXPORTER_OTLP_ENDPOINT=http://<datadog-agent>:4318
Les deux conteneurs doivent être définis dans le même réseau de pont, ce qui est géré automatiquement si vous utilisez Docker Compose. Sinon, suivez l’exemple Docker dans Tracing Docker Applications pour configurer un réseau de pont avec les ports corrects.
Dans le fichier de déploiement de l’application, configurez le endpoint vers lequel le client OpenTelemetry envoie les traces avec la variable d’environnement OTEL_EXPORTER_OTLP_ENDPOINT.
Pour gRPC :
env:
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: "http://$(HOST_IP):4317" # sends to gRPC receiver on port 4317
Pour HTTP:
env:
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: "http://$(HOST_IP):4318" # sends to HTTP receiver on port 4318
Remarque : Pour enrichir les tags de conteneur pour les métriques personnalisées, définissez les attributs de ressource appropriés dans le code de l’application où vos métriques OTLP sont générées. Par exemple, définissez l’attribut de ressource container.id en utilisant un détecteur de ressources de conteneur.
Lors de la configuration du endpoint pour l'envoi de traces, assurez-vous d'utiliser le chemin correct requis par votre bibliothèque OTLP. Certaines bibliothèques attendent que les traces soient envoyées au /v1/traces chemin, tandis que d'autres utilisent le chemin racine /.
Lectures complémentaires
Documentation, liens et articles supplémentaires utiles: