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.

Diagramme : le SDK OpenTelemetry envoie des données via le protocole OTLP à un collecteur avec l'exportateur Datadog, qui les transfère vers la plateforme Datadog.
Pour voir quelles fonctionnalités Datadog sont prises en charge avec cette configuration, consultez le tableau de compatibilité des fonctionnalités sous OTel vers le Datadog Agent (OTLP).

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.

  1. Suivez la configuration de le Datadog Agent Docker.

  2. 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.
  1. Suivez le guide d’installation de l’Agent Kubernetes pour l’installation de base.

  2. 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.

  1. Suivez le guide d’installation de l’Agent Kubernetes pour l’installation de base.

  2. 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.

  1. Suivez le guide d’installation manuelle de Kubernetes pour l’installation de base.

  2. 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"
    
  3. 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.

  1. Activez la collecte de logs en suivant la configuration de la collecte de logs de l’Agent host :

    logs_enabled: true
    
  2. Définissez otlp_config.logs.enabled sur true :

    otlp_config:
      logs:
        enabled: true
    

Définissez les variables d’environnement suivantes dans le conteneur de le Datadog Agent :

  • DD_LOGS_ENABLED=true
  • DD_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"
  1. 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
    
  2. 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