es凌晨自己把索引删除了,包括es自己的索引

发布于:2025-02-13 ⋅ 阅读:(14) ⋅ 点赞:(0)

如果 Elasticsearch(ES)在凌晨自动删除了包括自身索引在内的大量索引,这是一个比较严重的问题,下面从多个方面分析可能的原因,并给出排查步骤与相应命令。

可能的原因

1. 索引生命周期管理(ILM)策略

ILM 允许根据索引的年龄、大小等条件自动管理索引的生命周期,若策略配置不当,可能导致凌晨触发删除操作。

2. 磁盘压力触发清理

当磁盘空间达到一定阈值,ES 可能会自动删除一些索引以释放空间。

3. 自动快照与清理

如果配置了自动快照并设置了保留策略,当快照过期或磁盘空间不足时,可能会触发索引删除。

4. 集群状态异常

集群出现严重问题时,可能会触发自动恢复机制,其中可能包含删除索引的操作。

排查步骤及命令

1. 检查索引生命周期管理(ILM)策略
# 查看所有 ILM 策略
GET _ilm/policy

# 查看每个索引关联的 ILM 策略
GET _index_template

# 以某个具体索引为例,查看其 ILM 状态
GET <index_name>/_ilm/explain

检查策略中是否存在凌晨执行删除操作的规则,若发现不合理的策略,可根据实际情况修改或删除。

2. 检查磁盘使用情况和磁盘水线配置
# 查看节点磁盘使用情况
GET _nodes/stats/fs

# 查看磁盘水线配置
GET _cluster/settings?include_defaults=true&filter_path=**.disk.*

如果磁盘使用率接近或超过高水线(默认 90%),ES 可能会自动删除索引。可考虑清理磁盘或调整磁盘水线配置。

3. 检查自动快照与清理策略
# 查看快照仓库配置
GET _snapshot

# 查看快照生命周期管理(SLM)策略
GET _slm/policy

确认是否存在凌晨执行快照清理的策略,若有,可根据业务需求调整保留期限或清理规则。

4. 分析集群健康状态和事件日志
# 查看集群健康状态
GET _cluster/health

# 查看集群状态变更历史
GET _cluster/state?filter_path=metadata.version,blocks,state_uuid,master_node,cluster_uuid,routing_table,routing_nodes

# 查看 ES 日志文件,查找凌晨时段的异常信息
grep 'YYYY-MM-07T00:00:00.000' /var/log/elasticsearch/elasticsearch.log

YYYY-MM-07T00:00:00.000 替换为凌晨具体时间范围,检查是否有与索引删除相关的错误或警告信息。

5. 检查系统定时任务
# 查看系统定时任务
crontab -l

# 查看 ES 服务相关的 systemd 定时器
systemctl list-timers --all

确认是否存在凌晨执行的与 ES 相关的定时任务,可能是脚本错误导致索引删除。

6. 检查安全配置和权限

确保 ES 的安全配置和用户权限设置正确,防止恶意操作或误操作。可查看用户角色和权限配置:

GET _security/role
GET _security/user

通过以上步骤的排查,应该能够找出 ES 自动删除索引的原因,并采取相应的措施进行修复和预防。

😁 作者:Teddy (公众号:码尚云软件)
ok!到这里就大功告成,小编(Teddy)在这里先感谢大家的到来。
虽然不是太详细,小编已经很努力,给小编来个一键三连(点赞,关注,收藏),小编会越来越努力。。。