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

Docker部署ELK遇Kibana未就绪及Logstash 401错误求助

ELK Stack Docker部署401认证错误排查与解决

问题根源

Elasticsearch 8.x版本默认强制开启安全认证功能,你的配置完全未处理账号密码验证,导致Logstash、Kibana无法通过ES的身份校验,出现401错误,同时Kibana因无法连接ES持续处于未就绪状态。

解决步骤

1. 获取Elasticsearch初始认证信息

首次启动ES容器时,日志会生成默认elastic超级用户密码和Kibana注册令牌,执行命令查看:

docker logs elasticsearch

在日志中找到:

  • 初始elastic密码:The generated password for the elastic built-in superuser is: [你的密码]
  • Kibana注册令牌:bin/elasticsearch-create-enrollment-token -s kibana 对应的输出内容

如果日志中找不到,可进入ES容器重新生成:

# 重置elastic用户密码
docker exec -it elasticsearch bin/elasticsearch-reset-password -u elastic

# 生成Kibana注册令牌
docker exec -it elasticsearch bin/elasticsearch-create-enrollment-token -s kibana

2. 修改docker-compose.yml配置

添加认证环境变量,同时关闭本地测试用不到的严格TLS验证:

version: '3.6'
services:
  Elasticsearch:
    image: elasticsearch:8.6.2
    container_name: elasticsearch
    restart: always
    volumes:
      - elastic_data:/usr/share/elasticsearch/data/
    environment:
      ES_JAVA_OPTS: "-Xmx256m -Xms256m"
      discovery.type: single-node
      # 开启安全认证,关闭HTTP SSL(本地测试专用,生产环境请勿关闭)
      xpack.security.enabled: "true"
      xpack.security.http.ssl.enabled: "false"
    ports:
      - '9200:9200'
      - '9300:9300'
    networks:
      - elk

  Logstash:
    image: logstash:8.6.2
    container_name: logstash
    restart: always
    volumes:
      - ./logstash/:/logstash_dir
      # 挂载本地日志目录到容器,解决输入文件找不到的问题
      - ./temp/:/root/temp/
    command: logstash -f /logstash_dir/logstash.conf
    depends_on:
      - Elasticsearch
    ports:
      - '9600:9600'
    environment:
      LS_JAVA_OPTS: "-Xmx256m -Xms256m"
      # ES认证账号密码
      ELASTICSEARCH_USER: "elastic"
      ELASTICSEARCH_PASSWORD: "[替换为你的elastic密码]"
    networks:
      - elk

  Kibana:
    image: kibana:8.6.2
    container_name: kibana
    restart: always       
    ports:
      - '5601:5601'
    environment:
      - ELASTICSEARCH_URL=http://elasticsearch:9200
      - ELASTICSEARCH_USERNAME=elastic
      - ELASTICSEARCH_PASSWORD="[替换为你的elastic密码]"
    depends_on:
      - Elasticsearch 
    networks:
      - elk
volumes:
  elastic_data: {}

networks:
  elk:

3. 更新Logstash配置文件

在logstash.conf中添加ES认证参数,同时确保输入文件路径可访问:

input {
    file {
        # 对应挂载到容器的日志路径,本地需将anteater.log放到./temp/目录下
        path => "/root/temp/anteater.log"
        start_position => "beginning"
    }
}
output {
    elasticsearch {
        hosts => ["http://elasticsearch:9200"]
        # 引用环境变量中的认证信息
        user => "${ELASTICSEARCH_USER}"
        password => "${ELASTICSEARCH_PASSWORD}"
        index => "anteater-log-%{+YYYY.MM.dd}"
    }
}

4. 重启服务验证

# 清理旧容器和数据卷
docker compose down -v
# 启动服务
docker compose up -d

查看容器日志确认状态:

docker logs elasticsearch
docker logs logstash
docker logs kibana

补充说明

  • 本地无法访问http://elasticsearch:9200是正常现象:elasticsearch是Docker内部网络的服务名,仅容器间可解析,宿主机需用http://localhost:9200访问。
  • 生产环境需保留ES的HTTP SSL配置,同时生成并配置合法证书。

内容的提问来源于stack exchange,提问作者L O C O

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:10:44