【问题标题】:Is there any way to get logs in Docker Swarm?有没有办法在 Docker Swarm 中获取日志?
【发布时间】:2022-01-17 23:36:59
【问题描述】:

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

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

【问题讨论】:

  • 即将到来的 docker 1.13 有你上面提到的变化。我认为他们目前应该推出测试版。否则,一个好的做法是按照@Dockstar 的建议并配置日志驱动程序。我们将 logstash/kibana 与 gelf 驱动程序一起使用,并且我们在 docker 守护进程上进行了配置,因此我们集群中的任何 docker 主机都可以登录到 kibana。还要确保获取 syslog 输出,因为这是当你的容器死掉(例如内存不足)或 docker 本身出现问题时的地方。

标签: docker docker-swarm


【解决方案1】:

使用 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 stack logs <stackname> 不存在并聚合所有服务的日志?
  • 同意,@AugustinRiedinger。在这方面看到与 docker-compose 类似的行为会非常酷。
【解决方案2】:

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

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

您也可以在全局级别为 docker 守护进程配置它,但我不建议这样做。它不会让您添加“标签”选项,这对于过滤您的结果非常有用。

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

【讨论】:

【解决方案3】:

如文件所述:

docker service logs [OPTIONS] SERVICE|TASK

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2022-12-04
    相关资源
    最近更新 更多