从Docker容器(没有Filebeat)发送日志到ELK容器
我使用SEBP / ELK Docker容器,因为它似乎是最适合于快速设置应用程序日志的。 不幸的是,在阅读完文档之后 ,似乎没有一种简单的方法可以在不使用Filebeat的情况下从同级容器获取日志。
我不想在每个容器上安装Filebeat,因为这似乎直接违背了Docker的职责分离法。
TLDR; 我如何从我的应用程序容器中获取日志到我的ELK容器?
在每个容器中使用filebeat
都违反了Docker
的理念。 这将是资源的浪费,并有更多的pipe理开销。
您可以通过logstash
使用本地日志文件。
configuration示例:
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
SEBP / ELK是解决这个问题的错误工具。 相反,我应该使用一个项目来为ELK堆栈的每个元素(Elasticsearch,Logstash和Kibana)分配一个容器。 我在GitHub上find了这样一个仓库。
deviantony / docker-elk项目将三个ELK元素组合成一组工作的容器。 与SEBP / ELK项目不同的是,Deviantony / docker-elk并没有就应该提供哪些function以及应该closures哪些function持有自己的观点。 在SEBP / ELK项目中,写入端口5000的function将被删除,当您尝试通过自定义logstash.conf文件将其添加回来时,UDP侦听程序最终会失败。 相反,deviantony / docker-elk项目正常工作。
奖励要点:这个项目也有一个分支,其中包括X-Pack,它增加了一个最小的安全层。