Compose and the Datadog Agent

Compose and the Datadog Agent

このページは日本語には対応しておりません。随時翻訳に取り組んでいます。翻訳に関してご質問やご意見ございましたら、お気軽にご連絡ください。

Compose is a Docker tool that simplifies building applications on Docker by allowing you to define, build and run multiple containers as a single application.

While the single container installation instructions gets the stock Datadog Agent container running, you may want to enable integrations for other containerized services that are part of your Compose application. To do this, you need to combine integration YAML files with the base Datadog Agent image to create your Datadog Agent container. Then, add your container to the Compose YAML.

Redis example

The following is an example of how you can monitor a Redis container using Compose. The file structure is:

|- docker-compose.yml
|- datadog
  |- Dockerfile
  |- conf.d
    |-redisdb.yaml

The docker-compose.yml file describes how your containers work together and sets some of the configuration details for the containers.

version: '3'
services:
  redis:
    image: redis
  datadog:
    build: datadog
    links:
     - redis # Connect the Datadog Agent container to the Redis container
    environment:
     - DD_API_KEY=${DD_API_KEY}
     - DD_SITE=
    volumes:
     - /var/run/docker.sock:/var/run/docker.sock
     - /proc/:/host/proc/:ro
     - /sys/fs/cgroup:/host/sys/fs/cgroup:ro

The redisdb.yaml is patterned after the redisdb.yaml.example file and tells the Datadog Agent to look for Redis on the host named redis (defined in docker-compose.yaml above) and to use the standard Redis port:

init_config:

instances:
    - host: redis
      port: 6379

The Dockerfile is used to instruct Docker compose to build a Datadog Agent image including the redisdb.yaml file at the right location:

FROM gcr.io/datadoghq/agent:latest
ADD conf.d/redisdb.yaml /etc/datadog-agent/conf.d/redisdb.yaml

Log collection

The docker-compose.yml can be extended to allow the Datadog Agent to collect container logs.

version: '3'
services:
  redis:
    image: redis
    labels:
      com.datadoghq.ad.logs: '[{"source": "redis", "service": "redis"}]'
  datadog:
    build: datadog
    links:
     - redis # Connect the Datadog Agent container to the Redis container
    environment:
     - DD_API_KEY=${DD_API_KEY}
     - DD_SITE=
     - DD_LOGS_ENABLED=true
     - DD_LOGS_CONFIG_DOCKER_CONTAINER_USE_FILE=true # To read log from file instead of the docker socket
    volumes:
     - /var/run/docker.sock:/var/run/docker.sock
     - /proc/:/host/proc/:ro
     - /sys/fs/cgroup:/host/sys/fs/cgroup:ro
     - /var/lib/docker/containers:/var/lib/docker/containers:ro

Note: The above configuration only collects logs from the Redis container. Logs can be collected from the Datadog Agent by adding a similar com.datadoghq.ad.logs label. Log collection can also be explicitly enabled for all containers by setting the environment variable DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL to true. See the complete Docker log collection documentation for additional details.

Further Reading