docker 在分离或前台时,日志不会发送到 AWS Cloudwatch
Logs not getting sent to AWS Cloudwatch when docker in detached or foreground
当我在交互模式下 运行 docker 脚本时,它可以工作。我可以在控制台和 AWS CloudWatch Logs 中看到日志。下面的 docker 脚本 运行s 处于交互模式,我添加了 awslogs 配置,以便日志进入 cloudwatch。 docker awslogs configuration
docker run --rm -i -t --log-driver awslogs \
--log-opt awslogs-region=us-east-1 \
--log-opt awslogs-group=falcoint \
--log-opt awslogs-create-group=true \
--privileged \
-v /dev:/host/dev \
-v /proc:/host/proc:ro \
-v /boot:/host/boot:ro \
-v /lib/modules:/host/lib/modules:ro \
-v /usr:/host/usr:ro \
-v /etc:/host/etc:ro \
falcosecurity/falco:latest
但是一旦我 运行 在 -d 分离模式 none 日志转到 aws cloudwatch
docker run --rm -d --log-driver awslogs \
--log-opt awslogs-region=us-east-1 \
--log-opt awslogs-group=falcoint \
--log-opt awslogs-create-group=true \
--privileged \
-v /dev:/host/dev \
-v /proc:/host/proc:ro \
-v /boot:/host/boot:ro \
-v /lib/modules:/host/lib/modules:ro \
-v /usr:/host/usr:ro \
-v /etc:/host/etc:ro \
falcosecurity/falco:latest
当我在前台模式下 运行 相同的脚本,即没有 -it 或 -d 时,也没有日志发送到 cloudwatch。但是当 falco docker 停止时,所有数据都会被缓冲并发送。
docker run --rm --log-driver awslogs \
--log-opt awslogs-region=us-east-1 \
--log-opt awslogs-group=falcoint \
--log-opt awslogs-create-group=true \
--privileged \
-v /dev:/host/dev \
-v /proc:/host/proc:ro \
-v /boot:/host/boot:ro \
-v /lib/modules:/host/lib/modules:ro \
-v /usr:/host/usr:ro \
-v /etc:/host/etc:ro \
falcosecurity/falco:latest
当 falco docker 停止时,它会将以下内容转储到日志中。理想情况下,带有 "Error File created below..." 的日志应该在不必停止容器的情况下进入 CloudWatch Logs。
2020-06-04T02:33:44+0000: SIGINT received, exiting...
Syscall event drop monitoring:
- event drop detected: 0 occurrences
- num times actions taken: 0
2020-06-04T02:32:32.495581404+0000: Notice A shell was spawned in a container with an attached terminal (user=root <NA> (id=01ca7b2306b5) shell=sh parent=runc cmdline=sh terminal=34816 container_id=01ca7b2306b5 image=<NA>)
2020-06-04T02:33:00.014981252+0000: Error File created below /dev by untrusted program (user=root command=touch /dev/rootkit2 file=/dev/rootkit2 container_id=01ca7b2306b5 image=<NA>)
2020-06-04T02:33:30.226554205+0000: Error File created below /dev by untrusted program (user=root command=touch /dev/rootkit3 file=/dev/rootkit3 container_id=01ca7b2306b5 image=<NA>)
Events detected: 3
Rule counts by severity:
ERROR: 2
NOTICE: 1
Triggered rules by rule name:
Terminal shell in container: 1
Create files below dev: 2
重现问题 运行 以上之一和另一个终端 运行
docker run -it node:8-alpine sh
然后登录容器并 运行
touch /dev/rootkit
更新:
我注意到当我 运行 docker 和 -d -t 日志转到 aws Cloudwatch 日志时。知道为什么会这样吗?
默认情况下,Docker 使用 json 文件驱动程序,它将 JSON 格式的日志写入容器所在主机上的容器特定文件 运行.
参考这个 docker logging
给-t选项分配伪tty,docker的主进程通过它输出日志到虚拟终端。 aws log-driver 寻找 tty 来捕获日志。
看看这个 并具体回答这个 post.
中的第 3 个
当我在交互模式下 运行 docker 脚本时,它可以工作。我可以在控制台和 AWS CloudWatch Logs 中看到日志。下面的 docker 脚本 运行s 处于交互模式,我添加了 awslogs 配置,以便日志进入 cloudwatch。 docker awslogs configuration
docker run --rm -i -t --log-driver awslogs \
--log-opt awslogs-region=us-east-1 \
--log-opt awslogs-group=falcoint \
--log-opt awslogs-create-group=true \
--privileged \
-v /dev:/host/dev \
-v /proc:/host/proc:ro \
-v /boot:/host/boot:ro \
-v /lib/modules:/host/lib/modules:ro \
-v /usr:/host/usr:ro \
-v /etc:/host/etc:ro \
falcosecurity/falco:latest
但是一旦我 运行 在 -d 分离模式 none 日志转到 aws cloudwatch
docker run --rm -d --log-driver awslogs \
--log-opt awslogs-region=us-east-1 \
--log-opt awslogs-group=falcoint \
--log-opt awslogs-create-group=true \
--privileged \
-v /dev:/host/dev \
-v /proc:/host/proc:ro \
-v /boot:/host/boot:ro \
-v /lib/modules:/host/lib/modules:ro \
-v /usr:/host/usr:ro \
-v /etc:/host/etc:ro \
falcosecurity/falco:latest
当我在前台模式下 运行 相同的脚本,即没有 -it 或 -d 时,也没有日志发送到 cloudwatch。但是当 falco docker 停止时,所有数据都会被缓冲并发送。
docker run --rm --log-driver awslogs \
--log-opt awslogs-region=us-east-1 \
--log-opt awslogs-group=falcoint \
--log-opt awslogs-create-group=true \
--privileged \
-v /dev:/host/dev \
-v /proc:/host/proc:ro \
-v /boot:/host/boot:ro \
-v /lib/modules:/host/lib/modules:ro \
-v /usr:/host/usr:ro \
-v /etc:/host/etc:ro \
falcosecurity/falco:latest
当 falco docker 停止时,它会将以下内容转储到日志中。理想情况下,带有 "Error File created below..." 的日志应该在不必停止容器的情况下进入 CloudWatch Logs。
2020-06-04T02:33:44+0000: SIGINT received, exiting...
Syscall event drop monitoring:
- event drop detected: 0 occurrences
- num times actions taken: 0
2020-06-04T02:32:32.495581404+0000: Notice A shell was spawned in a container with an attached terminal (user=root <NA> (id=01ca7b2306b5) shell=sh parent=runc cmdline=sh terminal=34816 container_id=01ca7b2306b5 image=<NA>)
2020-06-04T02:33:00.014981252+0000: Error File created below /dev by untrusted program (user=root command=touch /dev/rootkit2 file=/dev/rootkit2 container_id=01ca7b2306b5 image=<NA>)
2020-06-04T02:33:30.226554205+0000: Error File created below /dev by untrusted program (user=root command=touch /dev/rootkit3 file=/dev/rootkit3 container_id=01ca7b2306b5 image=<NA>)
Events detected: 3
Rule counts by severity:
ERROR: 2
NOTICE: 1
Triggered rules by rule name:
Terminal shell in container: 1
Create files below dev: 2
重现问题 运行 以上之一和另一个终端 运行
docker run -it node:8-alpine sh
然后登录容器并 运行
touch /dev/rootkit
更新:
我注意到当我 运行 docker 和 -d -t 日志转到 aws Cloudwatch 日志时。知道为什么会这样吗?
默认情况下,Docker 使用 json 文件驱动程序,它将 JSON 格式的日志写入容器所在主机上的容器特定文件 运行. 参考这个 docker logging
给-t选项分配伪tty,docker的主进程通过它输出日志到虚拟终端。 aws log-driver 寻找 tty 来捕获日志。
看看这个