Docker部署Filebeat无法读取日志发送到跨机器ELK集群问题求助
排查解决思路
- 首先修正最明显的配置错误:你提供的ELK docker-compose中,Elasticsearch对外映射的端口是
9200,但两个版本的Filebeat配置里ES地址都写的是9042,先把Filebeat的output.elasticsearch.hosts改成["42.23.12.131:9200"]再测试。 - 排查Filebeat容器的日志目录挂载问题:你要收集的是机器1宿主机上的
/mnt/logs/temp.log,容器化部署Filebeat时必须将宿主机的日志路径挂载到容器内,启动Filebeat容器时要加-v /mnt/logs/:/mnt/logs/参数,否则Filebeat容器内部无法访问到目标日志文件。 - 验证网络连通性:
- 在机器1上执行
nc -zv 42.23.12.131 9200,确认端口可以正常访问,如果不通,检查机器2的防火墙/安全组是否放开了9200端口的入站规则,同时确认Elasticsearch的配置文件elasticsearch.yml中network.host配置为0.0.0.0或者允许机器1的网段访问,默认配置下ES仅允许本地访问。 - 在机器2本地执行
curl 127.0.0.1:9200,确认ES服务本身正常启动,有正常的JSON信息返回。
- 在机器1上执行
- 查看Filebeat运行日志定位具体问题:执行
docker logs <你的Filebeat容器名>查看运行日志,常见报错有两类:- 找不到目标日志文件:确认挂载路径正确、Filebeat进程对日志文件有读权限
- ES连接失败:确认地址端口正确、ES没有开启用户名密码验证(如果开启了需要在Filebeat配置中补充
output.elasticsearch.username和password参数)
- 优化日志读取配置:你修改后的第二版Filebeat配置方向是对的,收集非容器日志不需要用autodiscover配置,如需测试可以在input配置中加
tail_files: false参数,让Filebeat从日志文件开头读取内容,避免默认从尾部读取导致没有新日志就看不到数据的问题。
内容的提问来源于stack exchange,提问作者Roy
相关产品推荐
相关产品推荐

