适用版本: 6.8-8.11
1. 错误异常的基本描述 #
failed to execute snapshot lifecycle policy [policyId] 表示 Elasticsearch 已经触发了某个 SLM 策略的执行流程,但最终没有拿到成功生成的快照名称,因此返回执行失败。这通常不是“找不到策略”,而是“策略存在,但实际创建快照过程失败了”。
常见现象 #
- 通过 SLM 手动执行接口触发策略后返回失败。
- SLM 历史记录中可看到对应策略运行失败。
- 日志中除了这条错误外,通常还会伴随仓库验证失败、创建快照失败、权限异常或集群状态不满足快照要求等更底层异常。
典型报错与异常栈 #
org.elasticsearch.ElasticsearchException: failed to execute snapshot lifecycle policy [nightly-policy]
2. 为什么会发生这个错误 #
从执行路径看,SLM 在调度策略后需要真正完成一次快照创建;如果最终没有返回 snapshotName,就会抛出这个异常。常见原因包括:
- SLM 策略引用的仓库不存在、不可写或验证失败。
- 快照名称模板、保留规则或策略配置存在问题,导致执行阶段失败。
- 仓库后端权限不足,无法创建快照元数据或写入 blob。
- 集群中存在未满足快照条件的异常,例如节点问题、分片异常或仓库元数据冲突。
3. 如何排查和解决这个异常和解决这个异常 #
不要停留在 SLM 外层异常,要继续追具体的快照执行失败原因。
- 查看 SLM 策略详情和最近执行历史:
GET /_slm/policy/nightly-policy
GET /_slm/stats
- 查看主节点日志和 SLM 历史索引,定位该策略执行时的底层异常。
- 验证策略引用的仓库是否存在、是否可写:
GET /_snapshot/prod-backup
POST /_snapshot/prod-backup/_verify
- 检查策略配置中的快照名称模板、schedule、config、retention 是否合理。
- 如果同一策略持续失败,尝试手动创建一次同仓库快照,判断是 SLM 包装问题还是底层快照创建本身失败。
排查时需要注意的问题 #
- 这是策略执行失败,不等于策略不存在。
- 如果手动创建快照也失败,问题通常在仓库、权限或集群状态,而不在 SLM 调度器本身。
- SLM 的外层异常很短,真正根因经常在节点日志或 SLM 历史记录里。
4. 如何解决这个错误 #
常用修复思路 #
- 如果仓库不可用,先修复仓库配置、访问权限或后端存储可用性。
- 如果是策略配置错误,更新策略定义后重新执行。
- 如果是快照创建链路失败,先解决分片、节点或仓库元数据问题,再重试 SLM。
- 如果是环境配置漂移,统一策略、仓库和调度参数,避免跨环境复用错误配置。
相关 Elasticsearch API #
GET /_slm/policy/{policy_id}:查看策略定义。POST /_slm/policy/{policy_id}/_execute:手动执行指定策略。GET /_slm/stats:查看 SLM 运行统计。
借助 INFINI 产品提升排障效率 #
- INFINI Console 可以把 SLM 执行历史、仓库异常和节点错误聚合到一起,便于快速定位失败环节。
- INFINI Gateway 可用于确认是否有外部系统反复触发失败策略或异常重试。
5. 小结 #
failed to execute snapshot lifecycle policy [policyId] 的重点是“策略已经触发,但快照没有成功创建”。排查时要继续往下追仓库可用性、策略配置和底层快照执行链路,而不是只停留在 SLM 表层。
附:日志上下文 #
if (snapshotName.isPresent()) {
listener.onResponse(new ExecuteSnapshotLifecycleAction.Response(snapshotName.get()));
} else {
listener.onFailure(new ElasticsearchException("failed to execute snapshot lifecycle policy [" + policyId + "]"));
}





