如果 Elasticsearch(ES)在凌晨自动删除了包括自身索引在内的大量索引,这是一个比较严重的问题,下面从多个方面分析可能的原因,并给出排查步骤与相应命令。
ILM 允许根据索引的年龄、大小等条件自动管理索引的生命周期,若策略配置不当,可能导致凌晨触发删除操作。
当磁盘空间达到一定阈值,ES 可能会自动删除一些索引以释放空间。
如果配置了自动快照并设置了保留策略,当快照过期或磁盘空间不足时,可能会触发索引删除。
集群出现严重问题时,可能会触发自动恢复机制,其中可能包含删除索引的操作。
# 查看所有 ILM 策略
GET _ilm/policy
# 查看每个索引关联的 ILM 策略
GET _index_template
# 以某个具体索引为例,查看其 ILM 状态
GET <index_name>/_ilm/explain
检查策略中是否存在凌晨执行删除操作的规则,若发现不合理的策略,可根据实际情况修改或删除。
# 查看节点磁盘使用情况
GET _nodes/stats/fs
# 查看磁盘水线配置
GET _cluster/settings?include_defaults=true&filter_path=**.disk.*
如果磁盘使用率接近或超过高水线(默认 90%),ES 可能会自动删除索引。可考虑清理磁盘或调整磁盘水线配置。
# 查看快照仓库配置
GET _snapshot
# 查看快照生命周期管理(SLM)策略
GET _slm/policy
确认是否存在凌晨执行快照清理的策略,若有,可根据业务需求调整保留期限或清理规则。
# 查看集群健康状态
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
替换为凌晨具体时间范围,检查是否有与索引删除相关的错误或警告信息。
# 查看系统定时任务
crontab -l
# 查看 ES 服务相关的 systemd 定时器
systemctl list-timers --all
确认是否存在凌晨执行的与 ES 相关的定时任务,可能是脚本错误导致索引删除。
确保 ES 的安全配置和用户权限设置正确,防止恶意操作或误操作。可查看用户角色和权限配置:
GET _security/role
GET _security/user
通过以上步骤的排查,应该能够找出 ES 自动删除索引的原因,并采取相应的措施进行修复和预防。
作者:Teddy (公众号:码尚云软件)
ok!到这里就大功告成,小编(Teddy)在这里先感谢大家的到来。
虽然不是太详细,小编已经很努力,给小编来个一键三连(点赞,关注,收藏),小编会越来越努力。。。