Fonction Autodiscovery de l'Agent
Présentation
Dans une infrastructure conteneurisée, les conteneurs peuvent basculer d’un host à un autre, ce qui complique leur surveillance. En raison du dynamisme des systèmes conteneurisés, la surveillance manuelle n’est pas une chose aisée.
Pour y remédier, vous pouvez utiliser la fonction Autodiscovery de Datadog afin d’identifier automatiquement les services qui s’exécutent sur un conteneur précis et de rassembler des données sur ces services. Lorsqu’un conteneur se lance, l’Agent Datadog identifie les services qui s’y exécutent, recherche la configuration de surveillance correspondante et initie la collecte de métriques.
La fonction Autodiscovery vous permet de définir des modèles de configuration pour des checks d’Agent et de spécifier les conteneurs sur lesquels chaque check doit s’appliquer.
L’Agent recherche des événements de création, destruction, démarrage ou encore d’arrêt de conteneur avant d’activer, de désactiver et de régénérer les configurations de check statiques lors de ces événements. Lorsque l’Agent inspecte les conteneurs en cours d’exécution, il vérifie si chaque conteneur correspond à l’un des identifiants de conteneur Autodiscovery présents dans les modèles chargés. À chaque correspondance, l’Agent génère une configuration de check statique en remplaçant les template variables par les valeurs spécifiques du conteneur correspondant. Il active ensuite le check avec la configuration statique.
Fonctionnement
Le schéma ci-dessus représente un nœud de host avec trois pods, notamment un pod Redis et un pod d’Agent. Le Kubelet, qui planifie les conteneurs, s’exécute en tant que binaire sur ce nœud et expose les endpoints /metrics
et /pods
. Toutes les 10 secondes, l’Agent interroge /pods
et trouve les spécifications Redis. Il peut également consulter les informations sur le pod Redis.
Dans cet exemple, les spécifications Redis comprennent les annotations suivantes :
labels:
tags.datadoghq.com/redis.env: "prod"
tags.datadoghq.com/redis.service: "my-redis"
tags.datadoghq.com/redis.version: "6.0.3"
annotations:
ad.datadoghq.com/redis.check_names: '["redisdb"]'
ad.datadoghq.com/redis.init_configs: '[{}]'
ad.datadoghq.com/redis.instances: |
[
{
"host": "%%host%%",
"port":"6379",
"password":"%%env_REDIS_PASSWORD%%"
}
]
ad.datadoghq.com/redis.logs: '[{"source":"redis"}]'
Dans l’exemple ci-dessus, les étiquettes tags.datadoghq.com
sont utilisées pour appliquer les valeurs env
, service
et même version
sous forme de tags à l’ensemble des logs et métriques envoyés par le pod Redis. Ces étiquettes standard font partie du système de tagging de service unifié. Datadog vous conseille d’utiliser le tagging de service unifié lorsque vous configurez des tags et des variables d’environnement.
check_names
comprend les noms des checks à exécuter, tandis qu’init_configs
indique certains paramètres de configuration, comme l’intervalle minimum de collecte. Chaque élément d’instances
représente la configuration à exécuter sur une instance d’un check. Remarque : ici, %%host%%
est une template variable dont la valeur correspond automatiquement à l’adresse IP de votre conteneur.
L’Agent génère ainsi une configuration de check statique.
Configuration
Il vous suffit de suivre les deux étapes suivantes pour configurer Autodiscovery pour votre infrastructure :
- Activez Autodiscovery sur votre Agent Datadog.
- Créez des modèles de configuration spécifiques à chaque intégration pour chaque service à surveiller. Remarque : Datadog fournit des modèles de configuration automatique pour certains services conteneurisés populaires, comme Apache et Redis.
Activer Autodiscovery
Avec l’Agent exécuté sur un host
Ajoutez le bloc de configuration suivant au fichier de configuration datadog.yaml
.
listeners:
- name: docker
config_providers:
- name: docker
polling: true
Ajoutez le bloc de configuration suivant au fichier de configuration datadog.yaml
.
listeners:
- name: kubelet
config_providers:
- name: kubelet
polling: true
# nécessaire pour prendre en charge les anciens modèles de configuration d'étiquette docker
- name: docker
polling: true
ECS Fargate ne peut pas être surveillé lorsque l’Agent Datadog est exécuté en tant que binaire sur un host.
Avec l’Agent exécuté en tant que conteneur
Pour activer automatiquement Autodiscovery sur des conteneurs Docker, montez /var/run/docker.sock
dans l’Agent conteneurisé. Sous Windows, montez \\.\pipe\docker_engine
.
La fonction Autodiscovery est activée par défaut sur Kubernetes.
Pour vous en assurer, vérifiez que la variable d’environnement suivante est définie :
Pour activer Autodiscovery sur des conteneurs dans Kubernetes, ajoutez la variable d’environnement suivante lors du démarrage de l’Agent conteneurisé :
Modèles d’intégration
Une fois la fonction Autodiscovery activée, l’Agent Datadog essaie automatiquement de l’utiliser pour plusieurs services, notamment Apache et Redis, en se basant sur les fichiers de configuration Autodiscovery par défaut.
Vous pouvez définir un modèle d’intégration de plusieurs façons : avec des annotations de pod Kubernetes, des étiquettes Docker, un fichier de configuration monté sur l’Agent, une ConfigMap ou encore des stockages key/value.
Dans l’exemple suivant, les étiquettes Kubernetes tags.datadoghq.com
sont utilisées pour appliquer les valeurs env
, service
et version
sous forme de tags aux données du pod.
Le modèle d’intégration Redis est défini via des annotations de pod Kubernetes. Il contient un paramètre password
personnalisé et tague tous ses logs avec l’attribut source
adéquat.
apiVersion: v1
kind: Pod
metadata:
## nom de votre Pod
name: my-redis
labels:
## définir des étiquettes standard pour le tagging de service unifié
tags.datadoghq.com/redis.env: prod
tags.datadoghq.com/redis.service: my-redis
tags.datadoghq.com/redis.version: "6.0.3"
annotations:
## noms des checks ; correspondent aux noms dans le référentiel integrations_core
ad.datadoghq.com/redis.check_names: '["redisdb"]'
## quelques paramètres de configuration, comme l'intervalle minimum de collecte
ad.datadoghq.com/redis.init_configs: '[{}]'
ad.datadoghq.com/redis.instances: |
[
## configuration à exécuter pour une instance du check
{
"host": "%%host%%",
"port":"6379",
"password":"%%env_REDIS_PASSWORD%%"
}
]
## configuration de la collecte de logs
ad.datadoghq.com/redis.logs: '[{"source":"redis"}]'
spec:
containers:
- name: redis
image: httpd
ports:
- containerPort: 80
Pour utiliser la fonction Autodiscovery avec d’autres services, définissez des modèles pour les services à surveiller. Consultez la section Modèles d’intégration Autodiscovery pour en savoir plus.
Pour aller plus loin
Documentation, liens et articles supplémentaires utiles: