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": "megatoi-iot-mon",
        "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 삭제를 하지 않아도 된다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다