Docker+Filebeat+Elasticsearch组合无法采集Docker日志问题排查
问题修复:Filebeat+Elasticsearch+Kibana Docker环境的两个核心问题
一、解决Kibana频繁输出「400 Bad Request」错误
问题原因
Filebeat初始化(setup阶段)向Kibana发起请求时,误用了HTTPS协议,但你的Kibana容器并未启用SSL(环境变量未配置SSL相关参数),导致协议不匹配触发400错误;同时Filebeat配置中setup.kibana未明确禁用SSL验证,进一步加剧请求失败。
修复步骤
- 更新Filebeat配置文件:修改
setup.kibana部分,明确使用HTTP协议并禁用SSL:
setup.kibana: host: "http://kibana:5601" username: elastic password: elastic ssl.enabled: false
- 同步修改Docker Compose环境变量:在
filebeat-setup和filebeat服务中,将KIBANA_HOST改为HTTP地址:
environment: - ELASTICSEARCH_HOST=https://search:9200 - KIBANA_HOST=http://kibana:5601 - ELASTICSEARCH_USERNAME=elastic - ELASTICSEARCH_PASSWORD=elastic
二、解决Kibana Discover页面看不到logger容器日志的问题
问题原因
Filebeat自动发现配置中hints.default_config.enabled: false,意味着仅当容器带有完整的Filebeat hints标签时才会采集日志;但logger容器仅设置了co.elastic.logs/enabled: true,缺少指定日志输入类型的关键标签,导致Filebeat无法识别并采集其日志。
修复方案(二选一)
方案1:启用Filebeat默认采集规则
调整filebeat.yml中的自动发现配置,开启默认采集规则:
filebeat.autodiscover: providers: - type: docker hints.enabled: true hints.default_config.enabled: true
方案2:给logger容器添加完整hints标签
在docker-compose.yml的logger服务中,补充指定日志输入的标签:
logger: image: alpine:latest command: > sh -c ' while true do echo "Log $(date)" sleep 1 done ' labels: co.elastic.logs/enabled: true co.elastic.logs/input: "filestream" co.elastic.logs/path: "/var/log/messages" networks: - elasticnet depends_on: filebeat-setup: condition: service_completed_successfully
验证步骤
- 重启所有服务:
docker-compose down -v && docker-compose up -d - 查看Filebeat日志确认无错误:
docker-compose logs -f filebeat - 在Kibana Discover页面选择
filebeat-*索引,即可看到logger容器的日志。
内容的提问来源于stack exchange,提问作者Spike2050
相关产品推荐
相关产品推荐

