You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker+Filebeat+Elasticsearch组合无法采集Docker日志问题排查

问题修复:Filebeat+Elasticsearch+Kibana Docker环境的两个核心问题

一、解决Kibana频繁输出「400 Bad Request」错误

问题原因

Filebeat初始化(setup阶段)向Kibana发起请求时,误用了HTTPS协议,但你的Kibana容器并未启用SSL(环境变量未配置SSL相关参数),导致协议不匹配触发400错误;同时Filebeat配置中setup.kibana未明确禁用SSL验证,进一步加剧请求失败。

修复步骤

  1. 更新Filebeat配置文件:修改setup.kibana部分,明确使用HTTP协议并禁用SSL:
setup.kibana:
  host: "http://kibana:5601"
  username: elastic
  password: elastic
  ssl.enabled: false
  1. 同步修改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

验证步骤

  1. 重启所有服务:docker-compose down -v && docker-compose up -d
  2. 查看Filebeat日志确认无错误:docker-compose logs -f filebeat
  3. 在Kibana Discover页面选择filebeat-*索引,即可看到logger容器的日志。

内容的提问来源于stack exchange,提问作者Spike2050

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 23:09:55