🐾
[Docker] Datadog Agent コンテナによるログ収集の仕組み
まえがき
Datadog Agent コンテナのログ収集の仕組みについて解説する。
ログ収集の仕組み
Dockerコンテナのログは、ホストの /var/lib/docker/containers
に保存される。
Datadog Agentコンテナは、ホストの /var/lib/docker/containers
をコンテナ上にマウントし、そこからログを読み取る。
より具体的な例を見てみる。
以下は、Datadog Agentコンテナを走らせるdocker run
docker run -d --name datadog-agent \
--cgroupns host \
--pid host \
-e DD_API_KEY=<DATADOG_API_KEY> \
-e DD_LOGS_ENABLED=true \
-e DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL=true \
-e DD_CONTAINER_EXCLUDE="name:datadog-agent" \
-e DD_SITE=<DD_SITE>
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /var/lib/docker/containers:/var/lib/docker/containers:ro \
-v /proc/:/host/proc/:ro \
-v /opt/datadog-agent/run:/opt/datadog-agent/run:rw \
-v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
gcr.io/datadoghq/agent:latest
上記の -v /var/lib/docker/containers:/var/lib/docker/containers:ro
の行に注目してほしい。
ホストの /var/lib/docker/containers
をコンテナ上にマウントしていることが見て取れる。
つまり、ログ収集の流れは:
1/ アプリケーションコンテナのログが、ホストの/var/lib/docker/containers
に保存される。
2/ Datadog Agentがそのディレクトリをコンテナ上にマウントし、ログを読み取る。
それでは、アプリケーションコンテナが、/var/lib/docker/containers
以外のPathにログを出力している場合、どのようにログを取得すれば良いのだろうか。
ホスト上の任意のPathからログを取る方法
例えば、nginxコンテナのログを、ホストの /test/test.log
に出力する場合。
/test/test.log
を取得するための設定は以下の 2steps。
/test/
をAgentコンテナにマウント (-v /test/:/test/:ro
)
1/ docker run -d --name datadog-agent \
--cgroupns host \
--pid host \
-e DD_API_KEY=<DATADOG_API_KEY> \
-e DD_LOGS_ENABLED=true \
-e DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL=true \
-e DD_CONTAINER_EXCLUDE="name:datadog-agent" \
-e DD_SITE=<DD_SITE>
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /var/lib/docker/containers:/var/lib/docker/containers:ro \
-v /test/:/test/:ro \
-v /proc/:/host/proc/:ro \
-v /opt/datadog-agent/run:/opt/datadog-agent/run:rw \
-v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
gcr.io/datadoghq/agent:latest
--label com.datadoghq.ad.logs
をつける
2/ アプリケーションコンテナ(nginx)にdocker run --name=nginx-test --label com.datadoghq.ad.logs='[{"type":"file", "source": "nginx", "service": "taromn-nginx", "path": "/test/test.log"}]' -p 80:80 -d nginx
Datadog Agentは、アプリケーションコンテナのcom.datadoghq.ad.logs
ラベルから、ログ収集の設定(どのPathからログを取れば良いか、タグ情報など) を読み込む。
まとめ
- Datadog Agentコンテナは、ログファイルを含むホストのディレクトリをマウントし、ログを読む。
- アプリケーションコンテナにつけるラベルによって、ログ収集の設定をコントロール出来る。
Discussion