SLM自动备份到远程对象存储必须分三步:先装对应插件并验证权限,再注册_snapshot仓库,最后用_slm/policy定义策略;缺一步即报repository_missing_exception或权限拒绝。

直接说结论:SLM 自动备份到远程对象存储(如 AWS S3、GCS、阿里云 OSS)必须分三步走——先装插件并验证权限,再注册 _snapshot 仓库,最后用 _slm/policy 定义策略。漏掉任意一步,PUT _slm/policy/xxx 都会报 repository_missing_exception 或权限拒绝。
确认远程存储插件已安装且配置正确
不同对象存储对应不同插件,不能混用:
- AWS S3 → 必须安装
repository-s3插件(Elasticsearch 自带,但需启用);检查方式:GET _cat/plugins?v看输出是否含repository-s3 - 阿里云 OSS → 依赖
elasticsearch-repository-oss插件(阿里云托管实例默认预装,自建集群需手动安装) - Google Cloud Storage → 需
repository-gcs插件,并在elasticsearch.yml中配置gcs.client.default.credentials_file路径
关键陷阱:插件装完不等于能用。比如 S3 仓库需在 elasticsearch.yml 显式配置 cloud.aws.region 和凭证(推荐用 IAM Role,避免硬编码 access_key/secret_key);OSS 仓库若用 RAM 子账号,必须授予 AliyunOSSFullAccess 或最小化策略(含 PutObject、ListObjects、DeleteObject)。
注册远程快照仓库时 location 参数不能写错
仓库类型和 location 值强绑定,常见错误如下:
- S3:
"type": "s3","settings": {"bucket": "my-es-backup-bucket", "region": "cn-shanghai"}—— 注意不是location字段,而是bucket+region - OSS:
"type": "oss","settings": {"endpoint": "https://oss-cn-shanghai.aliyuncs.com", "bucket": "my-es-oss-bucket"}——endpoint必须带协议,且与 bucket 所在地域一致 - GCS:
"type": "gcs","settings": {"bucket": "my-es-gcs-bucket"}—— 不需要写location,但要求服务账号密钥文件可被所有数据节点读取
注册后务必测试:POST _snapshot/my_remote_repo/_verify。返回空数组说明仓库可达;若报 Unable to execute HTTP request,大概率是网络策略(安全组、VPC 对等连接)或凭证失效。
SLM 策略中 repository 和 indices 必须显式指定
_slm/policy 的 JSON body 里,repository 是必填字段,且值必须和之前注册的仓库名完全一致(大小写敏感);indices 默认为 *,但生产环境建议明确列出索引名或使用通配符(如 logs-*),避免意外备份系统索引(.security、.kibana 等)。
示例策略(S3 场景):
PUT _slm/policy/daily-s3-backup
{
"schedule": "0 0 2 * * ?",
"name": "<daily-snap-{now/d}>",
"repository": "my_s3_repo",
"config": {
"indices": "app-logs-*,metrics-*",
"include_global_state": false
},
"retention": {
"expire_after": "7d",
"min_count": 5,
"max_count": 50
}
}注意:name 中的 {now/d} 是日期格式化占位符,实际生成快照名类似 daily-snap-2026.10.01;retention 里的 expire_after 是相对时间(从快照创建时间起算),不是绝对日历时间。
SLM 启动后看不到快照?检查这几个点
策略创建成功不代表自动执行。常见卡点:
- 集群健康状态不是
green或yellow—— SLM 默认跳过red状态集群,可通过continue_running_if_cluster_fails覆盖(不推荐) - 目标索引正在执行 force merge 或 segment 合并 —— 快照会等待合并完成,
GET _snapshot/my_s3_repo/_status可看到IN_PROGRESS卡在某个 shard - 远程存储空间满或配额超限(如 OSS Bucket 已达 10TB 上限)—— 此时
_slm/policy/xxx/_explain会显示最近一次失败原因 - SLM 任务被禁用:
GET _cluster/settings?include_defaults=true查看slm.enabled是否为true(默认开启)
最易被忽略的是:SLM 策略本身不触发立即执行,首次快照会在 schedule 指定的下一个时间点开始。想立刻验证,用 POST _slm/policy/daily-s3-backup/_execute 手动触发一次。

















