Collecte de traces Kubernetes
Rapport de recherche Datadog : Bilan sur l'adoption de l'informatique sans serveur Rapport : Bilan sur l'adoption de l'informatique sans serveur

Collecte de traces Kubernetes

Pour commencer à recueillir les traces de votre application, vous devez exécuter l’Agent Datadog dans votre cluster Kubernetes.

Configuration

Pour activer la collecte de traces avec l’Agent, suivez les instructions ci-dessous :

  1. Configurez l’Agent Datadog pour qu’il accepte les traces :

    • Si vous ne l’avez pas déjà fait, installez le chart Helm.

    • Mettez à jour votre fichier values.yaml avec la configuration d’APM suivante :

      datadog:
        ## @param apm - object - required
        ## Enable apm agent and provide custom configs
        #
        apm:
          ## @param enabled - boolean - optional - default: false
          ## Enable this to enable APM and tracing, on port 8126
          #
          enabled: true
      
    • Définissez votre système d’exploitation. Indiquez targetSystem: linux ou targetSystem: windows en haut de votre fichier values.yaml.

    • Ensuite, mettez à jour votre chart Helm Datadog à l’aide de la commande suivante : helm upgrade -f values.yaml <NOM_VERSION> datadog/datadog. N’oubliez pas de définir la clé d’API dans le fichier YAML. Si vous n’avez pas défini votre système d’exploitation dans values.yaml, ajoutez --set targetSystem=linux ou --set targetSystem=windows à cette commande.

    Pour activer la collecte de traces APM, ouvre le fichier de configuration DaemonSet et modifiez les éléments suivants :

    • Autorisez la réception de données sur le port 8126 (transmission du trafic du host à l’Agent) :

       # (...)
            ports:
              # (...)
              - containerPort: 8126
                hostPort: 8126
                name: traceport
                protocol: TCP
       # (...)
      
    • Si vous utilisez une ancienne version de l’Agent (7.17 ou antérieure), en plus des étapes ci-dessus, vous devez définir les variables DD_APM_NON_LOCAL_TRAFFIC et DD_APM_ENABLED sur true dans la section env du manifeste de l’Agent de trace datadog.yaml :

       # (...)
            env:
              # (...)
              - name: DD_APM_ENABLED
                value: 'true'
              - name: DD_APM_NON_LOCAL_TRAFFIC
                value: "true"
       # (...)
      

    Mettez à jour votre manifeste datadog-agent.yaml comme suit :

    agent:
      image:
        name: "datadog/agent:latest"
      apm:
        enabled: true
    

    Consultez l’exemple de manifeste avec activation de l’APM et de la collecte des métriques pour un exemple complet.

    Ensuite, appliquez la nouvelle configuration :

    $ kubectl apply -n $DD_NAMESPACE -f datadog-agent.yaml
    
    Remarque : si vous utilisez Minikube, vous recevrez peut-être l’erreur Unable to detect the kubelet URL automatically. Dans ce cas, définissez DD_KUBELET_TLS_VERIFY=false.

  2. Configurez les pods de votre application pour qu’ils récupèrent l’IP du host afin de communiquer avec l’Agent Datadog:

  • automatiquement à l’aide du contrôleur d’admission Datadog ;

  • manuellement en utilisant l’API Downward pour récupérer l’IP du host. Le conteneur de l’application requiert la variable d’environnement DD_AGENT_HOST pointant vers status.hostIP.

        apiVersion: apps/v1
        kind: Deployment
         # ...
            spec:
              containers:
              - name: "<CONTAINER_NAME>"
                image: "<CONTAINER_IMAGE>"/"<TAG>"
                env:
                  - name: DD_AGENT_HOST
                    valueFrom:
                      fieldRef:
                        fieldPath: status.hostIP
    
  1. Configurez vos traceurs d’application pour qu’ils envoient des traces : indiquez aux traceurs d’application l’emplacement où le host de l’Agent Datadog utilise la variable d’environnement DD_AGENT_HOST. Consultez la documentation sur l’APM propre à votre langage pour obtenir davantage d’exemples.

Variables d’environnement de l’Agent

**Remarque **: Datadog vous conseille d’utiliser le tagging de service unifié lorsque vous assignez des tags. Le tagging de service unifié permet de lier les données de télémétrie Datadog entre elles via trois tags standards : env, service et version. Pour découvrir comment configurer le tagging unifié pour votre environnement, consultez la documentation dédiée au tagging de service unifié.

Voici la liste de l’ensemble des variables d’environnement disponibles pour le tracing lorsque l’Agent est exécuté dans Kubernetes :

Variable d’environnementDescription
DD_API_KEYClé d’API Datadog
DD_PROXY_HTTPSConfigure l’URL utilisée par le proxy.
DD_APM_REPLACE_TAGSNettoyer les données sensibles des tags de vos spans.
DD_HOSTNAMEDéfinit manuellement le hostname à utiliser pour les métriques si la détection automatique échoue, ou lors de l’exécution de l’Agent de cluster Datadog.
DD_DOGSTATSD_PORTDéfinit le port DogStatsD.
DD_APM_RECEIVER_SOCKETRecueillez vos traces via un socket de domaine Unix afin de ne pas tenir compte du port et du hostname configurés, le cas échéant. Cette variable est désactivée par défaut. Si vous l’activez, vous devez indiquer un fichier de socket valide.
DD_BIND_HOSTDéfinit le hostname StatsD et le hostname du récepteur.
DD_LOG_LEVELDéfinit le niveau de journalisation (trace, debug, info, warn, error, critical ou off).
DD_APM_ENABLEDLorsque ce paramètre est défini sur true, l’Agent Datadog accepte les métriques de trace. Valeur par défaut : true (Agent 7.18+)
DD_APM_CONNECTION_LIMITDéfinit la limite maximale de connexion pour un intervalle de 30 secondes.
DD_APM_DD_URLEndpoint de l’API Datadog vers lequel les traces sont envoyées. Pour le site européen de Datadog, définissez DD_APM_DD_URL sur https://trace.agent.datadoghq.eu.
DD_APM_RECEIVER_PORTPort sur lequel le récepteur de traces de l’Agent Datadog effectue son écoute. Valeur par défaut : 8126.
DD_APM_NON_LOCAL_TRAFFICAutorise le trafic non local pour le tracing depuis d’autres conteneurs. Valeur par défaut : true (Agent 7.18+)
DD_APM_IGNORE_RESOURCESConfigurer les ressources que l’Agent doit ignorer. Utilisez des expressions régulières séparées par des virgules, par exemple : GET /ignore-me,(GET|POST) /and-also-me.
DD_APM_ANALYZED_SPANSConfigurez les spans à analyser pour les transactions. Utilisez des instances de <NOM_SERVICE>|;<NOM_OPÉRATION>=1 séparées par des virgules, par exemple : my-express-app|;express.request=1,my-dotnet-app|;aspnet_core_mvc.request=1. Vous pouvez également l’activer automatiquement à l’aide du paramètre de configuration dans le client de tracing.
DD_ENVDéfinit le paramètre env global pour toutes les données émises par l’Agent. Si env n’est pas présent dans vos données de trace, cette variable sera utilisée. Consultez Configuration de l’environnement APM pour en savoir plus.
DD_APM_MAX_EPSDéfinit le nombre maximum de spans analysées par seconde. La valeur par défaut est de 200 événements par seconde.
DD_APM_MAX_TPSDéfinit le nombre maximum de traces par seconde. La valeur par défaut est de 10 traces par seconde.

Variables d’environnement d’opérateur

Variable d’environnementDescription
agent.apm.enabledPermet d’activer l’APM et le tracing sur le port 8126. Voir la documentation de Datadog relative à Docker.
agent.apm.envL’Agent Datadog prend en charge de nombreuses variables d’environnement.
agent.apm.hostPortNuméro du port à exposer sur le host. Lorsque spécifié, doit correspondre à un numéro de port valide, 0 < x < 65536. Si HostNetwork est spécifié, la valeur doit correspondre à ContainerPort. La plupart des conteneurs ne nécessitent pas ce paramètre.
agent.apm.resources.limitsIndique la quantité maximale de ressources de calcul autorisées. Pour en savoir plus, consulter la documentation Kubernetes.
agent.apm.resources.requestsIndique la quantité minimale de ressources de calcul requises. Si requests n’est pas défini pour un conteneur, la valeur limits est utilisée si celle-ci est explicitement définie. Sinon, une valeur définie au niveau de l’implémentation est utilisée. Pour en savoir plus, consulter la documentation Kubernetes.

Pour aller plus loin