我有一个运行docker 1.12的单一docker主机,并且能够使用gliderlabs/logspout将docker日志集中到papertrail。
是否有可能将此配置部署到Docker Swarm上的所有节点?
I have try:
docker service create --name logspout --mode=global
gliderlabs/logspout
syslog+tls://<yourhost>.papertrailapp.com:<yourport>
,但服务死亡并不断重生。在docker(非集群实例)上,您需要将docker套接字unix:///var/run/docker.sock
映射到papertrail docs。这在集群服务中可能吗?如何将docker套接字挂载到服务中?
更新:当前gliderlabs/logspout
容器在第一次连接后出现停止日志记录。经过大量的谷歌搜索结果(似乎指向一堆超时/重新连接问题)。我决定转移到docker的--log-driver
选项。这意味着触摸每台机器并重新启动守护进程,但是没有中断服务,除了在我的ubuntu实例上编辑/etc/default/docker
文件和重新启动docker的痛苦。
原始回答
多亏Sematext在本文中做了一项出色的研究,我发现了神奇的bind命令:
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
来识别来自群集的syslog日志也是有利的,因为默认情况下主机名是容器ID(可以更改并且相当不透明)。似乎您还需要随机发布/公开日志记录失败的日志记录端口。
如果我向集群中添加一个节点,该服务将自动部署并配置到新主机!群魔!
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和群标识符