Elasticsearch 报错:index read-only / allow delete (api) 深度解析与解决方案

sh 复制代码
ClusterBlockException[index [.monitoring-es-7-2025.11.12] blocked by: [FORBIDDEN/12/index read-only / allow delete (api)]]

🚨 Elasticsearch 报错:index read-only / allow delete (api) 深度解析与解决方案

💡 关键词:Elasticsearch、磁盘空间不足、监控索引、只读状态


一、问题背景

在一次 Node.js 项目运行过程中,我们的 Elasticsearch 集群突然在日志中疯狂刷出警告:

sh 复制代码
"message": "unexpected error while indexing monitoring document",
"stacktrace": [
  "org.elasticsearch.xpack.monitoring.exporter.ExportException: ClusterBlockException[index [.monitoring-es-7-2025.11.12] blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];]"
]

Kibana 监控页面无法更新,ES 指标面板停止刷新。

但奇怪的是,我们清理了磁盘空间后,问题仍然存在。


二、问题现象

执行 GET _cat/indices?v,可以看到 .monitoring-* 索引状态为 green,但日志仍不断报:

sh 复制代码
index [.monitoring-es-7-2025.11.12] blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];

即使空间已经恢复,Elasticsearch 仍然拒绝对这些索引写入。


三、问题根因分析

1️⃣ Elasticsearch 的自动保护机制

当磁盘使用率超过阈值(默认 95%),ES 会自动触发保护机制:

sh 复制代码
index.blocks.read_only_allow_delete = true

意思是:

• 索引变为只读;

• 只允许删除(防止磁盘被完全写满导致崩溃)。

这是一种「自我保护」,以防止数据写满磁盘导致节点宕机。


2️⃣ 清理空间 ≠ 自动解除锁定

即使你清理了磁盘空间,Elasticsearch 不会自动解锁索引。

这点经常让人误以为"磁盘问题还没解决",其实只是索引状态没恢复。


3️⃣ 监控索引的特殊性

报错中的 .monitoring-es-* 和 .monitoring-kibana-* 属于 X-Pack Monitoring 模块。

Kibana、Metricbeat 等监控数据会持续往这些索引写入。

只要它们被锁定,就会持续抛出 "unexpected error while indexing monitoring document"。


四、解决步骤 ✅

  1. 查看索引只读状态

执行以下命令查看哪些索引被锁定:

sh 复制代码
GET _all/_settings?filter_path=**.blocks.read_only_allow_delete

你会看到类似输出:

sh 复制代码
{
  ".monitoring-es-7-2025.11.12": {
    "settings": {
      "index.blocks.read_only_allow_delete": "true"
    }
  }
}

  1. 清理磁盘空间

  1. 解锁索引

解锁单个索引:

sh 复制代码
PUT .monitoring-es-7-2025.11.12/_settings
{
  "index.blocks.read_only_allow_delete": null
}

或者解锁所有索引(推荐):

sh 复制代码
PUT _all/_settings
{
  "index.blocks.read_only_allow_delete": null
}
  1. 验证结果

再次执行:

sh 复制代码
GET _cat/indices?v

监控索引恢复正常写入后,日志中的 FORBIDDEN/12 报错将停止。


  1. (可选)清理旧监控索引

这些 .monitoring-* 索引每天会自动创建一个新索引(按日期)。

可以清理过期数据节省空间:

sh 复制代码
DELETE .monitoring-es-7-2025.10*
DELETE .monitoring-kibana-7-2025.10*

或者在 elasticsearch.yml 中关闭自动监控:

sh 复制代码
xpack.monitoring.enabled: false

五、延伸:为什么清理磁盘后错误还在?

这是很多人困惑的点。

Elasticsearch 判断磁盘"安全"需要两个条件:

  1. 实际磁盘使用率低于 cluster.routing.allocation.disk.watermark.low(默认 85%);

  2. 索引解除只读状态。

即使你释放了空间,只要第 2 步没做,仍然会报 index read-only / allow delete (api)。


六、总结

问题 原因 解决
报错 FORBIDDEN/12 磁盘满导致索引只读 PUT _all/_settings 解锁
清理磁盘仍报错 ES 不会自动解锁索引 手动恢复只读状态
.monitoring-* 报错 Kibana/ES 自带监控无法写入 解锁或清理监控索引
日志持续警告 未清理旧索引 删除历史 .monitoring-*

七、实战命令汇总

sh 复制代码
# 查看集群磁盘状态
GET _cluster/stats?human

# 查看只读索引
GET _all/_settings?filter_path=**.blocks.read_only_allow_delete

# 全量解锁
PUT _all/_settings
{
  "index.blocks.read_only_allow_delete": null
}

# 删除旧监控索引
DELETE .monitoring-es-7-2025.10*
DELETE .monitoring-kibana-7-2025.10*
相关推荐
nVisual1 小时前
机柜PDU安装位置与空间建模方案
大数据·网络·数据库·信息可视化·数据中心基础设施管理
@insist1231 小时前
系统规划与管理师-流程评价与持续改进核心知识-终章
大数据·人工智能·软考·系统规划与管理师·软件水平考试·系统规划与管理工程师
TechEdu2026062 小时前
[计算机科学]大数据硬件架构与软件架构概览
大数据·计算机科学
爱莉希雅&&&2 小时前
elasticsearch+kibana+logstash+filebeat链路部署流程
大数据·elasticsearch·搜索引擎·kibana·logstash·filebeat
FII工业富联科技服务2 小时前
从灯塔工厂到AI Factory新模式:AI正在重构制造业的四大核心能力
大数据·运维·人工智能·重构·ar·制造
小五传输2 小时前
自主可控建设指南:Serv-u替代方案,实现平滑迁移业务不中断
大数据·运维·安全
Spey_Events2 小时前
【核心议题发布】聚焦深度维修与 AI 智慧革新!2026中国民用航空维修智造展——议题重磅发布!
大数据·人工智能
czzxxxxxx3 小时前
创客匠人AI智能体:知识付费从“重人力”走向“自动化”的拐点
大数据·人工智能
大大大大晴天3 小时前
Hudi技术内幕:Clustering原理与实践
大数据
ZKNOW甄知科技3 小时前
燕千云深度集成飞书:以AI之力,开启无感IT运维体验
大数据·运维·网络·数据库·人工智能·低代码·集成学习