从Docker容器发送日志到ELK容器(没有Filebeat)

时间:2017-01-06 02:48:31

标签: logging docker containers syslog

我使用SEBP/ELK Docker container,因为它似乎最适合快速设置应用程序日志记录。不幸的是,在阅读the docs之后,似乎并不是一种简单的方法,可以在不使用Filebeat的情况下从兄弟容器中获取日志。

我不想在每个容器上安装Filebeat,因为这似乎直接反对Docker的职责分离。

TLDR;如何从我的应用程序容器中获取日志到我的ELK容器?

2 个答案:

答案 0 :(得分:1)

在每个容器中使用filebeat符合Docker的理念。这将浪费资源,并且有更多的管理开销。

您可以通过logstash使用本地日志文件。

示例配置:

input {
  file {
    path => "/var/log/apache.log"
    type => "apache-access"  # a type to identify those logs (will need this later)
    start_position => "beginning"
  }
}

现在我们必须将日志文件设置为logstash容器的本地文件:

如果您使用的是bind mounts,则可以在logstash容器中安装相同的目录。

sudo docker run -d -v /path/to/logs/:/path/to/logs/in/container logstash

如果您使用volumes,则可以将包含日志的相同卷挂载到logstash。

sudo docker run -d -v logvol:/path/to/logs/in/container logstash

答案 1 :(得分:1)

SEBP / ELK是解决这个问题的错误工具。相反,我应该使用一个项目来为ELK堆栈的每个元素旋转一个容器:Elasticsearch,Logstash和Kibana。我在GitHub上找到了这样一个存储库。

deviantony/docker-elk项目将三个ELK元素组合成一组工作容器。关于这一点的好处是,与SEBP / ELK项目不同,deviantony / docker-elk并没有对应该提供哪些功能以及应该关闭哪些功能采取自以为是的观点。在SEBP / ELK项目中,删除了写入端口5000的功能,当您尝试通过自定义logstash.conf文件将其添加回来时,UDP侦听器最终会失败。相反,deviantony / docker-elk项目才有效。

奖励积分:此项目还有一个包含X-Pack的分支,它可以立即添加最小的安全层。