Intégrations Autodiscovery avec Docker
Rapport de recherche Datadog : Bilan sur l'adoption de l'informatique sans serveur Rapport : Bilan sur l'adoption de l'informatique sans serveur

Intégrations Autodiscovery avec Docker

Cette page traite de la configuration des intégrations Autodiscovery avec Docker. Si vous utilisez Kubernetes, consultez la documentation relative aux intégrations Autodiscovery avec Kubernetes.

Autodiscovery vous permet d’appliquer une configuration d’intégration Datadog lors de l’exécution d’un check de l’Agent sur un conteneur donné. Pour obtenir davantage de contexte sur cette logique, découvrez comment configurer les intégrations de l’Agent lorsque l’Agent est exécuté sur un host.

Utilisez les paramètres suivants afin de configurer une intégration avec Autodiscovery :

ParamètreObligatoireDescription
<NOM_INTÉGRATION>OuiLe nom de l’intégration Datadog.
<CONFIG_INIT>OuiLa configuration de la section init_config: pour l’intégration Datadog-<NOM_INTÉGRATION> donnée.
<CONFIG_INSTANCE>OuiLa configuration de la section instances: pour l’intégration Datadog-<NOM_INTÉGRATION> donnée.

Découvrez la liste complète des intégrations de l’Agent compatibles avec Autodiscovery ainsi que des exemples pour ces paramètres

Chaque onglet des sections ci-dessous présente une façon différente d’appliquer des modèles d’intégration à un conteneur donné. Vous pouvez utiliser les éléments suivants :

Remarque : certaines intégrations prises en charge ne fonctionnent pas avec Autodiscovery par défaut, car elles nécessitent un accès à l’arborescence des processus ou au système de fichiers : c’est le cas de Ceph, Varnish, Postfix, Cassandra Nodetools et Gunicorn. Pour activer Autodiscovery pour ces intégrations, utilisez l’exportateur Prometheus officiel dans le pod, puis faites appel à Autodiscovery dans l’Agent pour identifier le pod et interroger l’endpoint.

Configuration

Pour activer automatiquement Autodiscovery sur des conteneurs Docker, montez /var/run/docker.sock dans l’Agent conteneurisé. Sur Windows, montez \\.\pipe\docker_engine.

Il est possible de stocker vos modèles d’intégration en tant qu’étiquettes Docker. Grâce à Autodiscovery, l’Agent détecte s’il est exécuté sur Docker et examine automatiquement toutes les étiquettes à la recherche de modèles d’intégration. Autodiscovery s’attend à ce que les étiquettes ressemblent à ces exemples :

Dockerfile :

LABEL "com.datadoghq.ad.check_names"='[<NOM_INTÉGRATION>]'
LABEL "com.datadoghq.ad.init_configs"='[<CONFIG_INIT>]'
LABEL "com.datadoghq.ad.instances"='[<CONFIG_INSTANCE>]'

docker-compose.yaml :

labels:
  com.datadoghq.ad.check_names: '[<NOM_INTÉGRATION>]'
  com.datadoghq.ad.init_configs: '[<CONFIG_INIT>]'
  com.datadoghq.ad.instances: '[<CONFIG_INSTANCE>]'

Commande d’exécution Docker :

-l com.datadoghq.ad.check_names='[<NOM_INTÉGRATION>]' -l com.datadoghq.ad.init_configs='[<CONFIG_INIT>]' -l com.datadoghq.ad.instances='[<CONFIG_INSTANCE>]'

Docker Swarm :

Pour utiliser le mode Swarm avec Docker Cloud, les étiquettes doivent être appliquées à l’image :

version: "1.0"
services:
...
  project:
    image: '<NOM_IMAGE>'
    labels:
      com.datadoghq.ad.check_names: '[<NOM_INTÉGRATION>]'
      com.datadoghq.ad.init_configs: '[<CONFIG_INIT>]'
      com.datadoghq.ad.instances: '[<CONFIG_INSTANCE>]'

Remarque : lors de la configuration d’Autodiscovery, Datadog recommande l’utilisation des étiquettes Docker afin d’unifier la télémétrie au sein de votre environnement conteneurisé. Consultez la documentation relative au [tagging de service unifié][11] pour en savoir plus.

Vous pouvez stocker des modèles en tant que fichiers locaux et les monter dans l’Agent conteneurisé. Cela ne nécessite aucun service externe ni aucune plateforme d’orchestration spécifique. Vous devez cependant redémarrer les conteneurs de votre Agent à chaque modification, ajout ou suppression de modèle. L’Agent recherche les modèles Autodiscovery dans le répertoire /conf.d monté.

À partir de la version 6.2.0 (et 5.24.0) de l’Agent, les modèles par défaut utilisent le port par défaut pour le logiciel surveillé au lieu de le détecter automatiquement. Si vous devez utiliser un port différent, spécifiez un modèle Autodiscovery personnalisé dans les étiquettes de conteneur Docker

Ces modèles d’intégration peuvent convenir dans les cas simples. Toutefois, si vous avez besoin de personnaliser les configurations de votre intégration Datadog (par exemple pour activer des options supplémentaires, pour faire appel à des identificateurs de conteneur différents ou pour utiliser les index de template variables), vous devez écrire vos propres fichiers de configuration automatique :

  1. Créez un fichier conf.d/<NOM_INTÉGRATION>.d/conf.yaml sur votre host et ajoutez votre fichier de configuration automatique personnalisé.
  2. Montez le répertoire conf.d/ de votre host dans le répertoire conf.d/ de l’Agent conteneurisé.

Exemple de fichier de configuration automatique :

ad_identifiers:
  <IDENTIFICATEUR_INTÉGRATION_AUTODISCOVERY>

init_config:
  <CONFIG_INIT>

instances:
  <CONFIG_INSTANCES>

Consultez la documentation sur les identificateurs de conteneur Autodiscovery pour obtenir des informations sur <IDENTIFICATEUR_INTÉGRATION_AUTODISCOVERY>.

Remarque : vous n’avez pas à configurer <NOM_INTÉGRATIONS> ici, car l’Agent le récupère directement à partir du nom du fichier.

Autodiscovery peut utiliser Consul, Etcd et Zookeeper comme sources de modèle d’intégration. Pour utiliser un stockage clé-valeur, vous devez le configurer dans le fichier de configuration datadog.yaml de l’Agent et monter ce fichier dans l’agent conteneurisé. Vous pouvez également transmettre votre stockage clé-valeur comme variables d’environnement à l’Agent conteneurisé.

Configuration dans datadog.yaml :

Dans le fichier datadog.yaml, définissez l’adresse <IP_STOCKAGE_CLÉ_VALEUR> et le port <PORT_STOCKAGE_CLÉ_VALEUR> de votre stockage clé-valeur :

config_providers:
  - name: etcd
    polling: true
    template_dir: /datadog/check_configs
    template_url: '<IP_STOCKAGE_CLÉVALEUR>:<PORT_STOCKAGE_CLÉVALEUR>'
    username:
    password:

  - name: consul
    polling: true
    template_dir: datadog/check_configs
    template_url: '<IP_STOCKAGE_CLÉVALEUR>:<PORT_STOCKAGE_CLÉVALEUR>'
    ca_file:
    ca_path:
    cert_file:
    key_file:
    username:
    password:
    token:

  - name: zookeeper
    polling: true
    template_dir: /datadog/check_configs
    template_url: '<IP_STOCKAGE_CLÉVALEUR>:<PORT_STOCKAGE_CLÉVALEUR>'
    username:
    password:

Redémarrez ensuite l’Agent pour prendre en compte le changement de configuration.

Configuration dans les variables d’environnement :

Lorsque le stockage clé-valeur est activé en tant que source de modèle, l’Agent recherche des modèles à partir de la clé /datadog/check_configs. Autodiscovery s’attend à une hiérarchie clé-valeur comme suit :

/datadog/
  check_configs/
    <IDENTIFICATEUR_CONTENEUR>/
      - check_names: ["<NOM_INTÉGRATION>"]
      - init_configs: ["<CONFIG_INIT>"]
      - instances: ["<CONFIG_INSTANCE>"]
    ...

Remarque : pour appliquer une configuration spécifique à un conteneur donné, Autodiscovery identifie les conteneurs par image en cas d’utilisation de stockages clé-valeur. En d’autres termes, il cherche à faire correspondre <IDENTIFICATEUR_CONTENEUR> à .spec.containers[0].image.

Exemples

Intégration Datadog/Redis

Le fichier docker-compose.yml suivant applique le modèle d’intégration Redis adéquat avec un paramètre password personnalisé :

labels:
  com.datadoghq.ad.check_names: '["redisdb"]'
  com.datadoghq.ad.init_configs: '[{}]'
  com.datadoghq.ad.instances: '[{"host": "%%host%%","port":"6379","password":"%%env_REDIS_PASSWORD%%"}]'

Redis est l’un des modèles Autodiscovery par défaut inclus avec l’Agent : il n’est donc pas nécessaire de monter ce fichier. Le modèle Redis suivant est inclus avec l’Agent :

ad_identifier:
  - redis

init_config:

instances:

  - host: "%%host%%"
    port: "6379"

Cette configuration d’intégration Redis peut sembler succincte, mais notez l’option ad_identifier. Cette option obligatoire vous permet de spécifier les identificateurs de conteneur. Autodiscovery applique ce modèle à tous les conteneurs sur le host qui exécute une image redis. Consultez la documentation relative aux identificateurs Autodiscovery pour en savoir plus.

Si votre Redis requiert un password supplémentaire pour accéder à son endpoint stats :

  1. Créez les dossiers conf.d/ et conf.d/redis.d sur votre host.
  2. Ajoutez le fichier de configuration automatique personnalisé ci-dessous à conf.d/redis.d/conf.yaml sur votre host.
  3. Montez le répertoire conf.d/ du host dans le répertoire conf.d/ de l’Agent conteneurisé.
ad_identifiers:
  - redis

init_config:

instances:

  - host: "%%host%%"
    port: "6379"
    password: "%%env_REDIS_PASSWORD%%"

Remarque : la logique de template variable "%%env_<ENV_VAR>%%" est utilisée afin d’éviter de stocker le mot de passe en clair. La variable d’environnement REDIS_PASSWORD doit donc être transmise à l’Agent. Consultez la documentation relative aux template variables Autodiscovery.

Les commandes etcd suivantes créent un modèle d’intégration Redis avec un paramètre password personnalisé :

etcdctl mkdir /datadog/check_configs/redis
etcdctl set /datadog/check_configs/redis/check_names '["redisdb"]'
etcdctl set /datadog/check_configs/redis/init_configs '[{}]'
etcdctl set /datadog/check_configs/redis/instances '[{"host": "%%host%%","port":"6379","password":"%%env_REDIS_PASSWORD%%"}]'

Notez que chacune des trois valeurs est une liste. Autodiscovery assemble les éléments de liste en fonction des index de liste partagée de manière à générer la configuration de l’intégration. Dans le cas présent, il assemble la première (et unique) configuration de check à partir de check_names[0], init_configs[0] et instances[0].

Remarque : la logique de template variable "%%env_<ENV_VAR>%%" est utilisée afin d’éviter de stocker le mot de passe en clair. La variable d’environnement REDIS_PASSWORD doit donc être transmise à l’Agent. Consultez la documentation relative aux template variables Autodiscovery.

Contrairement aux fichiers de configuration automatique, les stockages clé-valeur peuvent utiliser la version courte OU la version longue du nom d’image comme identificateur de conteneur, p. ex. redis OU redis:latest.

Intégrations Datadog/Apache et Datadog/Check HTTP

Les configurations ci-dessous s’appliquent à une image de conteneur Apache avec <IDENTIFICATEUR_CONTENEUR>: httpd. Les modèles Autodiscovery sont configurés pour recueillir des métriques et des logs provenant du conteneur Apache, et pour configurer un check HTTP/Datadog avec des instances afin de tester deux endpoints.

Les noms de check sont apache, http_check et leur <CONFIG_INIT> et <CONFIG_INSTANCE>. Les configurations complètes se trouvent sur les pages de documentation dédiées : intégration Datadog/Apache, intégration Datadog/check HTTP.

labels:
  com.datadoghq.ad.check_names: '["apache", "http_check"]'
  com.datadoghq.ad.init_configs: '[{},{}]'
  com.datadoghq.ad.instances: '[[{"apache_status_url": "http://%%host%%/server-status?auto"}],[{"name":"<SITEWEB_1>","url":"http://%%host%%/website_1","timeout":1},{"name":"<SITEWEB_2>","url":"http://%%host%%/website_2","timeout":1}]]'
  • Créez les dossiers conf.d/ et conf.d/apache.d sur votre host.
  • Ajoutez le fichier de configuration automatique personnalisé ci-dessous à conf.d/apache.d/conf.yaml sur votre host.
ad_identifiers:
  - httpd

init_config:

instances:
  - apache_status_url: http://%%host%%/server-status?auto

Remarque : cette configuration de check Apache peut sembler succincte, mais notez l’option ad_identifier. Cette option obligatoire vous permet de spécifier les identificateurs de conteneur. Autodiscovery applique ce modèle à tous les conteneurs sur le host qui exécute une image httpd. Consultez la documentation relative aux identifiants Autodiscovery pour en savoir plus.

  • Créez ensuite le dossier conf.d/http_check.d sur votre host.
  • Ajoutez le fichier de configuration automatique personnalisé ci-dessous à conf.d/http_check.d/conf.yaml sur votre host.
ad_identifiers:
  - httpd

init_config:

instances:
  - name: "<SITEWEB_1>"
    url: "http://%%host%%/website_1"
    timeout: 1

  - name: "<SITEWEB_2>"
    url: "http://%%host%%/website_2"
    timeout: 1
  • Enfin, montez le répertoire conf.d/ du host dans le répertoire conf.d/ de l’Agent conteneurisé.
etcdctl set /datadog/check_configs/httpd/check_names '["apache", "http_check"]'
etcdctl set /datadog/check_configs/httpd/init_configs '[{}, {}]'
etcdctl set /datadog/check_configs/httpd/instances '[[{"apache_status_url": "http://%%host%%/server-status?auto"}],[{"name": "<SITEWEB_1>", "url": "http://%%host%%/website_1", timeout: 1},{"name": "<SITEWEB_2>", "url": "http://%%host%%/website_2", timeout: 1}]]'

Remarque : l’ordre de chaque liste est important. Pour que l’Agent soit en mesure de générer la configuration du check HTTP, toutes les parties de sa configuration doivent utiliser le même index sur l’ensemble des trois listes.

Pour aller plus loin