Snapshot Management API
출처: 문서
본문
스냅샷 관리 API
스냅샷 관리(SM) API를 사용하면 스냅샷 생성을 자동화할 수 있어요.
목차
{: .text-delta } 1. TOC {:toc}정책 생성 또는 업데이트
2.1부터 도입됨 {: .label .label-purple }
SM 정책을 생성하거나 업데이트해요.
엔드포인트
생성:
POST _plugins/_sm/policies/{policy_name}
업데이트:
PUT _plugins/_sm/policies/{policy_name}?if_seq_no=0&if_primary_term=1
업데이트 요청에는 seq_no와 primary_term 파라미터를 반드시 제공해야 해요.
요청 예시
POST _plugins/_sm/policies/daily-policy
{
"description": "Daily snapshot policy",
"creation": {
"schedule": {
"cron": {
"expression": "0 8 * * *",
"timezone": "UTC"
}
},
"time_limit": "1h"
},
"deletion": {
"schedule": {
"cron": {
"expression": "0 1 * * *",
"timezone": "America/Los_Angeles"
}
},
"condition": {
"max_age": "7d",
"max_count": 21,
"min_count": 7
},
"time_limit": "1h",
"snapshot_pattern": "external-backup-*"
},
"snapshot_config": {
"date_format": "yyyy-MM-dd-HH:mm",
"timezone": "America/Los_Angeles",
"indices": "*",
"repository": "s3-repo",
"ignore_unavailable": "true",
"include_global_state": "false",
"partial": "true",
"metadata": {
"any_key": "any_value"
}
},
"notification": {
"channel": {
"id": "NC3OpoEBzEoHMX183R3f"
},
"conditions": {
"creation": true,
"deletion": false,
"failure": false,
"time_limit_exceeded": false
}
}
}
응답 예시
{
"_id" : "daily-policy-sm-policy",
"_version" : 5,
"_seq_no" : 54983,
"_primary_term" : 21,
"sm_policy" : {
"name" : "daily-policy",
"description" : "Daily snapshot policy",
"schema_version" : 15,
"creation" : {
"schedule" : {
"cron" : {
"expression" : "0 8 * * *",
"timezone" : "UTC"
}
},
"time_limit" : "1h"
},
"deletion" : {
"schedule" : {
"cron" : {
"expression" : "0 1 * * *",
"timezone" : "America/Los_Angeles"
}
},
"condition" : {
"max_age" : "7d",
"min_count" : 7,
"max_count" : 21
},
"time_limit" : "1h",
"snapshot_pattern" : "external-backup-*"
},
"snapshot_config" : {
"indices" : "*",
"metadata" : {
"any_key" : "any_value"
},
"ignore_unavailable" : "true",
"timezone" : "America/Los_Angeles",
"include_global_state" : "false",
"date_format" : "yyyy-MM-dd-HH:mm",
"repository" : "s3-repo",
"partial" : "true"
},
"schedule" : {
"interval" : {
"start_time" : 1656425122909,
"period" : 1,
"unit" : "Minutes"
}
},
"enabled" : true,
"last_updated_time" : 1656425122909,
"enabled_time" : 1656425122909,
"notification" : {
"channel" : {
"id" : "NC3OpoEBzEoHMX183R3f"
},
"conditions" : {
"creation" : true,
"deletion" : false,
"failure" : false,
"time_limit_exceeded" : false
}
}
}
}
파라미터
SM 정책을 생성/업데이트할 때 다음 파라미터를 지정할 수 있어요.
| 파라미터 | 타입 | 설명 |
|---|---|---|
description |
String | SM 정책에 대한 설명이에요. 선택 사항이에요. |
enabled |
Boolean | 생성 시 이 SM 정책을 활성화할지 여부예요. 선택 사항이에요. |
snapshot_config |
Object | 스냅샷 생성을 위한 설정 옵션이에요. 필수예요. |
snapshot_config.date_format |
String | 스냅샷 이름은 <policy_name>-<date>-<random number> 형식을 가져요. date_format은 스냅샷 이름에서 날짜의 형식을 지정해요. OpenSearch가 지원하는 모든 날짜 형식을 지원해요. 선택 사항이에요. 기본값은 "yyyy-MM-dd'T'HH:mm:ss"예요. |
snapshot_config.date_format_timezone |
String | 스냅샷 이름은 <policy_name>-<date>-<random number> 형식을 가져요. date_format_timezone은 스냅샷 이름에서 날짜의 시간대를 지정해요. 선택 사항이에요. 기본값은 UTC예요. |
snapshot_config.indices |
String | 스냅샷에 포함할 인덱스 이름이에요. 여러 인덱스 이름은 ,로 구분해요. 와일드카드(*)를 지원해요. 선택 사항이에요. 기본값은 *(모든 인덱스)예요. |
snapshot_config.repository |
String | 스냅샷을 저장할 리포지토리예요. 필수예요. |
snapshot_config.ignore_unavailable |
Boolean | 사용할 수 없는 인덱스를 무시할지 여부예요. 선택 사항이에요. 기본값은 false예요. |
snapshot_config.include_global_state |
Boolean | 클러스터 상태를 포함할지 여부예요. 보안 플러그인 고려 사항 때문에 기본값은 true예요. |
snapshot_config.partial |
Boolean | 부분 스냅샷을 허용할지 여부예요. 선택 사항이에요. 기본값은 false예요. |
snapshot_config.metadata |
Object | 키-값 쌍 형태의 메타데이터예요. 선택 사항이에요. |
creation |
Object | 스냅샷 생성을 위한 설정이에요. OpenSearch 3.3 이상에서는 선택 사항이에요. 중요: 모든 노드가 OpenSearch 3.3 이상으로 업그레이드되기 전까지는 이 값을 설정하지 않은 채로 두면 안 돼요. |
creation.schedule |
String | 스냅샷을 생성하는 데 사용되는 cron 스케줄이에요. 필수예요. |
creation.time_limit |
String | 스냅샷 생성이 끝나기를 기다리는 최대 시간을 설정해요. time_limit이 스냅샷 생성 예약 간격보다 길면 time_limit이 지날 때까지 예약된 스냅샷은 생성되지 않아요. 예를 들어 time_limit이 35분으로 설정되어 있고 자정부터 30분 간격으로 스냅샷을 생성한다면, 00:00과 01:00의 스냅샷은 생성되지만 00:30의 스냅샷은 건너뛰게 돼요. 선택 사항이에요. |
deletion |
Object | 스냅샷 삭제를 위한 설정이에요. 선택 사항이에요. 기본값은 모든 스냅샷을 보존하는 거예요. |
deletion.schedule |
String | 스냅샷을 삭제하는 데 사용되는 cron 스케줄이에요. 선택 사항이에요. 기본값은 필수 항목인 creation.schedule을 사용하는 거예요. |
deletion.time_limit |
String | 스냅샷 삭제가 끝나기를 기다리는 최대 시간을 설정해요. 선택 사항이에요. |
deletion.condition |
Object | 스냅샷 삭제 조건이에요. 필수예요. |
deletion.condition.max_count |
Integer | 보존할 스냅샷의 최대 개수예요. 선택 사항이에요. max_age, max_count 중 하나 또는 둘 다를 반드시 지정해야 해요. |
deletion.condition.max_age |
String | 스냅샷이 보존되는 최대 시간이에요. 선택 사항이에요. max_age, max_count 중 하나 또는 둘 다를 반드시 지정해야 해요. |
deletion.condition.min_count |
Integer | 보존할 스냅샷의 최소 개수예요. 선택 사항이에요. 기본값은 1이에요. |
deletion.snapshot_pattern |
String | 삭제에 포함할 추가 스냅샷 패턴이에요. 정책 자체의 스냅샷 외에 지정된 패턴과 일치하는 스냅샷도 삭제할 수 있어요. 와일드카드(*)를 지원해요. 선택 사항이에요. |
notification |
Object | SM 이벤트에 대한 알림을 정의해요. 선택 사항이에요. |
notification.channel |
Object | 알림에 사용할 채널을 정의해요. SM 알림을 설정하기 전에 알림 채널을 생성하고 구성해야 해요. 필수예요. |
notification.channel.id |
String | 알림에 사용되는 채널의 채널 ID예요. 생성된 모든 채널의 채널 ID를 가져오려면 GET _plugins/_notifications/configs를 사용하세요. 필수예요. |
notification.conditions |
Object | 알림을 받고 싶은 SM 이벤트예요. 관심 있는 항목은 true로 설정하세요. |
notification.conditions.creation |
Boolean | 스냅샷 생성에 대한 알림을 받을지 여부예요. 선택 사항이에요. 기본값은 true예요. |
notification.conditions.deletion |
Boolean | 스냅샷 삭제에 대한 알림을 받을지 여부예요. 선택 사항이에요. 기본값은 false예요. |
notification.conditions.failure |
Boolean | 생성 또는 삭제 실패에 대한 알림을 받을지 여부예요. 선택 사항이에요. 기본값은 false예요. |
notification.conditions.time_limit_exceeded |
Boolean | 스냅샷 작업이 time_limit보다 오래 걸릴 때 알림을 받을지 여부예요. 선택 사항이에요. 기본값은 false예요. |
정책 조회
2.1부터 도입됨 {: .label .label-purple }
SM 정책을 조회해요.
엔드포인트
모든 SM 정책 조회:
GET _plugins/_sm/policies
쿼리 문자열을 사용해 페이징, 정렬 기준 필드, 정렬 순서를 지정할 수 있어요:
GET _plugins/_sm/policies?from=0&size=20&sortField=sm_policy.name&sortOrder=desc&queryString=*
특정 SM 정책 조회:
GET _plugins/_sm/policies/{policy_name}
요청 예시
GET _plugins/_sm/policies/daily-policy
응답 예시
{
"_id" : "daily-policy-sm-policy",
"_version" : 6,
"_seq_no" : 44696,
"_primary_term" : 19,
"sm_policy" : {
"name" : "daily-policy",
"description" : "Daily snapshot policy",
"schema_version" : 15,
"creation" : {
"schedule" : {
"cron" : {
"expression" : "0 8 * * *",
"timezone" : "UTC"
}
},
"time_limit" : "1h"
},
"deletion" : {
"schedule" : {
"cron" : {
"expression" : "0 1 * * *",
"timezone" : "America/Los_Angeles"
}
},
"condition" : {
"max_age" : "7d",
"min_count" : 7,
"max_count" : 21
},
"time_limit" : "1h",
"snapshot_pattern" : "external-backup-*"
},
"snapshot_config" : {
"metadata" : {
"any_key" : "any_value"
},
"ignore_unavailable" : "true",
"include_global_state" : "false",
"date_format" : "yyyy-MM-dd-HH:mm",
"repository" : "s3-repo",
"partial" : "true"
},
"schedule" : {
"interval" : {
"start_time" : 1656341042874,
"period" : 1,
"unit" : "Minutes"
}
},
"enabled" : true,
"last_updated_time" : 1656341042874,
"enabled_time" : 1656341042874
}
}
Explain
2.1부터 도입됨 {: .label .label-purple }
지정된 모든 정책의 활성화/비활성화 상태와 메타데이터를 제공해요. 여러 정책 이름은 ,로 구분해요. 원하는 정책을 와일드카드 패턴으로 지정할 수도 있어요.
{: width="150" style="float: left; margin-right: 15px;" }
SM은 스냅샷 생성과 삭제에 상태 머신을 사용해요. 왼쪽 이미지는 CREATION_START 상태에서 CREATION_FINISHED 상태까지 생성 워크플로의 한 실행 주기를 보여줘요. 삭제 워크플로는 생성 워크플로와 같은 패턴을 따라요.
생성 워크플로는 CREATION_START 상태에서 시작해 생성 cron 스케줄의 조건이 충족되는지 계속 확인해요. 조건이 충족되면 생성 워크플로는 CREATION_CONDITION_MET 상태로 전환된 다음 CREATING 상태로 넘어가요. CREATING 상태에서는 Create Snapshot API를 비동기로 호출한 뒤 CREATION_FINISHED 상태에서 스냅샷 생성이 끝나기를 기다려요. 스냅샷 생성이 끝나면 생성 워크플로는 다시 CREATION_START 상태로 돌아가고 주기가 계속돼요. metadata.creation과 metadata.deletion의 current_state 필드는 상태 머신의 현재 상태를 반환해요.
엔드포인트
GET _plugins/_sm/policies/{policy_names}/_explain
요청 예시
GET _plugins/_sm/policies/daily*/_explain
응답 예시
{
"policies" : [
{
"name" : "daily-policy",
"creation" : {
"current_state" : "CREATION_START",
"trigger" : {
"time" : 1656403200000
}
},
"deletion" : {
"current_state" : "DELETION_START",
"trigger" : {
"time" : 1656403200000
}
},
"policy_seq_no" : 44696,
"policy_primary_term" : 19,
"enabled" : true
}
]
}
다음 표는 응답에서 각 정책의 모든 필드를 정리한 거예요.
| 필드 | 설명 |
|---|---|
name |
SM 정책의 이름이에요. |
creation |
가장 최근 생성 작업에 대한 정보예요. 다음 하위 필드를 참고하세요. |
deletion |
가장 최근 삭제 작업에 대한 정보예요. 다음 하위 필드를 참고하세요. |
policy_seq_no policy_primary_term |
SM 정책의 버전이에요. |
enabled |
정책이 실행 중인가요? |
다음 표는 각 정책의 creation과 deletion 객체에 있는 모든 필드를 정리한 거예요.
| 필드 | 설명 |
|---|---|
current_state |
앞 섹션에서 설명한 것처럼 스냅샷 생성/삭제를 실행하는 상태 머신의 현재 상태예요. |
trigger.time |
다음 생성/삭제 실행 시간이에요. epoch로부터 밀리초 단위예요. |
latest_execution |
가장 최근 생성/삭제 실행을 설명해요. |
latest_execution.status |
가장 최근 생성/삭제의 실행 상태예요. 가능한 값은 다음과 같아요:IN_PROGRESS: 스냅샷 생성/삭제가 시작됐어요. SUCCESS: 스냅샷 생성/삭제가 성공적으로 끝났어요. RETRYING: 생성/삭제 시도가 실패했어요. 세 번 재시도해요. FAILED: 세 번의 재시도 후에도 생성/삭제 시도가 실패했어요. 현재 실행 주기를 끝내고 다음 실행 주기로 넘어가요. TIME_LIMIT_EXCEEDED: 생성/삭제 시간이 정책에 설정된 time_limit을 초과했어요. 현재 실행 주기를 끝내고 다음 실행 주기로 넘어가요. |
latest_execution.start_time |
가장 최근 실행의 시작 시간이에요. epoch로부터 밀리초 단위예요. |
latest_execution.end_time |
가장 최근 실행의 종료 시간이에요. epoch로부터 밀리초 단위예요. |
latest_execution.info.message |
가장 최근 실행의 상태를 설명하는 사용자 친화적인 메시지예요. |
latest_execution.info.cause |
가장 최근 실행이 실패하면 실패 원인을 담고 있어요. |
retry.count |
남은 실행 재시도 횟수예요. |
정책 시작
2.1부터 도입됨 {: .label .label-purple }
enabled 플래그를 true로 설정해서 정책을 시작해요.
엔드포인트
POST _plugins/_sm/policies/{policy_name}/_start
요청 예시
POST _plugins/_sm/policies/daily-policy/_start
응답 예시
{
"acknowledged" : true
}
정책 중지
2.1부터 도입됨 {: .label .label-purple }
SM 정책의 enabled 플래그를 false로 설정해요. 시작하기 전까지는 정책이 실행되지 않아요.
엔드포인트
POST _plugins/_sm/policies/{policy_name}/_stop
요청 예시
POST _plugins/_sm/policies/daily-policy/_stop
응답 예시
{
"acknowledged" : true
}
정책 삭제
2.1부터 도입됨 {: .label .label-purple }
지정된 SM 정책을 삭제해요.
엔드포인트
DELETE _plugins/_sm/policies/{policy_name}
요청 예시
DELETE _plugins/_sm/policies/daily-policy
응답 예시
{
"_index" : ".opendistro-ism-config",
"_id" : "daily-policy-sm-policy",
"_version" : 8,
"result" : "deleted",
"forced_refresh" : true,
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"_seq_no" : 45366,
"_primary_term" : 20
}