如何在编写时将docker日志收集到特定的docker容器?

时间:2016-09-07 03:24:52

标签: logging docker logstash docker-compose

我正在使用docker-compose并希望使用'gelf'日志记录驱动程序将单个容器日志记录发送到同一个compose中定义的logstash容器。

使用'gelf-address'中的一个'逻辑'主机名给我一个未定义的错误,使用'ipv4_address'的(非最佳)解决方案似乎也没有用。

我知道这样我可能会因为启动顺序而丢失一些初始日志消息,但这很好。由于它包含对特定设置的记录,因此可以更轻松地进行测试。

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

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

唯一的问题是它似乎只是从它变为活动状态时抓取日志,因此人们会错过早期的日志。但是,这是我愿意付出的代价。连接到logstash也很痛苦,因为这似乎需要很长时间才能出现。

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