Elasticsearch ILM 적용하기

By | 2020년 5월 22일

ILM(index lifecycle management)이 무료가 되기 전에는 별도의 스케쥴러로 인덱스를 rollover 및 삭제 해줬어야 했지만 이제는 ILM을 활용하여 쉽게 할 수 있다. (good good)

ILM 적용의 팩트는 아래 두가지다.

  1. Life Cycle Policy 생성
  2. Index Template 생성

목표는 filebeats나 metricbeats 처럼 ILM을 적용하고 싶었다.

my-log-2020.05.22-000001
my-log-2020.05.22-000002
my-log-2020.05.22-000003
my-log-2020.05.23-000001
my-log-2020.05.23-000002
my-log-2020.05.23-000003
my-log-2020.05.23-000004
PUT /_ilm/policy/test-policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_size": "5GB",
            "max_docs": "10000000",
            "max_age": "1d"
          }
        }
      },
      "warm": {
        "min_age": "1d",
        "actions": {
          "allocate": {
            "number_of_replicas": 0
          },
          "forcemerge": {
            "max_num_segments": 1
          }
        }
      },
      "delete": {
        "min_age": "365d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

test-policy 라는 이름으로 ILM 정책을 생성했다.

(이렇게 생성해도 되고 항목이 어려운 사람들은 Kibana에서 생성해도 된다.)

PUT /_template/my-log-template
{
  "index_patterns": [
    "my-log-*"
  ],
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0,
    "index": {
      "lifecycle": {
        "name": "test-policy",
        "rollover_alias": "my-log",
        "parse_origination_date": true
      }
    }
  },
  "mappings": {
    "properties": {
      "metricName": {
        "type": "keyword"
      },
      "timestamp": {
        "type": "date",
        "format": "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
      },
      "sampleCount": {
        "type": "double"
      }
    }
  }
}

index template 생성

index_patterns와 settings.index.lifecycle 부분이 중요하다.

PUT /%3Cmy-log-%7Bnow%2Fd%7D-000001%3E
{
  "aliases": {
    "my-log": { "is_write_index": true } 
  }
}
인덱스를 생성하면서 alias를 걸고 is_write_index : true를 설정하였다.
이렇게 하면 filebeats 처럼 rollover 된 index에도 alias를 걸 수 있다.
POST /%3Cmylog-%7Bnow%2Fd%7D-000001%3E/_doc
{
	"metricName": "Ping.Success",
	"timestamp": "2020-05-22T14:50:00.000+0900",
	"sampleCount": 5
}

샘플 데이터를 넣어보았다.

인덱스가 생성되면서 데이터가 잘 들어갔다.

이제 ILM이 잘 동작되는지 테스트해보자.

본인의 ILM 설정에는

        "max_size": "5GB",
        "max_docs": "10000000",
        "max_age": "1d"

요렇게 설정했기 때문에 5GB가 되거나 문서수가 천만건이 되거나 하루가 지나면 Rollover가 된다.

기다릴 수 없으니 직접 롤오버 시켜주자.

(ILM의 기본 Polling 시간은 10분이다. 이것을 변경하고 싶으면 cluster setting에서 indices.lifecycle.poll_interval 값을 변경해주면 된다. 참조 : https://www.elastic.co/guide/en/elasticsearch/reference/master/ilm-settings.html )

POST /my-log/_rollover

정상적으로 rollover가 되었다.

이제 주기적으로 rollover 및 index 삭제를 하지 않아도 된다.

4 thoughts on “Elasticsearch ILM 적용하기

  1. 이주희

    안녕하세요 혼자 이렇게 저렇게 해보다가 방법이 없어 여쭤보려고 댓글로 문의드립니다. ㅠㅠ

    매일 생성되던 인덱스가 ilm을 적용한 이후로 인덱스가 생성되지 않고 있습니다.
    적용했던 ilm을 제거하려면 어떻게 하면 될까요?

      1. 이주희

        답변 감사합니다 알려주신대로 template에서 life cycle 영역을 제거 조치 일단 해둔 상태입니다. ㅠㅠ

        데일리로 생성되는 인덱스가 있습니다.
        이미 생성된 인덱스들 중 당일 날짜 기준, 7일치만 남겨두고 삭제해주는 ilm을 적용했었는데
        ilm을 적용한 이후에 계속 이상하게 데일리로 신규 인덱스가 생성이 안되고 어제 날짜 인덱스에 데이터가 적재되는 상황이 발생하였습니다.
        그래서 ilm을 적용했던 것을 삭제해주게 된거였습니다. ㅠㅠ

        다시 한 번 ilm을 적용해봐야겠습니다 도움주셔서 감사합니다

        1. 마르스 Post author

          설정이 잘 안되시면 KIBANA에서 하시는것도 방법입니다.
          KIBANA에서 UI로 쉽게 하실 수 있어요.

Comments are closed.