docker - 当 docker 处于分离状态或前台时,日志不会发送到 AWS Cloudwatch

标签 docker amazon-cloudwatch

当我以交互模式运行 docker 脚本时,它可以工作。我可以在控制台和 AWS CloudWatch Logs 中看到日志。下面的 docker 脚本以交互模式运行,我添加了 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 分离模式没有任何日志转到 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

当我在前台模式下运行相同的脚本时,即 no -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 停止时,它会将以下内容转储到日志中。理想情况下,带有“错误文件在下面创建...”的日志应该已经到达 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-file 驱动程序,它将 JSON 格式的日志写入容器运行所在主机上的特定于容器的文件。
请参阅此 docker logging

给 -t 选项分配伪 tty,docker 的主进程通过该伪 tty 将日志输出到虚拟终端。并且 aws log-driver 寻找 tty 来捕获日志。
看这个how -t option works并特别回答这篇文章中的第 3 条。

关于docker - 当 docker 处于分离状态或前台时,日志不会发送到 AWS Cloudwatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62191749/

相关文章:

docker - 如何运行 docker :dind to start with a shell

ubuntu - 你能在 Docker 中为 Ubuntu 运行 Unity 作为 VirtualBox 的替代品吗?

docker - plesk 上 docker 中的 Neo4j(3.4.17、3.5.13、4.0.0)不使用/ssl 中提供的 SSL 证书,而是尝试删除它们并进行自己的自签名

mysql - 如何将mysql日志重定向到容器内的/dev/stdout?

amazon-web-services - AWS CloudWatch Logs 自定义指标未显示在 GUI 中

amazon-web-services - 如何为beantalk环境内存设置cloudwatch报警

amazon-web-services - 将特定事件附加到 cloudwatch 事件规则