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

2024-05-05

当我以交互模式运行 docker 脚本时,它可以工作。我可以在控制台和 AWS CloudWatch Logs 中查看日志。下面的 docker 脚本以交互模式运行,我添加了 awslogs 配置,以便日志进入 cloudwatch。docker awslogs 配置 https://docs.docker.com/config/containers/logging/awslogs/

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

当我在前台模式下运行相同的脚本时,即没有 -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

UPDATE:

我注意到当我运行 docker 时-d -t要转至 aws Cloudwatch 日志的日志。知道为什么会发生这种情况吗?


默认情况下,Docker 使用 json 文件驱动程序,它将 JSON 格式的日志写入运行容器的主机上的容器特定文件。 参考这个码头工人日志记录 https://sematext.com/guides/docker-logs/

给-t选项分配伪tty,docker的主进程通过该伪tty将日志输出到虚拟终端。 aws log-driver 会查找 tty 来捕获日志。 看这个-t 选项如何工作 https://stackoverflow.com/questions/30137135/confused-about-docker-t-option-to-allocate-a-pseudo-tty并具体回答本文中的第 3 点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 docker 处于分离状态或前台时,日志不会发送到 AWS Cloudwatch 的相关文章

随机推荐

  • Android 在连接 Socket 时出现错误

    在阅读了一些express io文档并成功连接到之后 我尝试使用nodejs和express io编写简单的应用程序http chat socket io在命令行中运行下面的代码并打开后 我找到了使用 nodejs 和express io
  • 将区间映射到更小的区间的算法

    我尝试搜索 但由于问题的性质 我无法找到满意的内容 我的问题如下 我试图将 0 到 2000 范围内的数字 尽管理想情况下上限是可调的 映射到 10 到 100 范围内的更小的区间 上限将映射 2000 gt 100 和下限也是如此 除此之
  • WPF 图像控件源绑定

    我是 WPF 和 C 的新手 我尝试实现以下功能 但在多次尝试后失败了 谁能帮我吗 我有一个图像控件
  • Amazon EC2 - Apache 服务器重启问题

    当我运行这个命令时 sudo etc init d httpd restart 它给出以下错误 停止 httpd 失败 启动 httpd 98 地址已在使用中 make sock 无法绑定到地址 80 98 地址已在使用 make sock
  • MVC 4 使用 Bootstrap 编辑模态表单

    我正在使用 MVC 4 和实体框架来开发 Intranet Web 应用程序 我有一个可以通过编辑操作进行修改的人员列表 我想通过使用模态表单使我的应用程序更加动态 所以我尝试将我的编辑视图放入我的 Bootstrap 模式中 我有两个问题
  • 将 nHibernate 3.x 与 Jet 驱动程序结合使用 (Microsoft Access)

    我正在开发一个 nHibernate 项目 该项目使用 Access 数据库作为数据源 不幸的是 我在运行时遇到问题 因为我找不到支持 nHibernate 3 x 的 Jet 驱动程序 我已经从 trunk 下载了源代码并编译了它 但事实
  • JAGS 中的柯西先验

    我正在使用 rJAGS 构建多级贝叶斯模型 并且我想为我的几个参数指定柯西先验 有没有办法在 JAGS 中做到这一点 或者我需要切换到 STAN 吗 我的 JAGS 模型如下 我想更换dnorm柯西分布 但 JAGS 找不到标准R柯西分布
  • 按属性值选择 XML 节点

  • Haxe 摘要 - 使用 @:from 时可以隐式转换数组吗?

    我试图将一种类型的数组视为另一种 抽象 类型的数组 当我使用抽象的基础类型时 它工作得很好 但是当我尝试使用另一种类型 使用定义的 from关键字 我构建失败 如果我使用显式的 它会起作用cast 但我想知道 有什么办法可以解决这个问题 我
  • 以编程方式创建 UILabel

    我通过代码执行了以下操作 UILabel label UILabel alloc initWithFrame CGRectMake 40 70 300 50 label backgroundColor UIColor clearColor
  • 比较周期性数据的快速方法

    假设我有任意类型的数据集 A B C D 并且我想将其与另一个数据集进行比较 我希望 A B C D B C D A C D A B 和 D A B C 的比较成立 但是不适用于 A C B D 或任何其他未类似排序的集合 有什么快速方法可
  • 在 Drupal 8 中如何在保存节点之前操作值?

    我有一个编辑节点表单 当用户输入新值并单击提交来编辑节点时 我首先想取回旧节点 操作该值 然后保存 更新节点 以下是我的解决方案 但它不起作用 function custom module form node form alter form
  • C 中有数组大小/长度的快捷方式吗?

    有什么方法可以加快 C 中获取数组大小的速度吗 打字sizeof array sizeof int 每次都会变老 有没有 C 库有类似的东西 length或者有什么方法我可以定义sizeof array sizeof int 作为某种较短的
  • Visual Studio 模板 - 添加其他预先存在的项目

    我正在开发一个 Visual Studio 模板 其中生成的项目依赖于许多引用 这些引用恰好是源代码控制下的其他项目 问题是如何在我的 ProjectGroup 模板中进行设置 例如 如果我在 C Stuff MyUtilityProjec
  • Javascript .includes 函数无法与对象数组一起正常工作[重复]

    这个问题在这里已经有答案了 我有一个正在使用的对象数组 includes 功能 我正在使用数组中的对象搜索该数组 对象是相同的 但似乎没有匹配项 我已将问题复制到这把小提琴 https jsfiddle net 6dua0u0n 代码也在下
  • Sympy autowrap (cython):为 sympy.Max、sympy.Heaviside 定义“助手”

    我有一个 sympy Matrix 称为 J sym 我想自动包装它 最好使用 cython 后端 相应的符号存储在列表list args中 然而 我遇到的问题是显然不支持某些 sympy 函数 在我的例子中特别是 sympy Max 和
  • 尝试在 jQuery show() 周围的事件之前和之后触发

    我正在尝试在某些第 3 方代码出现模式对话框后运行我们的 JavaScript 片段 我看见劫持 jQuery show 函数的一个非常巧妙的想法 https stackoverflow com a 1225238 135968 但不幸的是
  • 在 Scala 中将 Map[String, String] 转换为 Map[String, Int]

    我有一个 Map 其中键是 String 值是 Int 但表示为 String scala gt val m Map a gt 1 b gt 2 c gt 3 m scala collection immutable Map String
  • 使用相位相关和对数极坐标变换获得旋转位移

    我一直在编写一个脚本 它使用 cv2 计算两个图像之间的旋转位移phaseCorrelate method 我有两张图像 第二张是第一张图像的 90 度旋转版本 加载图像后 我将它们转换为对数极坐标 然后将它们传递到phaseCorrela
  • 当 docker 处于分离状态或前台时,日志不会发送到 AWS Cloudwatch

    当我以交互模式运行 docker 脚本时 它可以工作 我可以在控制台和 AWS CloudWatch Logs 中查看日志 下面的 docker 脚本以交互模式运行 我添加了 awslogs 配置 以便日志进入 cloudwatch doc