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.