Cette page explique comment installer et configurer des intégrations pour votre infrastructure Docker en utilisant une fonctionnalité de Datadog connue sous le nom de Autodiscovery. Autodiscovery vous permet d’utiliser des variables comme %%host%% pour remplir dynamiquement vos paramètres de configuration.

Pour une explication détaillée du fonctionnement d’Autodiscovery, consultez Prise en main des conteneurs : Autodiscovery. Pour des options avancées d’Autodiscovery, telles que l’exclusion de certains conteneurs d’Autodiscovery ou la tolérance des pods non prêts, consultez Container Discovery Management.

Si vous utilisez Kubernetes, consultez Kubernetes et intégrations.

Les intégrations Datadog suivantes ne fonctionnent pas avec Autodiscovery car elles nécessitent soit des données d'arbre de processus, soit un accès au système de fichiers : Ceph, Varnish, Postfix, Cassandra Nodetool, et Gunicorn.

Pour surveiller des intégrations qui ne sont pas compatibles avec Autodiscovery, vous pouvez utiliser un exportateur Prometheus dans le pod pour exposer un point de terminaison HTTP, puis utiliser l'intégration OpenMetrics (qui prend en charge Autodiscovery) pour trouver le pod et interroger le point de terminaison.

Configurez votre intégration

Certaines intégrations nécessitent des étapes de configuration, telles que la création d’un jeton d’accès ou l’octroi d’une autorisation de lecture à l’Agent Datadog. Suivez les instructions dans la section Configuration de la documentation de votre intégration.

Intégrations communautaires

Pour utiliser une intégration qui n’est pas fournie avec l’Agent Datadog, vous devez créer une image personnalisée contenant l’intégration souhaitée. Consultez Utiliser des intégrations communautaires pour les instructions.

Configuration

Certaines intégrations couramment utilisées sont livrées avec une configuration par défaut pour Autodiscovery. Consultez Autodiscovery auto-configuration pour plus de détails, y compris une liste des intégrations auto-configurées et leurs fichiers de configuration par défaut correspondants. Si votre intégration figure dans cette liste, et que la configuration par défaut est suffisante pour votre cas d’utilisation, aucune action supplémentaire n’est requise.

Sinon :

  1. Choisissez une méthode de configuration (étiquettes Docker, un fichier local ou un magasin clé-valeur) qui convient à votre cas d’utilisation.
  2. Référez-vous au format de modèle pour la méthode choisie. Chaque format contient des espaces réservés, tels que <CONTAINER_IMAGE>.
  3. Fournissez des valeurs pour ces espaces réservés.

Dockerfile

Pour l’Agent Datadog 7.36+ :

LABEL "com.datadoghq.ad.checks"='{"<INTEGRATION_NAME>": {"instances": [<INSTANCE_CONFIG>], "logs": [<LOGS_CONFIG>]}}'

Pour les versions antérieures de l’Agent :

LABEL "com.datadoghq.ad.check_names"='[<INTEGRATION_NAME>]'
LABEL "com.datadoghq.ad.init_configs"='[<INIT_CONFIG>]'
LABEL "com.datadoghq.ad.instances"='[<INSTANCE_CONFIG>]'
LABEL "com.datadoghq.ad.logs"='[<LOGS_CONFIG>]'

docker-compose.yaml

Pour l’Agent Datadog 7.36+ :

labels:
  com.datadoghq.ad.checks: '{"<INTEGRATION_NAME>": {"instances": [<INSTANCE_CONFIG>], "logs": [<LOGS_CONFIG>]}}'

Pour les versions antérieures de l’Agent :

labels:
  com.datadoghq.ad.check_names: '[<INTEGRATION_NAME>]'
  com.datadoghq.ad.init_configs: '[<INIT_CONFIG>]'
  com.datadoghq.ad.instances: '[<INSTANCE_CONFIG>]'
  com.datadoghq.ad.logs: '[<LOGS_CONFIG>]'

En utilisant docker run, nerdctl run ou podman run

Pour l’Agent Datadog 7.36+ :

docker run -l com.datadoghq.ad.checks="{\"<INTEGRATION_NAME>\": {\"instances\": [<INSTANCE_CONFIG>], \"logs\": [<LOGS_CONFIG>]}}"

Pour les versions antérieures de l’Agent :

docker run -l com.datadoghq.ad.check_names='[<INTEGRATION_NAME>]' -l com.datadoghq.ad.init_configs='[<INIT_CONFIG>]' -l com.datadoghq.ad.instances='[<INSTANCE_CONFIG>]' -l com.datadoghq.ad.logs='[<LOGS_CONFIG>]'

Remarque : Vous pouvez échapper JSON lors de la configuration de ces étiquettes. Exemple :

docker run -l "com.datadoghq.ad.checks="{\"apache\": {\"instances\": [{\"apache_status_url\":\"http://%%host%%/server-status?auto2\"}]}}"

Docker Swarm

Lors de l’utilisation du mode Swarm pour Docker Cloud, les étiquettes doivent être appliquées à l’image.

Pour l’Agent Datadog 7.36+ :

version: "1.0"
services:
...
  project:
    image: '<IMAGE_NAME>'
    labels:
      com.datadoghq.ad.checks: '{"<INTEGRATION_NAME>": {"instances": [<INSTANCE_CONFIG>], "logs": [<LOGS_CONFIG>]}}'

Pour les versions antérieures de l’Agent :

version: "1.0"
services:
...
  project:
    image: '<IMAGE_NAME>'
    labels:
      com.datadoghq.ad.check_names: '[<INTEGRATION_NAME>]'
      com.datadoghq.ad.init_configs: '[<INIT_CONFIG>]'
      com.datadoghq.ad.instances: '[<INSTANCE_CONFIG>]'
      com.datadoghq.ad.logs: '[<LOGS_CONFIG>]'

Vous pouvez stocker des modèles d’Autodiscovery en tant que fichiers locaux dans le répertoire /conf.d monté. Vous devez redémarrer vos conteneurs Agent chaque fois que vous modifiez, ajoutez ou supprimez des modèles.

  1. Créez un fichier conf.d/<INTEGRATION_NAME>.d/conf.yaml sur votre hôte :

    ad_identifiers:
      - <CONTAINER_IMAGE>
    
    init_config:
      <INIT_CONFIG>
    
    instances:
      <INSTANCES_CONFIG>
    
    logs:
      <LOGS_CONFIG>
    
  2. Montez votre dossier conf.d/ de l’hôte dans le dossier conf.d de l’Agent conteneurisé.

    docker-compose.yaml

    volumes:
      [...]
      - <PATH_TO_LOCAL_FOLDER>/conf.d:/conf.d
    

    docker run

    docker run -d --name datadog-agent \
      [...]
      -v <PATH_TO_LOCAL_FOLDER>/conf.d:/conf.d \
    

Vous pouvez obtenir des modèles d’Autodiscovery à partir de Consul, etcd ou ZooKeeper. Vous pouvez configurer votre magasin clé-valeur dans le fichier de configuration datadog.yaml (et ensuite monter ce fichier à l’intérieur du conteneur Agent), ou en tant que variables d’environnement dans le conteneur Agent.

Configurer dans datadog.yaml :

Dans datadog.yaml, définissez l’adresse <KEY_VALUE_STORE_IP> et <KEY_VALUE_STORE_PORT> de votre magasin clé-valeur :

config_providers:
  - name: etcd
    polling: true
    template_dir: /datadog/check_configs
    template_url: '<KV_STORE_IP>:<KV_STORE_PORT>'
    username:
    password:

  - name: consul
    polling: true
    template_dir: datadog/check_configs
    template_url: '<KV_STORE_IP>:<KV_STORE_PORT>'
    ca_file:
    ca_path:
    cert_file:
    key_file:
    username:
    password:
    token:

  - name: zookeeper
    polling: true
    template_dir: /datadog/check_configs
    template_url: '<KV_STORE_IP>:<KV_STORE_PORT>'
    username:
    password:

Redémarrez l’Agent Datadog pour appliquer vos modifications.

Configurer dans les variables d’environnement :

Avec le magasin de valeurs clés activé en tant que source de modèle, l’Agent recherche des modèles sous la clé /datadog/check_configs. Autodiscovery attend une hiérarchie de valeurs clés comme ceci :

/datadog/
  check_configs/
    <CONTAINER_IMAGE>/
      - check_names: ["<INTEGRATION_NAME>"]
      - init_configs: ["<INIT_CONFIG>"]
      - instances: ["<INSTANCES_CONFIG>"]
      - logs: ["<LOGS_CONFIG>"]
    ...

Valeurs de remplacement

Fournissez les valeurs de remplacement comme suit :

<INTEGRATION_NAME>
Le nom de votre intégration Datadog, tel que etcd ou redisdb.
<CONTAINER_IMAGE>
Un identifiant à faire correspondre avec l’image du conteneur.

Par exemple: si vous fournissez redis comme identifiant de conteneur, votre modèle Autodiscovery est appliqué à tous les conteneurs dont les noms d’image correspondent à redis. Si vous avez un conteneur exécutant foo/redis:latest et bar/redis:v2, votre modèle Autodiscovery est appliqué aux deux conteneurs.

Le paramètre ad_identifiers prend une liste, vous pouvez donc fournir plusieurs identifiants de conteneur. Vous pouvez également utiliser des identifiants personnalisés. Voir Custom Autodiscovery Identifiers.
<INIT_CONFIG>
Les paramètres de configuration énumérés sous init_config dans le fichier <INTEGRATION_NAME>.d/conf.yaml.example de votre intégration. La section init_config est généralement vide.
<INSTANCES_CONFIG>
Les paramètres de configuration énumérés sous instances dans le fichier <INTEGRATION_NAME>.d/conf.yaml.example de votre intégration.
<LOGS_CONFIG>
Les paramètres de configuration énumérés sous logs dans le fichier <INTEGRATION_NAME>.d/conf.yaml.example de votre intégration.

Exemples

Intégration Redis

Redis est l’une des technologies pour lesquelles Autodiscovery auto-configuration est disponible. Les exemples suivants démontrent comment remplacer cette configuration de base par une configuration personnalisée qui fournit un paramètre password.

Stockez votre mot de passe en tant que variable d’environnement nommée REDIS_PASSWORD ; puis :

Pour l’Agent Datadog 7.36+ :

labels:
  com.datadoghq.ad.checks: '{"redisdb": {"instances": [{"host": "%%host%%","port":"6379","password":"%%env_REDIS_PASSWORD%%"}], "logs": [{"type": "file", "path": "/var/log/redis_6379.log", "source": "redis", "service": "redis_service"}]}}'

Pour les versions antérieures de l’Agent :

labels:
  com.datadoghq.ad.check_names: '["redisdb"]'
  com.datadoghq.ad.init_configs: '[{}]'
  com.datadoghq.ad.instances: '[{"host": "%%host%%","port":"6379","password":"%%env_REDIS_PASSWORD%%"}]'
  com.datadoghq.ad.logs: '[{"type": "file", "path": "/var/log/redis_6379.log", "source": "redis", "service": "redis_service"}]'
  1. Créez un fichier conf.d/redisdb.d/conf.yaml sur votre hôte :

    ad_identifiers:
      - redis
    init config:
    instances:
      - host: "%%host%%"
        port: "6379"
        username: "datadog"
        password: "%%env_REDIS_PASSWORD%%"
    logs:
      - type: "file"
        path: "/var/log/redis.log"
        source: "redis"
        service: "redis_service"
    
  2. Montez votre dossier conf.d/ de l’hôte dans le dossier conf.d de l’Agent conteneurisé.

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%%"}]'

Remarquez que chacune des trois valeurs est une liste. Autodiscovery assemble les éléments de la liste dans les configurations d’intégration en fonction des index de liste partagés. Dans ce cas, Autodiscovery compose la première (et unique) configuration de vérification à partir de check_names[0], init_configs[0] et instances[0].

Tous ces exemples utilisent des Autodiscovery template variables :

  • %%host%% est peuplé dynamiquement avec l’IP du conteneur.
  • %%env_REDIS_PASSWORD%% fait référence à une variable d’environnement nommée REDIS_PASSWORD telle que vue par le processus Agent.

Pour plus d’exemples, y compris comment configurer plusieurs vérifications pour plusieurs ensembles de conteneurs, voir Autodiscovery : Scénarios et Exemples.