加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何将应用程序日志从Docker容器转发到ELK

发布时间:2020-12-16 03:55:35 所属栏目:安全 来源:网络整理
导读:我正在尝试将日志记录集中在使用多种应用程序技术(Java,Rails和各种DB)的环境中. 我们希望开发人员使用Docker Compose调出堆栈,但是我们希望他们引用中央日志源(ELK)来调试问题,而不是尝试打开shell来运行Docker容器. 应用程序都写入文件系统而不是STDOUT /

我正在尝试将日志记录集中在使用多种应用程序技术(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

gelf {
}

对于Docker输出:
https://docs.docker.com/engine/admin/logging/overview/#gelf

$docker run -dit 
             --log-driver=gelf 
             --log-opt gelf-address=udp://127.0.0.1:12201 
             alpine sh

(gelf-address来自容器外部,而不是内部)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读