Collecte de traces APM avec Kubernetes

learning center
Essayez Introduction to Monitoring Kubernetes dans le Learning Center

Apprenez sans frais sur une véritable capacité de calcul cloud et un compte d'essai Datadog. Commencez ces laboratoires pratiques pour vous familiariser avec les métriques, les journaux et les traces APM spécifiques à Kubernetes.

INSCRIVEZ-VOUS MAINTENANT.

Cette page décrit comment configurer Application Performance Monitoring (APM) pour votre application Kubernetes.

Le pipeline de dépannage APM : le traceur envoie des traces et des données de métriques depuis le pod de l'application vers le pod de l'Agent, qui les envoie au backend Datadog pour être affichées dans l'interface utilisateur de Datadog.

Vous pouvez envoyer des traces via Unix Domain Socket (UDS), TCP (IP:Port) ou le service Kubernetes. Datadog recommande d’utiliser UDS, mais il est possible d’utiliser les trois en même temps, si nécessaire.

Note : Pour une instrumentation automatique sans configuration manuelle, voir Single Step Instrumentation for Kubernetes.

Configuration

  1. Si vous ne l’avez pas encore fait, installez l’Agent Datadog dans votre environnement Kubernetes.
  2. Configurez l’Agent Datadog pour collecter des traces.
  3. Configurez les pods d’application pour soumettre des traces à l’Agent Datadog.

Configurez l’Agent Datadog pour collecter des traces

Les instructions de cette section configurent l’Agent Datadog pour recevoir des traces via UDS. Pour utiliser TCP, voir la section configuration supplémentaire. Pour utiliser le service Kubernetes, voir Configuration de l’APM avec le service Kubernetes.

Modifiez votre datadog-agent.yaml pour définir features.apm.enabled sur true.

apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
  global:
    credentials:
      apiKey: <DATADOG_API_KEY>

  features:
    apm:
      enabled: true
      unixDomainSocketConfig:
        path: /var/run/datadog/apm.socket # default

Lorsque l’APM est activé, la configuration par défaut crée un répertoire sur l’hôte et le monte dans l’Agent. L’Agent crée ensuite et écoute sur un fichier socket /var/run/datadog/apm/apm.socket. Les pods d’application peuvent alors monter ce volume de manière similaire et écrire sur ce même socket. Vous pouvez modifier le chemin et le socket avec la valeur de configuration features.apm.unixDomainSocketConfig.path.

After making your changes, apply the new configuration by using the following command:

kubectl apply -n $DD_NAMESPACE -f datadog-agent.yaml

Remarque : Sur minikube, vous pouvez recevoir une erreur Unable to detect the kubelet URL automatically. Dans ce cas, définissez global.kubelet.tlsVerify sur false.

Si vous avez utilisé Helm pour installer l’Agent Datadog, APM est activé par défaut via UDS ou un pipe nommé Windows.

Pour vérifier, assurez-vous que datadog.apm.socketEnabled est défini sur true dans votre datadog-values.yaml.

datadog:
  apm:
    socketEnabled: true    

La configuration par défaut crée un répertoire sur l’hôte et le monte dans l’Agent. L’Agent crée ensuite et écoute sur un fichier socket /var/run/datadog/apm.socket. Les pods d’application peuvent alors monter ce volume de manière similaire et écrire sur ce même socket. Vous pouvez modifier le chemin et le socket avec les valeurs de configuration datadog.apm.hostSocketPath et datadog.apm.socketPath.

datadog:
  apm:
    # the following values are default:
    socketEnabled: true
    hostSocketPath: /var/run/datadog/
    socketPath: /var/run/datadog/apm.socket

Pour désactiver APM, définissez datadog.apm.socketEnabled sur false.

After making your changes, upgrade your Datadog Helm chart using the following command:

helm upgrade -f datadog-values.yaml <RELEASE NAME> datadog/datadog

Remarque : Sur minikube, vous pouvez recevoir une erreur Unable to detect the kubelet URL automatically. Dans ce cas, définissez datadog.kubelet.tlsVerify sur false.

Configurez vos pods d’application pour soumettre des traces à l’Agent Datadog

Le Contrôleur d’Admission Datadog est un composant de l’Agent de Cluster Datadog qui simplifie la configuration de vos pods d’application. En savoir plus en lisant la documentation du Contrôleur d’Admission Datadog.

Utilisez le Contrôleur d’Admission Datadog pour injecter des variables d’environnement et monter les volumes nécessaires sur de nouveaux pods d’application, configurant automatiquement la communication des traces entre le pod et l’Agent. Apprenez à configurer automatiquement votre application pour soumettre des traces à l’Agent Datadog en lisant la documentation sur l’injection de bibliothèques à l’aide du Contrôleur d’Admission.

Si vous envoyez des traces à l’Agent en utilisant UDS, montez le répertoire hôte dans lequel se trouve le socket (que l’Agent a créé) dans le conteneur d’application et spécifiez le chemin vers le socket avec DD_TRACE_AGENT_URL :

apiVersion: apps/v1
kind: Deployment
#(...)
    spec:
      containers:
      - name: "<CONTAINER_NAME>"
        image: "<CONTAINER_IMAGE>/<TAG>"
        env:
        - name: DD_TRACE_AGENT_URL
          value: 'unix:///var/run/datadog/apm.socket'
        volumeMounts:
        - name: apmsocketpath
          mountPath: /var/run/datadog
        #(...)
      volumes:
        - hostPath:
            path: /var/run/datadog/
          name: apmsocketpath

Configurez vos SDK d’application pour émettre des traces :

Après avoir configuré votre Agent Datadog pour collecter des traces et donné à vos pods d’application la configuration sur envoyer les traces, installez le SDK Datadog dans vos applications pour émettre les traces. Une fois cela fait, le SDK envoie les traces au point de terminaison approprié DD_TRACE_AGENT_URL.

Si vous envoyez des traces à l’Agent en utilisant TCP (<IP_ADDRESS>:8126), fournissez cette adresse IP à vos pods d’application—soit automatiquement avec le Contrôleur d’Admission Datadog, soit manuellement en utilisant l’API descendante pour récupérer l’IP de l’hôte. Le conteneur d’application a besoin de la variable d’environnement DD_AGENT_HOST qui pointe 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

Remarque : Cette configuration nécessite que l’Agent soit configuré pour accepter des traces via TCP

Configurez vos SDK d’application pour émettre des traces :

Après avoir configuré votre Agent Datadog pour collecter des traces et avoir donné à vos pods d’application la configuration sur envoyer les traces, installez le SDK Datadog dans vos applications pour émettre les traces. Une fois cela fait, le SDK envoie automatiquement les traces au point de terminaison approprié DD_AGENT_HOST.

Consultez la documentation sur APM propre à votre langage pour obtenir davantage d’exemples.

Configuration supplémentaire

Configurez l’Agent Datadog pour accepter des traces via TCP

Mettez à jour votre datadog-agent.yaml avec ce qui suit :

apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
  global:
    credentials:
      apiKey: <DATADOG_API_KEY>

  features:
    apm:
      enabled: true
      hostPortConfig:
        enabled: true
        hostPort: 8126 # default

After making your changes, apply the new configuration by using the following command:

kubectl apply -n $DD_NAMESPACE -f datadog-agent.yaml

Avertissement : Le paramètre hostPort ouvre un port sur votre hôte. Assurez-vous que votre pare-feu n’autorise l’accès qu’à vos applications ou à des sources de confiance. Si votre plugin réseau ne prend pas en charge hostPorts, ajoutez hostNetwork: true dans les spécifications de votre pod Agent. Cela partage l’espace de noms réseau de votre hôte avec l’Agent Datadog. Cela signifie également que tous les ports ouverts sur le conteneur sont ouverts sur l’hôte. Si un port est utilisé à la fois sur l’hôte et dans votre conteneur, ils entrent en conflit (puisqu’ils partagent le même espace de noms réseau) et le pod ne démarre pas. Certaines installations Kubernetes ne permettent pas cela.

Mettez à jour votre fichier datadog-values.yaml avec la configuration APM suivante :

datadog:
  apm:
    portEnabled: true
    port: 8126 # default

After making your changes, upgrade your Datadog Helm chart using the following command:

helm upgrade -f datadog-values.yaml <RELEASE NAME> datadog/datadog

Avertissement : Le paramètre datadog.apm.portEnabled ouvre un port sur votre hôte. Assurez-vous que votre pare-feu n’autorise l’accès qu’à vos applications ou à des sources de confiance. Si votre plugin réseau ne prend pas en charge hostPorts, ajoutez hostNetwork: true dans les spécifications de votre pod Agent. Cela partage l’espace de noms réseau de votre hôte avec l’Agent Datadog. Cela signifie également que tous les ports ouverts sur le conteneur sont ouverts sur l’hôte. Si un port est utilisé à la fois sur l’hôte et dans votre conteneur, ils entrent en conflit (puisqu’ils partagent le même espace de noms réseau) et le pod ne démarre pas. Certaines installations Kubernetes ne permettent pas cela.

Variables d’environnement APM

Définissez des variables d’environnement APM supplémentaires sous override.nodeAgent.containers.trace-agent.env :

datadog-agent.yaml

apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
  override:
    nodeAgent:
      containers:
        trace-agent:
          env:
            - name: <ENV_VAR_NAME>
              value: <ENV_VAR_VALUE>

Définissez des variables d’environnement APM supplémentaires sous agents.containers.traceAgent.env :

datadog-values.yaml

agents:
  containers:
    traceAgent:
      env:
        - name: <ENV_VAR_NAME>
          value: <ENV_VAR_VALUE>

Ajoutez des variables d’environnement au DaemonSet ou au Déploiement (pour l’Agent de Cluster Datadog).

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: datadog
spec:
  template:
    spec:
      containers:
        - name: agent
          ...
          env:
            - name: <ENV_VAR_NAME>
              value: <ENV_VAR_VALUE>

Liste des variables d’environnement disponibles pour configurer APM :

Variable d’environnementDescription
DD_APM_ENABLEDLorsqu’il est défini sur true, l’Agent Datadog accepte les métriques de trace.
Par défaut : true (Agent 7.18+)
DD_APM_ENVDéfinit la balise env: sur les traces collectées.
DD_APM_RECEIVER_SOCKETPour le traçage via UDS. Lorsqu’il est défini, doit pointer vers un fichier de socket valide.
DD_APM_RECEIVER_PORTPour le traçage via TCP, le port sur lequel le récepteur de trace de l’Agent Datadog écoute.
Par défaut : 8126
DD_APM_NON_LOCAL_TRAFFICAutoriser le trafic non local lors du traçage depuis d’autres conteneurs.
Par défaut : true (Agent 7.18+)
DD_APM_DD_URLLe point de terminaison API Datadog où vos traces sont envoyées : https://trace.agent..
Default: https://trace.agent.datadoghq.com
DD_APM_TARGET_TPSThe target traces per second to sample.
Default: 10
DD_APM_ERROR_TPSThe target error trace chunks to receive per second.
Default: 10
DD_APM_MAX_EPSMaximum number of APM events per second to sample.
Default: 200
DD_APM_MAX_MEMORYWhat the Datadog Agent aims to use in terms of memory. If surpassed, the API rate limits incoming requests.
Default: 500000000
DD_APM_MAX_CPU_PERCENTThe CPU percentage that the Datadog Agent aims to use. If surpassed, the API rate limits incoming requests.
Default: 50
DD_APM_FILTER_TAGS_REQUIRECollects only traces that have root spans with an exact match for the specified span tags and values.
See Ignoring unwanted resources in APM.
DD_APM_FILTER_TAGS_REJECTRejects traces that have root spans with an exact match for the specified span tags and values.
See Ignoring unwanted resources in APM.
DD_APM_REPLACE_TAGSScrub sensitive data from your span’s tags.
DD_APM_IGNORE_RESOURCESConfigure resources for the Agent to ignore. Format should be comma separated, regular expressions.
For example: GET /ignore-me,(GET|POST) /and-also-me
DD_APM_LOG_FILEPath to file where APM logs are written.
DD_APM_CONNECTION_LIMITMaximum connection limit for a 30 second time window.
Default: 2000
DD_APM_ADDITONAL_ENDPOINTSSend data to multiple endpoints and/or with multiple API keys.
See Dual Shipping.
DD_APM_DEBUG_PORTPort for the debug endpoints for the Trace Agent. Set to 0 to disable the server.
Default: 5012.
DD_BIND_HOSTSet the StatsD and receiver hostname.
DD_DOGSTATSD_PORTFor tracing over TCP, set the DogStatsD port.
DD_ENVSets the global env for all data emitted by the Agent. If env is not present in your trace data, this variable is used.
DD_HOSTNAMEManually set the hostname to use for metrics if autodetection fails, or when running the Datadog Cluster Agent.
DD_LOG_LEVELSet the logging level.
Values: trace, debug, info, warn, error, critical, off
DD_PROXY_HTTPSConfigurez l’URL pour le proxy à utiliser.

Lectures complémentaires