Opensearch에서 ISM은 Index State Management의 약자로 인덱스의 상태를 관리하는 Management 플러그인입니다. 인덱스의 상태란 인덱스의 생명주기를 관리하고 관리 작업을 자동화하는 기능을 제공합니다. 이를 통해 데이터 유지 정책을 정의하여 자주 사용하는 데이터를 Hot, 자주 사용되지는 않지만 종종 사용되는 데이터를 Cold, 그리고 사용되지 않는 데이터를 Delete를 하여 Opensearch의 자원을 보다 효율적으로 사용할 수 있게 할 수 있습니다.

 

ISM Policy 생성

# ISM 생성
PUT _plugins/_ism/policies/my-ism
{
    "policy": {
        "description": "my-index ism policy",
        "default_state": "hot",
        "states": [
          {
            "name" : "hot",
            "actions" : [],
            "transitions" : [
              {
                "state_name" : "cold",
                "conditions" : {
                  "min_index_age" : "3d"
                }
              }
              ]
          },
          {
            "name" : "cold",
            "actions" : [],
            "transitions" : [
              {
                "state_name" : "delete",
                "conditions" : {
                  "min_index_age" : "7d"
                }
              }
              ]
          },
          {
            "name" : "delete",
            "actions" : [
              {
                "delete" : {}
              }
            ],
            "transitions" : []
          }
        ]
    }
}

# 결과
{
    "_id": "my-ism",
    "_version": 1,
    "_primary_term": 409,
    "_seq_no": 936,
    "policy": {
        "policy": {
            "policy_id": "my-ism",
            "description": "my-index ism policy",
            "last_updated_time": 1688990475484,
            "schema_version": 1,
            "error_notification": null,
            "default_state": "hot",
            "states": [
                {
                    "name": "hot",
                    "actions": [],
                    "transitions": [
                        {
                            "state_name": "cold",
                            "conditions": {
                                "min_index_age": "3d"
                            }
                        }
                    ]
                },
                {
                    "name": "cold",
                    "actions": [],
                    "transitions": [
                        {
                            "state_name": "delete",
                            "conditions": {
                                "min_index_age": "7d"
                            }
                        }
                    ]
                },
                {
                    "name": "delete",
                    "actions": [
                        {
                            "retry": {
                                "count": 3,
                                "backoff": "exponential",
                                "delay": "1m"
                            },
                            "delete": {}
                        }
                    ],
                    "transitions": []
                }
            ],
            "ism_template": null
        }
    }
}

인덱스 policy 동작 순서

  1. default_state의 값을 hot으로 정의하여 인덱스가 생성될 때 hot 상태로 생성됩니다. 
  2. transitions.min_index_age를 통해 3일 동안 hot 데이터 형식으로 유지됩니다.
  3. 3일이 지나면 transitions.state_name으로 명시한 cold 상태로 전달됩니다.
  4. cold 상태에서 명시한 7일 동안 데이터를 유지하고 delete 상태로 전달됩니다.
  5. delete 상태에서는 action으로 정의된 delete를 통해 인덱스를  삭제합니다.

간단히 정리하면 명시한 ISM은 3일 동안 Hot 데이터로 유지하고 3일 뒤에는 Delete 되는 Policy입니다. 

 

ISM Policy 확인

ISM을 잘 생성하였다면 GET을 통해 확인합니다.

GET _plugins/_ism/policies

 

ISM 삭제

더 이상 사용되지 않는 ISM을 삭제합니다.

DELETE _plugins/_ism/policies/my-ism

 

Hot에서 바로 Delete로

개발자의 환경에 따라 Cold 데이터를 사용하지 않는 경우가 많습니다. 이런 경우 굳이 Cold 상태까지 선언하는 것보다는 Hot 다음에 바로 Delete로 보내면 됩니다. 아래 예시는 3일 동안 Hot 데이터로 유지하고 3일 뒤에 인덱스가 삭제되는 예시입니다.

PUT _plugins/_ism/policies/my-ism
{
    "policy": {
        "description": "my-index ism policy",
        "default_state": "hot",
        "states": [
          {
            "name" : "hot",
            "actions" : [],
            "transitions" : [
              {
                "state_name" : "delete",
                "conditions" : {
                  "min_index_age" : "3d"
                }
              }
              ]
          },
          {
            "name" : "delete",
            "actions" : [
              {
                "delete" : {}
              }
            ],
            "transitions" : []
          }
        ]
    }
}

 

 

자세한 내용은 아래 링크(Opensearch Document)를 확인해 주세요.

 

https://opensearch.org/docs/latest/im-plugin/ism/index/

 

Index State Management

Index State Management

opensearch.org

 

Index ilm policy이란

ILM (Index Lifecycle Management)은 데이터 인덱스의 수명 주기를 관리하기 위한 기능입니다. ILM를 사용하면 데이터의 보존, 압축, 백업 및 삭제와 같은 다양한 관리 작업을 자동화하고 데이터 스토리지를 효율적으로 관리할 수 있는 기능을 제공하지만 이번 문서에서는 아주 간단하게 인덱스가 생성되고 일정 기간이 지나면 인덱스가 삭제되도록 하는 방법에 대하여 정리하였습니다.

보다 자세한 ILM 설명은 링크를 확인해주세요 (https://stdhsw.tistory.com/entry/Elasticsearch-%EC%B5%9C%EC%A0%81%ED%99%94-3-ilm-policy%EB%A1%9C-data-tiering-%ED%95%98%EA%B8%B0)

 

Index ilm policy 설정하기

PUT localhost:9200/_ilm/policy/my-policy
Content-Type: application/json

{
  "policy": {
    "phases": {
      "delete": {
        "min_age": "3d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

ilm policy 파라미터

  • delete.min_age : 인덱스가 생성되고 얼마만큼의 기간이 흐르면 지울지 설정합니다.

 

Index ilm policy 설정 확인 하기

GET localhost:9200/_ilm/policy/my-policy

### 결과
{
  "my-policy": {
    "version": 1,
    "modified_date": "2023-10-25T09:43:53.527Z",
    "policy": {
      "phases": {
        "delete": {
          "min_age": "3d",
          "actions": {
            "delete": {
              "delete_searchable_snapshot": true
            }
          }
        }
      }
    },
    "in_use_by": {
      "indices": [],
      "data_streams": [],
      "composable_templates": []
    }
  }
}

 

ILM Policy를 Index template에 적용하기

인덱스 template에 ILM 설정을 적용합니다. 인덱스 template에 대한 자세한 설명은 링크를 확인해 주세요 (https://stdhsw.tistory.com/entry/Elasticsearch%EC%9D%98-Index-template-%EC%84%A4%EC%A0%95)

PUT http://localhost:9200/_template/my-index-template
Content-Type: application/json

{
  "index_patterns": ["my-index*"],
  "settings": {
    "index": {
      "number_of_shards": "2",
      "number_of_replicas": "1",
      "refresh_interval": "5s",
      "lifecycle": {
        "name": "my-policy"
      }
    }
  },
  "mappings": {
    "properties": {
      "app": {
        "type": "keyword"
      },
      "level": {
        "type": "keyword"
      },
      "message": {
        "type": "text"
      }
    }
  }
}

Index template 파라미터

  • settings.index.lifecycle.name : 위에서 지정한 ILM의 명칭을 기입합니다.

위 설정을 적용하면 이제 "my-index"로 시작하는 모든 인덱스는 앞으로 생성되고 3일 뒤에 자동적으로 삭제가 되어 보다 효율적으로 디스크 사용량을 관리할 수 있습니다.

 

Index ilm policy 삭제하기

### delete
DELETE localhost:9200/_ilm/policy/my-policy

 

+ Recent posts