Docker部署多节点Elasticsearch触发磁盘高水位线Kibana无法使用
问题触发原因
- 核心触发因素为Elasticsearch磁盘高水位阈值告警:当节点磁盘使用率超过配置的90%高水位阈值时,Elasticsearch会禁止分片写入,达到洪水水位阈值后还会自动将所有索引设置为只读状态。Kibana启动时需要向Elasticsearch集群写入
.kibana等系统索引,写入请求被拒绝后会启动失败,无法对外提供服务。 - 次要可能原因:Elasticsearch集群启动就绪晚于Kibana,Kibana初始连接ES超时后退出,未自动重试。
排查步骤
- 查看Kibana容器运行日志定位具体错误,执行命令:
docker logs kibana,重点排查是否存在ES连接超时、403写入拒绝类报错。 - 检查Elasticsearch集群健康状态,执行命令:
curl http://127.0.0.1:9200/_cluster/health,确认集群状态、分片分配情况。 - 检查ES集群只读标记,执行命令:
curl http://127.0.0.1:9200/_all/_settings?pretty,确认是否存在index.blocks.read_only_allow_delete为true的配置。
解决方案
- 处理磁盘水位告警
- 方案1:清理宿主机C盘冗余文件,保证C:/Docker/Elasticsearch挂载目录所在磁盘剩余空间占比高于10%,ES会自动解除写入限制。
- 方案2:临时调整ES磁盘水位阈值适配本地测试环境,向ES发起如下API请求:
PUT _cluster/settings { "persistent": { "cluster.routing.allocation.disk.watermark.low": "95%", "cluster.routing.allocation.disk.watermark.high": "97%", "cluster.routing.allocation.disk.watermark.flood_stage": "99%" } }
- 若索引已被锁只读,执行如下请求解除限制:
PUT _all/_settings { "index.blocks.read_only_allow_delete": null }
- 优化Kibana启动配置
修改docker-compose.yml中kibana服务配置,增加启动依赖、请求超时配置和自动重启策略:
kibana: image: docker.elastic.co/kibana/kibana:7.13.0 container_name: kibana environment: - "ELASTICSEARCH_HOSTS=http://es01:9200" - "ELASTICSEARCH_REQUESTTIMEOUT=120000" ports: - '5601:5601' networks: - esnet depends_on: - es01 - es02 - es03 restart: on-failure
- 重启服务验证
执行命令docker-compose down && docker-compose up -d重建容器,等待1~2分钟后访问http://127.0.0.1:5601验证Kibana可用性。
内容的提问来源于stack exchange,提问作者Roul
相关产品推荐
相关产品推荐

