一般使用docker安装的logstash都是去docker内部去修改对应配置,但是同样可以直接挂载的方式直接用命令执行。
通过挂载的方式要注意的点是对应正确的文件。
要确认的点是容器启动后使用的配置文件是哪个,困扰了一天的问题最后发现是启动使用的配置文件目录错误。
通过docker pull安装的logstash景象启动时候的配置文件开始认为在
/usr/share/logstash/config
下的.conf文件。
接下来遇到的问题:
- 通过挂载的方式替换后启动,连接的es仍为 http://elasticsearch:9200 连接es失败。
解决:
/usr/share/logstash/config目录中有一logstash.yml文件,需要通过挂载的方式替换为可用的es连接,或者将内容注释添加
http.host: "0.0.0.0"
- 换完yml文件之后,再次启动。这次连接成功了,但是只是连接成功了,日志停留在
Starting server on port: 5044
说明并没有去读文件并将数据传输到es。
一般解决过程:
1 检查对应的挂载文件中的配置信息是否正确,进入到docker中直接访问需要读取的文件是否有权限。
2 .conf配置文件中在 file中增加sincedb_path => "/dev/null"。
以上1,2 都尝试过并没有用,并且认为自己的配置文件没问题,那么问题大概出在logstash启动时候使用的默认logstash.conf的所在位置了。
实际启动位置在
/usr/share/logstash/pipeline/logstash.conf
而不是在我们常认为的config目录。
修改启动命令 容器中的logstash.conf挂载目录替换。
docker run --name logstash \
-v /you/logstashpath/logstash_pipline.conf:/usr/share/logstash/pipeline/logstash.conf \
-v /you/logstashpath/logstash.yml:/usr/share/logstash/config/logstash.yml \
-v /you/logstashpath/测试日志.log:/usr/share/logstash/myfile/测试日志.log \
-d docker.elastic.co/logstash/logstash:7.17.0
版本7.17.0