如果 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)在这里先感谢大家的到来。
虽然不是太详细,小编已经很努力,给小编来个一键三连(点赞,关注,收藏),小编会越来越努力。。。