2016-09-07 88 views
0

我正在使用docker-compose并希望使用'gelf'日志记录驱动程序将单个容器日志记录发送到同一个撰写中定义的logstash容器。如何将码头日志收集到特定码头集装箱中?

在'gelf-address'中使用其中一个“逻辑”主机名给我一个未定义的错误,使用'ipv4_address'的(非最优)解决方案似乎也不起作用。

我知道这样我可能会因启动顺序而失去一些初始日志消息,但这很好。它使测试更加容易,因为它包含了对特定设置的日志记录。

任何聪明的解决方案如何解决这个问题?

+0

我已经与logspout成功。从来没有听说过gelf –

回答

0

@cricket_007发表评论,参考logspout让我走上正轨。它直接连接到/var/run/docker.sock并从那里获取日志,并且当它在普通容器中运行时,它具有所有可用的路由信息​​。

唯一的问题是,它似乎只抓取日志从它变得活跃的时间,所以人们会错过真正的早期日志。但是,这是我愿意支付的价格。连接到logstash也是一个痛苦,因为这似乎需要很长时间才能出现。

另一个很好的参考是Gary A. Stafford's"Containerized Microservice Log Aggregation and Visualization using ELK Stack and Logspout"

0

从您的作品中查找主机名将会非常棘手。服务名称保存在Docker内部DNS解析器中。运行容器的Docker主机无法解析这些地址,因此您可能需要将静态IP用于日志记录容器。

当主机将.1地址分配给桥接口时,Docker主机应该能够通过用户定义的桥接网络连接到容器ipv4_address。我不确定这是否适用于覆盖网络。

您还可以在日志容器上创建其他服务depends_on,以便至少首先启动它。

如果有人正在使用fluentd尝试此操作,则可能需要fluentd-async-connect选项,以便容器不会阻止尝试打开与日志记录容器的连接。