首页 > 解决方案 > logstash 输入文件配置——从不同的 docker 获取输入文件

问题描述

我正在使用 docker 。我的日志文件在一个 docker 中,而 logstash 在另一个 docker 中运行。

input {
  file {
    path => "/folder/file.log"
    start_position => "end"
    id => "file"
  }
}

我如何告诉从 docker1 获取输入文件

标签: dockerlogstash

解决方案


有不同的方法可以实现这一目标。首先只是用来volumes在几个容器之间共享数据。一个容器将数据写入卷,另一个容器 - 读取。

例子:

docker volume create foo
docker run -d --name writer -v foo:/var/log <image-name>
docker run -d --name logstash -v foo:/folder:ro <logstash-blah-blag>

注意我已经ro为logstash以只读模式安装卷,因为它只需要读取访问权限。在此配置中,容器 1 写入/var/log文件夹的所有数据都将/folder在 logstash 中可见。

第二种方法是恕我直言更好 - 使用tcp/ip而不是卷。您需要在容器 1 中设置FileBeat(Elastic 的另一个工具)并将其配置为将数据发送到 logstash。然后只需beats在 logstash 中使用输入而不是file. 例子:

input {
    beats {
        port => 5400
    }
}

推荐阅读