我在用
Docker版本17.12.1-CE
Kubernetes版本v1.10.11
我的应用程序将Json格式的日志打印到控制台。字段之一是stackTrace,其中可以包含巨大的stackTrace。
问题在于该日志消息被拆分为两个消息。因此,如果我查看/ var / lib / docker / containers / ... .log,则会看到两条消息。我读到这样做是出于安全原因,但我真的不明白该怎么办?
我应该削减我的stackTrace吗?还是自定义尺寸?可以吗?这是解决此问题的正确方法吗?
p / s我正在使用json文件记录驱动程序
解决方案如下:
这是预期的行为。
Docker将日志消息的块大小设为16K,这是因为日志消息有16K的缓冲区。如果消息长度超过16K,则应由json文件记录器拆分并在端点处合并。
它确实将日志标记为部分消息,但实际上取决于重新组合驱动程序/服务。
Docker Docs提到存在受支持的不同驱动程序。
对于您的体系结构(Stacktraces),json-driver
可能不是最佳选择。
而且我发现this thread on github添加了有关主题的附加信息(以及许多offtop)。
编辑。
Logging Architecture表示,容器化应用程序写入stdout
和stderr
的所有内容均由容器引擎处理和重定向。
Docker容器引擎将这两个流重定向到日志记录驱动程序,该驱动程序在Kubernetes中配置为以json格式写入文件。
注意:Docker json日志记录驱动程序将每一行视为一条单独的消息。
另一个特点是,使用Docker日志记录驱动程序时,不直接支持多行消息。您需要在日志记录代理程序级别或更高级别处理多行消息。
我真的不明白该怎么办?
这是对Docker大小的限制。 Here是另一个很好的讨论,最后以使用filebeat / fluentd的想法结尾。
看起来Fluentbit的Docker_mode选项可能会有所帮助,但是我不确定您解析容器日志的方式如何。
我应该削减我的stackTrace吗?
这取决于您是否需要日志中的跟踪。
还是自定义尺寸?
我已经在Docker方面搜索了某种“旋钮”进行调整,但到目前为止找不到任何。
看起来唯一的解决方案是使用一些可以合并分割线的日志处理工具。