본문으로 바로가기

Elasticsearch Index Lifecycle Management (ILM) 사용해 보기

category ELK 2022. 7. 19. 19:20
반응형


인덱스 생명 주기 관련 설정 입니다.

 

Elasticsearch 로컬 환경

 

Docker + Elasticsearch, Kibana 구성 (cluster)

구성 1. node는 총 3개 구성 2. node1, node2는 master node 겸 data node 사용 3. node3은 data node로만 사용 # elasticsearch image docker.elastic.co/elasticsearch/elasticsearch:7.9.1 # kibana image doc..

1995-dev.tistory.com

 

진행 과정시 주의할점

 

#1 rollover alias can point to multiple indices ~ 

Index lifecycle error illegal_argument_exception: Rollover alias [index-log] can point to multiple indices, found duplicated alias [[index-log]] in index template

 

Kibana Index Template에 alias 설정 해놓으면 rollover 과정에서 multiple indces error가 발생

https://discuss.elastic.co/t/rollover-index-issue-with-elasticsearch-6-2/123852

문제는 쓰기 별칭이 실제로 정의에 따라 여기에서 여러 인덱스를 가리킬 수 있다는 것입니다.

별칭을 롤오버하면 동일한 접두사를 가진 다른 인덱스가 생성됩니다.
따라서 어느 시점에서 다음을 갖게 됩니다.

쓰기 별칭이 있는 이전 인덱스
쓰기 별칭이 있는 새 인덱스(템플릿에 있기 때문에)
이로 인해 불일치가 발생할 수 있습니다.

라는 문구를 확인했습니다.

그래서 진행 과정 중 Template alias와 rollover alias를 다르게 설정해주었습니다.

 

#2 Current action에는 rollover를 진행중이라고 적어져 있지만 실제로는 rollover가 실행되지 않음

https://www.elastic.co/guide/en/elasticsearch/reference/current/ilm-settings.html#_cluster_level_settings

indices.lifecycle.poll_interval
(Dynamic, time unit value) How often index lifecycle management checks for indices that meet policy criteria. Defaults to 10m

인덱스 수명 주기 관리가 정책 기준을 충족하는 인덱스를 확인하는 빈도입니다. 기본값은 10m입니다.

기본값 변경 필요 (1초)

PUT /_cluster/settings
{
  "persistent": {
	  "indices.lifecycle.poll_interval": "1s"
  }
}

 

 

1단계 : Life Cycle Policy Create (인덱스 생명 주기 정책)

         인덱스 생명 주기 4단계

                 1단계 : Hot phase

                                 인덱스가 활발하게 업데이트되고 쿼리 수행

                 2단계 : Warm phase

                                 인덱스가 더 이상 업데이트 되지 않지만 여전히 쿼리 수행

                 3단계 : Cold phase

                                 인덱스가 더 이상 업데이트되지 않고 거의 쿼리 미수행. 검색은 가능

                 4단계 : Delete phase

                                 색인이 더 이상 필요하지 않으며 안전하게 삭제

 

 

         Kibana > Stack Magement > Index Lifecycle Polices

 

         Hot phase 설정

                  rollover 조건 설정

                           1. Maximum index size 50kilobytes

                           2. Maximum documents 100개

                           3. Maximum age 1minutes

 

                  위 3가지 조건중 하나라도 달성되면 index가 rollover 됨

 

 

 

         Delete phase 설정

                  index 삭제 조건 설정

                           1. Timing for delete phase 5 minutes from rollover

 

# index-policy 조회
GET _ilm/policy/index-policy

{
  "index-policy" : {
    "version" : 1,
    "modified_date" : "2022-07-21T04:30:59.654Z",
    "policy" : {
      "phases" : {
        "hot" : {
          "min_age" : "0ms",
          "actions" : {
            "rollover" : {
              "max_size" : "50kb",
              "max_age" : "1m",
              "max_docs" : 100
            },
            "set_priority" : {
              "priority" : 100
            }
          }
        },
        "delete" : {
          "min_age" : "5m",
          "actions" : {
            "delete" : {
              "delete_searchable_snapshot" : true
            }
          }
        }
      }
    }
  }
}

 

 

2단계 : Index Template Create

 

         Kibana > Stack Magement > Index Management > index Templates

 

         1. Create template 

                 - index patterns : index-log-* (index-log-로 시작하는 모든 index )

 

 

         1단계에서 만들어준 Index Lifecycle Policies 설정 

 

                  index settings

                         rollover를 위한 alias index-log 설정

 

 

{
  "index": {
    "lifecycle": {
      "name": "index-policy",
      "rollover_alias": "index-log"
    },
    "number_of_shards" : "1",
    "number_of_replicas" : "0"
  }
}

         

                  Aliases    

                         index-log-* 전체를 묶을 alias all-log-index 설정

 

{
  "all-log-index": {}
}

         index template 설정 완료

# index tempalte 조회
GET _index_template/index-template

{
  "index_templates" : [
    {
      "name" : "index-template",
      "index_template" : {
        "index_patterns" : [
          "index-log-*"
        ],
        "template" : {
          "settings" : {
            "index" : {
              "lifecycle" : {
                "name" : "index-policy",
                "rollover_alias" : "index-log"
              },
              "number_of_shards" : "1",
              "number_of_replicas" : "0"
            }
          },
          "aliases" : {
            "all-log-index" : { }
          }
        },
        "composed_of" : [ ]
      }
    }
  ]
}

 

         index-log-000001 Index 생성 alias index-log로 설정

 

PUT index-log-000001
{
  "aliases": {
    "index-log": {
      "is_write_index": true
    }
  }
}

 

         Index Management에 두개의 Aliases 확인

         Lifecycle policy 정책 설정 확인

 

         

설정 완료

 

 

1m마다 rollover 되는것을 확인

 

반응형

'ELK' 카테고리의 다른 글

Elastic APM 구성해보기  (0) 2022.08.24
Elasticsearch nori plugin 사용해보기  (0) 2022.07.27
Elasticsearch Ingest Node PipeLine 사용해 보기  (0) 2022.07.19
Elasticsearch Analyzer 분석  (0) 2022.07.18
Elasticsearch Scroll Search API 조회  (0) 2021.07.14