我可以使用logspout在Docker swarm上进行全局syslog日志记录吗?

时间:2016-09-29 21:50:52

标签: logging docker docker-swarm papertrail-app

我有一个运行Docker 1.12的Docker主机运行良好,并且能够使用gliderlabs/logspout将docker日志集中到papertrail。

是否可以将此配置部署到Docker Swarm上的所有节点?

我试过了:

    docker service create --name logspout --mode=global \
        gliderlabs/logspout \
        syslog+tls://<yourhost>.papertrailapp.com:<yourport>

但服务不断死亡和重生。在docker(非swarm实例)上,您需要将docker socket unix:///var/run/docker.sock映射到papertrail docs。在群组服务中这可能吗?如何将docker socket安装到服务中?

1 个答案:

答案 0 :(得分:0)

更新:第一次连接后,当前gliderlabs/logspout容器似乎停止日志记录。经过大量谷歌搜索结果(似乎指向一堆超时/重新连接问题)。我决定转而使用码头工具--log-driver选项。这意味着触摸每台机器并重新启动守护程序,但除了编辑我的ubuntu实例上的/etc/default/docker文件并重新启动docker之外,没有中断服务。

原始回答

感谢this article by Sematext中的一项精彩研究,我发现了神奇的绑定命令:

docker service create --name logspout \
    --mode=global -e SYSLOG_TAG=swarm --publish <yourport>:<yourport> \
    --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
    gliderlabs/logspout syslog+tls://<yourhost>.papertrailapp.com:<yourport>

魔术在--mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock命令中。使用SYSLOG_TAG将syslogs标识为来自您的swarm也是有利的,因为默认情况下主机名是容器ID(可以更改并且相当不透明)。您似乎还需要随机发布/公开日志记录的日志记录端口。

如果我向swarm添加节点,则会自动部署此服务并将其配置为新主机!群魔!

Sep 29 17:07:01 8d551da912a4 swarm:    File "/opt/conda/envs/clientapi/lib/python3.5/site-packages/werkzeug/exceptions.py", line 646, in __call__
Sep 29 17:07:01 8d551da912a4 swarm:      raise self.mapping[code](*args, **kwargs)
Sep 29 17:07:01 8d551da912a4 swarm:  werkzeug.exceptions.InternalServerError: 500: Internal Server Error
Sep 29 17:11:05 cd73e5278032 swarm:  ....................
Sep 29 17:11:05 cd73e5278032 swarm:  complete: opportunities = added 0 updated 0 out of 2023

您可以以易于阅读的格式查看容器ID和群标识符