🐾
[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。
1/ /test/をAgentコンテナにマウント (-v /test/:/test/:ro)
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
2/ アプリケーションコンテナ(nginx)に--label com.datadoghq.ad.logsをつける
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