我正在开发一个在 Docker 容器内运行的软件,其中生成的日志是必需的,以便以后对其进行评估。
我的问题是该命令docker logs
缺少一些由我的软件明确记录的日志条目。我可以通过使用附加到容器来验证它是否记录了消息docker attach
。
基本上docker attach
实时显示所有条目,但docker logs
只记录其中的一些条目,没有任何可识别的模式。所有日志都由软件写入标准输出。
编辑: 我也意识到其他 Docker 容器也有这种行为。
答案1
我发现了这个问题。我们的 docker 守护进程配置为使用 journald 作为其默认日志记录驱动程序。由于我们有不同的容器记录大量安静日志,我们达到了默认的 journald 速率限制,因此一些日志会丢失。
这个问题有两种解决方案:
1.解决方案
增加 journald 的速率限制。为此,请使用 /etc/systemd/journald.conf 配置文件并添加/修改以下行:
RateLimitInterval=30s
RateLimitBurst=1000
之后只需重新启动 journald:systemctl restart systemd-journald
2.解决方案
您可以使用参数为给定容器指定不同的日志记录驱动程序--log-driver json-file
附加信息:
有用的链接来识别常见的 docker 日志问题。