如何将应用程序日志从Docker容器转发到ELK
我正在尝试将日志记录集中在使用多种应用程序技术(Java,Rails和各种DB)的环境中. 我们希望开发人员使用Docker Compose调出堆栈,但是我们希望他们引用中央日志源(ELK)来调试问题,而不是尝试打开shell来运行Docker容器. 应用程序都写入文件系统而不是STDOUT / STDERR,这将删除与Docker日志记录驱动程序和logspout相关的所有选项. 我们所做的是配置容器使rsyslog包含应用程序日志文件并将其转发到具有syslog输入的logstash.这适用于将日志从A移动到B,但基于syslog输入管理ELK中的多技术日志非常糟糕(例如,尝试捕获多Java堆栈跟踪或MySQL慢查询). 有一个更好的方法吗?我应该在每个容器中运行logstash,以便我可以直接将过滤器和编解码器应用于日志文件,这样我就不必依赖syslog输入了吗? 有没有办法将Docker日志记录驱动程序与写入文件系统的应用程序日志文件一起使用? 最佳答案
最新版本的Docker支持将“GELF”格式的日志传输到网络端口. Logstash有一个GELF输入.您可以在每个节点上运行Logstash,并让节点上的所有Docker实例转发给它.
作为Logstash输入:https://www.elastic.co/guide/en/logstash/current/plugins-inputs-gelf.html
对于Docker输出:
(gelf-address来自容器外部,而不是内部) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |