Optimisez la collecte des logs Kubernetes avec Datadog Agent et Helm

Statut: Rédaction Visuels: No Type de contenu: Article, monitoring

La collecte des logs dans un cluster Kubernetes avec Datadog nécessite l’exécution d’un Datadog Agent sur chaque nœud. Ce dernier peut être déployé facilement via Helm, avec une configuration adaptée pour activer la collecte des logs.

1. Déploiement de l’agent Datadog avec Helm

Pour activer la collecte des logs de tous les conteneurs, il suffit de modifier le fichier datadog-values.yaml comme suit :

datadog:
  logs:
    enabled: true
    containerCollectAll: true
  • containerCollectAll: true active la collecte des logs de tous les conteneurs dans tous les pods du cluster.
  • Si cette valeur est false (par défaut), la collecte s’appuie uniquement sur la configuration fine de l’Autodiscovery.

2. Autodiscovery et ciblage des logs

Comment fonctionne containerCollectAll ?

Quand elle est activée, la collecte remonte les logs de tous les conteneurs présents sur le nœud, via un daemonset Datadog Agent répliqué sur chaque nœud, déployé soit via Datadog Operator soit via Helm.

Exclure certains pods ou conteneurs

Si vous souhaitez collecter uniquement certains logs, plusieurs options s’offrent à vous :

  • Variables d’environnement dans le conteneur Datadog Agent pour exclure ou inclure des conteneurs par nom, image, ou namespace Kubernetes.
  • Annotations Kubernetes sur les pods pour bloquer la collecte des logs de pods ou conteneurs spécifiques.

⚠️ Attention : les conteneurs exclus ne remontent plus leurs logs ni métriques.

3. Configuration avancée de l’agent Datadog

Variables d’environnement clés

Pour affiner la collecte, vous pouvez définir ces variables dans l’agent :

  • DD_CONTAINER_EXCLUDE — liste d’exclusions (par nom, image, namespace)
  • DD_CONTAINER_INCLUDE — liste d’inclusions spécifiques
DD_CONTAINER_EXCLUDE="name:^dd-agent$ image:unwanted-image kube_namespace:kube-system"

Ces valeurs sont séparées par des espaces et supportent des expressions régulières.

Déploiement avec Datadog Operator

Exemple de configuration pour exclure certains conteneurs par image :

apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
  global:
    credentials:
      apiKey: <DATADOG_API_KEY>
  override:
    nodeAgent:
      env:
      - name: DD_CONTAINER_EXCLUDE
        value: "image:<IMAGE_NAME>"

Déploiement avec Helm

Dans votre fichier values.yaml Helm, utilisez les options suivantes :

datadog:
  containerExclude: "image:<IMAGE_NAME_1> image:<IMAGE_NAME_2>"
  containerInclude: "image:<IMAGE_NAME_3> image:<IMAGE_NAME_4>"
  containerExcludeLogs: "image:<IMAGE_NAME_5>"
  containerIncludeLogs: "image:<IMAGE_NAME_6>"
  containerExcludeMetrics: "image:<IMAGE_NAME_7>"
  containerIncludeMetrics: "image:<IMAGE_NAME_8>"

4. Contrôle via annotations de pods Kubernetes

Vous pouvez également gérer la collecte au niveau des pods via des annotations spécifiques, par exemple :

metadata:
  annotations:
    ad.datadoghq.com/<container_name>.logs: '[{"source": "python", "service": "my-service"}]'
    ad.datadoghq.com/<container_name>.logs.exclude: "true"

Consultez la documentation officielle pour plus d’options.

⚠️ Assurez-vous que vos agents Datadog sont bien déployés et à jour pour que ces configurations soient prises en compte.


Conclusion

La configuration de la collecte des logs dans Kubernetes avec Datadog est flexible et puissante, permettant à la fois une collecte globale simple et un filtrage très précis via variables d’environnement ou annotations Kubernetes. Cela vous aide à réduire le bruit, optimiser vos coûts et vous concentrer sur les logs importants.