【问题标题】:Logging with Docker and Kubernetes. Logs more than 16k split up使用 Docker 和 Kubernetes 进行日志记录。超过 16k 的日志被拆分
【发布时间】:2020-08-05 05:11:19
【问题描述】:

我正在使用 Docker 版本 17.12.1-ce Kubernetes 版本 v1.10.11

我的应用程序将 Json 格式的日志打印到控制台。其中一个字段是 stackTrace,它可以包含一个巨大的 stackTrace。

问题是日志消息被分成两条消息。因此,如果我查看 /var/lib/docker/containers/ ... .log 我会看到两条消息。我读到这是出于安全原因,但我真的不明白我能用它做什么?

我应该削减我的 stackTrace 吗?还是自定义尺寸?这是允许的吗?这是处理这个问题的正确方法吗?

p/s 我正在使用 json 文件日志记录驱动程序

【问题讨论】:

    标签: java docker logging kubernetes docker-engine


    【解决方案1】:

    这是预期的行为。 Docker 以 16K 的大小记录消息,因为日志消息有 16K 的缓冲区。如果消息长度超过 16K,则应由 json 文件记录器将其拆分并在端点合并。

    它确实将日志标记为部分消息,但实际上取决于重新组装的驱动程序/服务。

    Docker Docs 提到有不同的支持驱动程序。

    对于您的架构 (Stacktraces),json-driver 可能不是最佳选择。

    我发现 this thread on github 添加了有关主题的附加信息(以及很多离题)。

    编辑。

    Logging Architecture 表示容器化应用程序写入stdoutstderr 的所有内容都由容器引擎处理和重定向到某个地方。

    Docker 容器引擎将这两个流重定向到日志记录驱动程序,该驱动程序在 Kubernetes 中配置为写入 json 格式的文件。

    注意:Docker json 日志记录驱动程序将每一行视为单独的消息。 另一个特点是使用 Docker 日志记录驱动程序时,不直接支持多行消息。您需要在日志代理级别或更高级别处理多行消息。

    我真的不明白我能用它做什么?

    这是对 Docker 大小的限制。 Here 是另一个很好的讨论,最终得出了使用 filebeat/fluentd 的想法。

    看起来 Fluentbit 的 Docker_mode 选项可能会有所帮助,但我不确定您解析容器日志的准确程度。

    我应该削减我的 stackTrace 吗?

    这取决于您是否需要在日志中进行跟踪。

    或者自定义尺寸? 我已经在 Docker 端搜索了某种“旋钮”来调整,但目前找不到。

    看起来唯一的解决方案是使用一些可以组合分割线的日志处理工具。

    【讨论】:

    • 是的,我知道,我已经阅读了这个文档。它并没有真正帮助我。
    猜你喜欢
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 2012-05-11
    • 2011-03-01
    • 1970-01-01
    相关资源
    最近更新 更多