【问题标题】:docker log driver "json-file" log loss when rolling update滚动更新时 docker log 驱动程序“json-file”日志丢失
【发布时间】:2019-08-20 19:00:28
【问题描述】:

如果 max-file 值设置为 2,则创建两个文件,如下所示。

11111-json.log
11111-json.log.1

但是这里,当11111-json.log文件大小为max-size时,11111-json.log的内容被移动到11111-json.log.111111-json.log的大小变为零。 /var/log/容器 此时我丢失了最后一个日志。

/var/log/container 路径中的日志最终会链接到/var/lib/docker/containers/~,所以如果上面提到的文件这样工作,日志将会丢失。

我怎么不会迷路?

【问题讨论】:

  • 正确。您需要一些东西来获取和存储或转发 json 日志。许多 Kubernetes 设置使用 fluentbitfluentdfilebeat
  • 感谢您的回复。我已经将 fluentD 配置为守护程序集。读取/var/log/container 中的日志,但在/var/lib/docker/containers/~/11111-json.log 中的日志文件更改为11111-json.log-1 时丢失数据。
  • 您缺少哪些日志数据? fluentd 应该观察旋转的(旧)文件 5 秒钟,以便在从(新)空白文件读取之前将任何内容刷新到它。
  • /var/log/container/ 中的 11111.log 文件链接了 /var/lib/docker/containers/~/11111-json.log 文件。当/var/lib/docker/containers/~/11111-json.log文件达到max-size并重命名为/var/lib/docker/containers/~/11111-json.log-1时,fluentD尚未读取的最后一条日志不在/var/log/container/11111.log中。
  • 可能在你的尾部配置中增加rotate_wait。见this answer

标签: docker kubernetes


【解决方案1】:

根据您的设置,所有日志 .log.1、.log.2 都存储在 /var/lib/docker/containers/... 中,根据 docker 文档,您可以在 daemon.json 中更改 docker 的这些设置:

 "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3",

在 /var/log/containers 中,您可以找到最后创建的日志文件的链接。

根据flunetd 的文档: 您应该考虑使用 in_tail 选项:

in_tail 包含在 Fluentd 的核心中。不需要额外的安装过程。 当 Fluentd 首次配置 in_tail 时,它将从该日志的尾部开始读取,而不是开头。一旦日志被轮换,Fluentd 就会从头开始读取新文件。它跟踪当前的 inode 编号。

请参考类似community post

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2019-10-24
    • 1970-01-01
    相关资源
    最近更新 更多