ES 活着,Kibana 死了?报错
cluster_block_exception;真相:根目录磁盘超95%,ES触发保护性只读锁定,Kibana 写不进.kibana索引。
1、现象
bash
# es 可以正常访问,kibana 服务无法正常启动
# 查看 kibana 启动日志(此处为 systemctl 方式启动的 kibana)
journalctl -u kibana -f
# kibana 报错
Apr 24 15:29:43 efk kibana[1226976]: FATAL Error: Unable to complete saved object migrations for the [.kibana] index. Please check the health of your Elasticsearch cluster and try again. Unexpected Elasticsearch ResponseError: statusCode: 429, method: PUT, url: /.kibana_7.17.22_001/_mapping?timeout=60s error: [cluster_block_exception]: index [.kibana_7.17.22_001] blocked by: [TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block];,
2、问题原因
-
**问题根因:**Elasticsearch 磁盘空间不足,而非 Kibana 本身故障
-
**关键错误日志:**index [.kibana_7.17.22_001] blocked by: [TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block]
-
**原因解析:**Elasticsearch节点触发了磁盘使用率警戒水位线(默认≥95%);为保护集群稳定,ES自动将所有相关索引设为read-only-allow-delete(只读状态);Kibana 启动时需要创建/写入.kibana索引来保存配置,因此被阻塞而退出
3、解决办法
bash
# 手动清理磁盘空间(删除不必要的文件)
# (可选)删除 es 不必要索引
curl -X DELETE "http://x.x.x.x:9200/your_old_index_name" -u elastic:your_password
# 解除 es 的只读锁定
curl -X PUT "http://x.x.x.x:9200/_all/_settings" -H 'Content-Type: application/json' -u elastic:your_password -d '{
"index.blocks.read_only_allow_delete": null
}'
# 重启 kibana
systemctl restart kibana
ssytemctl status kibana
4、其他
4.1、es 启动参数分析
bash
# 查看 es 的启动参数
ps -ef |grep elastic
# 配置文件目录是 /etc/elasticsearch
-Des.path.conf=/etc/elasticsearch
# 配置文件
elasticsearch.yml # 核心配置文件,网络、端口、集群名等重要配置
jvm.options # JVM(Java虚拟机)参数配置文件,用于设置JVM堆内存大小(-Xms, -Xmx)等
# elasticsearch.yml
http.port:HTTP端口,用于API调用,默认 9200-9300
transport.port:TCP传输端口,用于集群内部节点之间的通信,默认 9300-9400
network.host:服务绑定的IP地址,若未配置,可能会绑定在 127.0.0.1(仅本地访问)或 0.0.0.0(允许外部访问)
cluster.name::elasticsearch 集群名称,用于节点发现
node.name:主机名,节点名称(与主机名一致)
path.data:数据存储目录
path.logs:日志存储目录(排查问题时非常重要)
4.2、使用命令重置 es 密码
bash
# 为内置用户设置密码(交互式)
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
# 或者自动生成随机密码
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto
# 重置 es 用户密码
/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
# 默认用户名
elastic:超级管理员
kibana:Kibana系统用户
logstash_system:Logstash系统用户
beats_system:Beats系统用户
# 使用elastic用户访问
curl -u elastic:your_password http://x.x.x.x:9200
# 查看集群健康状态
curl -u elastic:your_password http://x.x.x.x:9200/_cluster/health