有什么方法可以在 Docker Swarm 中获取日志?

Is there any way to get logs in Docker Swarm?

我想查看我的 Docker Swarm 服务的日志。不仅因为我希望出于通常的原因收集我的所有日​​志,还因为我想弄清楚服务崩溃的原因"task: non-zero exit (1)"

我在管道中看到 there is work to implement docker logs,但是有办法访问生产服务的日志吗?或者 Docker Swarm 尚未准备好进行生产 wrt 日志记录?

我们成功地利用了 GrayLog。如果您查看 docker 运行 文档,您可以指定一个日志驱动程序和日志选项,允许您将所有控制台消息发送到 graylog 集群。

docker run... --log-driver=gelf --log-opt gelf-address=udp://your.gelf.ip.address:port --log-opt tag="YourIdentifier"

您也可以在技术上为 docker 守护程序在全局级别配置它,但我不建议这样做。它不会让您添加 "Tag" 选项,这对于过滤结果非常有用。

Docker 服务定义还支持日志驱动程序和日志选项,因此您可以使用 docker 服务更新来调整您的服务而不会破坏它们。

使用 Docker Swarm 17.03,您现在可以通过命令行访问多实例服务的日志。

docker service logs -f {NAME_OF_THE_SERVICE}

您可以通过以下方式获取服务名称:

docker service ls

请注意,这是一个实验性功能(尚未准备好生产),要使用它,您必须启用实验模式:

更新: docker 服务日志 现在是 docker >= 17.06 的标准功能。 https://docs.docker.com/engine/reference/commandline/service_logs/#parent-command

类似问题:How to log container in docker swarm mode

如文件所述:

docker service logs [OPTIONS] SERVICE|TASK

资源:https://docs.docker.com/engine/reference/commandline/service_logs/