kibana & opendistro index lifecycle management(ilm) 적용하기
changelog
- 2020-12-14: 문서작성
- 2021-04-06: es, opendistro ilm 관련 API 경로 차이 관련 내용 추가
introduction
- 본 글은 kibana & opendistro 에 ilm rule 적용을 다룬다.
- AWS elasticsearch service SaaS(Service as a service) 를 사용하는데, 사실 aws opendistro 는 elastic 의 kibana 와는 갈래가 나뉘었다.
전쟁의 서막
- elastic 의 발표
- 우리는 품질을 높이기 위한 노력인데 억울하다..
- aws 의 발표
- 우리는 opensource 로 공개했을뿐이다.
- 매일 index 가 생성되는데, index management 가 없으니, 계속해서 데이터를 쌓아놓긴 메모리/용량이 아쉽고, 수동으로 saved objects 를 삭제하며 관리할 수는 없으니 ilm(index lifecycle management) 을 적용하기로 하였다.
- Note: opendistro 에서는 ism(index state management) 라는 명칭을 쓰는것 같은데, ilm / ism 동일한 의미로 사용하였다.
environment
- aws 에서 제공하는 elasticsearch SaaS 와 aws EC2 에 직접 설치한 elasticsearch & kibana 두 가지 종류를 사용중이다.
- index template 를 미리 생성해놓았다.
- EC2 에 직접 띄운 elasticsearch 에는 filebeat 를 이용해서, SaaS 에는 k8s 에서 발생하는 로그를 fluentbit 를 이용해서 daily 로 양쪽 다
log-index-YYYY.MM.DD
패턴으로 index 를 생성하는데, 00시 기준 처음 들어온 raw_data 기준으로 새로운 index 가 생성된다. es(elasticsearch) 는 새로 들어온 데이터를 기준으로 template 에 정의된 mapping을 따르고, 나머지 필드에 대해서는 dynamic mapping 이 된다. - 매일 생성된 index 가 3달치 가까이 쌓여있고, 이를 일정 주기마다 지우려고 한다.
progress
opendistro
ilm creation
- ilm 은
hot
,warm
,delete
3가지 state 를 가질 수 있는, FSM(finite state machine) 형태로 정의할수있다. - data access 를 효율적으로 하기위해
"hot"
/"warm"
등으로 분리하려는 의도보다는 생성된지 30일(임의 설정 값)이 지난 index 들을 delete 하기 위한 의도로 사용하는것이라 아래와 같이 state 를"hot"
,"delete"
만 정의하였다.
policy 생성 json: IM 이라고 적힌 index management 라는 화면에서 gui 를 이용해서 직접 생성했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"policy": {
"description": "delete an index after 30 days",
"default_state": "hot",
"schema_version": 1,
"states": [{
"name": "hot",
"actions": [],
"transitions": [{
"state_name": "delete",
"conditions": {
"min_index_age": "30d"
}
}]
},
{
"name": "delete",
"actions": [{
"delete": {}
}]
}]
}
}
- 내용추가: elasticsearch doc 에 관련 내용을 검색해보면 이 es doc 링크가 나온다. 하지만, 이 기능은 x-pack 기능이고, opendistro 에서는 REST API 경로가 다르다. opendistro doc 링크에 따르면 es 는
PUT _ilm/policy/<policy_id>
, opendistro 는PUT _opendistro/_ism/policies/<policy_id>
로 다르다. opendistro 에서 es 경로처럼 호출하면, 401(Unauthorized
) error 가 발생하는데, permission 을 잘못준 건 분명 아니고, 경로가 잘못됐기 때문이다.
dev tools 를 이용해서 GET _opendistro/_ism/policies/<policy_id>
해보면 아래와 같이 잘 만들어진 policy 를 확인해볼 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
{
"_id" : "delete-index-after-30d",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"policy" : {
"policy_id" : "delete-index-after-30d",
"description" : "delete an index after 30 days",
"last_updated_time" : 1607917600048,
"schema_version" : 1,
"error_notification" : null,
"default_state" : "hot",
"states" : [
{
"name" : "hot",
"actions" : [ ],
"transitions" : [
{
"state_name" : "delete",
"conditions" : {
"min_index_age" : "30d"
}
}
]
},
{
"name" : "delete",
"actions" : [
{
"delete" : { }
}
],
"transitions" : [ ]
}
]
}
}
template 에 ilm 적용
- 아래 settings 를 그대로 PUT 하면 안되고, 미리 생성했던 template 내용을 포함시켜서 execute 한다. (patch 가 아닌 overwrite 개념으로 동작한다)
1
2
3
4
5
6
7
PUT _template/your-index
{
"index_patterns": ["your-index-*"],
"settings": {
"opendistro.index_state_management.policy_id": "newly-created-ilm-policy-name"
}
}
- 내일 00시 기준 새로 생성될 index 는 위의 policy 가 적용될것이다.
미리 생성된 index 에 policy 적용
미리 생성된 index 는 policy 가 적용되어있지 않고, checkbox 선택 후, 직접 index policy 적용이 필요하다.
적용 전 (Managed by Policy 값이 No 이다)
- 적용 후 (Managed by Policy 값이 Yes 이다)
hot -> delete
transition 이 일어난 index (State 가delete
로 변경됐다, 이후 제거됐다)
kibana
ilm creation
- opendistro 와는 다르게
settings
>Elasticsearch
>Index Lifecycle Policies
menu 에 web-console 이 제공됨 - opendistro 와 다르게 Hot, Warm, Cold, Delete phase 이렇게 4가지 (opendistro 에
Cold
는 없었다) 가 존재한다. 역시나 Delete 만 사용하고 싶어서,30 days from index creation
을 설정하였다.
template 에 ilm 적용
- UI 가 다소 이질적이었는데,
Index Lifecycle Policies
에서 방금 생성한 policy 우측에Actions
>Add policy to index template
를 통해 적용한다. Index template 에 apply policy 할 줄 알았는데, 접근방식이 반대였다.
미리 생성된 index 에 policy 적용
- 이것도 특이했는데, 기존에 생성된 indices 에 한꺼번에 적용은 불가능했고, checkbox 1개씩 선택해서 따로따로 적용만 가능했다.
checkbox
>Manage index
클릭 >Add lifecycle policy
적용하면 바로 1달 지난 index 에 대해서는delete
phase 로 즉시 변했다.
references
elastic
vsaws
전쟁의 서막
- https://www.elastic.co/kr/blog/on-open-distros-open-source-and-building-a-company
- https://aws.amazon.com/ko/blogs/korea/keeping-open-source-open-open-distro-for-elasticsearch/
template 레벨에 ilm 적용 설정
- https://discuss.opendistrocommunity.dev/t/can-you-automatically-manage-indices/2034
ism example policy
- https://opendistro.github.io/for-elasticsearch-docs/docs/ism/policies/#example-policy
This post is licensed under CC BY 4.0 by the author.
Comments powered by Disqus.