我正在使用docker-compose并希望使用'gelf'日志记录驱动程序将单个容器日志记录发送到同一个compose中定义的logstash容器。
使用'gelf-address'中的一个'逻辑'主机名给我一个未定义的错误,使用'ipv4_address'的(非最佳)解决方案似乎也没有用。
我知道这样我可能会因为启动顺序而丢失一些初始日志消息,但这很好。由于它包含对特定设置的记录,因此可以更轻松地进行测试。
如何解决这个问题的任何聪明的解决方案?
答案 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"