1.

하루에 대략 20기가의 메트릭 정보가 쌓이고 있다. 그런데~~ ILM이 설정되어 있지 않았다.
[깨끗한 설정값을 보라..]
GET metricbeat-*/_settings?filter_path=**.index.lifecycle*
응답
{}
현재 ES 버전을 확인해보면
GET /
응답
{
"name" : "data-es-coordination",
"cluster_name" : "data-es-cluster",
...........................
"version" : {
"number" : "7.10.2",
..................
},
"tagline" : "You Know, for Search"
}
지금 ES 버전이 7.10.2이기 때문에, ILM(라이프사이클 정책) 과 rollover(인덱스 전환) 은 별도로 직접 설정해줘야 한다.
데이터 스트림(Data Stream) 기능이 도입되기 직전 버전으로 (8.x부터는 자동으로 ILM + rollover가 통합됨) matric에 대한 ILM과 rollover를 설정하려 한다.
ILM(Index Lifecycle Management) = 인덱스의 생애주기를 관리하는 정책
Rollover = 쓰기 중인 인덱스를 교체
구분 ILM (정책) Rollover (행위)
| ILM (정책) | Rollover (액션) | |
| 개념 | 인덱스 생애주기를 정의한 '정책' | 현재 쓰기 인덱스를 새 인덱스로 교체하는 '액션' |
| 예시 | “30일 지나면 rollover, 90일 지나면 delete” | 실제로 metricbeat-000001 → metricbeat-000002로 바꿈 |
| 주체 | Elasticsearch의 Lifecycle Engine | ILM 정책 내에서 수행됨 |
| 트리거 | 시간, 인덱스 크기, 문서 수 등 조건 | 조건이 만족되면 자동 실행 |
| 결과 | hot → warm → delete 등 단계 이동 | 새 인덱스 생성 + alias 이동 |
2.
먼저 해당 인덱스를 읽기전용으로 바꿔준다. (계속 데이터가 들어오면 설정이 안된다)
PUT metricbeat-7.10.2/_settings
{ "settings": { "index.blocks.write": true } }
응답
{
"acknowledged" : true
}
3.
해당 인덱스를 다른 이름으로 복사한다 (clone)
POST metricbeat-7.10.2/_clone/metricbeat-7.10.2-000001
응답
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "metricbeat-7.10.2-000001"
}
4.
index lifecycle policles 생성 (name : metricbeat로 생성)


4.
alias 지정
PUT metricbeat-7.10.2-000001/_settings
{
"index.lifecycle.name": "metricbeat",
"index.lifecycle.rollover_alias": "metricbeat-7.10.2"
}
응답
{
"acknowledged" : true
}
5.
다시 쓰기 모드로 변경
PUT metricbeat-7.10.2/_settings
{ "settings": { "index.blocks.write": false } }
응답
{
"acknowledged" : true
}
6.
기존 인덱스 삭제 (이제 ILM과 rollover 적용된 인덱스가 생성됨)
DELETE metricbeat-7.10.2
응답
{
"acknowledged" : true
}
7.
다시 해당 인덱스의 셋팅을 확인해보면 ILM과 rollover 설정을 볼수 있다.
GET metricbeat-*/_settings?filter_path=**.index.lifecycle*
응답
{
".ds-metricbeat-8.14.3-000071" : {
"settings" : {
"index" : {
"lifecycle" : {
"name" : "metricbeat",
"indexing_complete" : "true"
}
}
}
},
"metricbeat-7.10.2-2025.11.05-000001" : {
"settings" : {
"index" : {
"lifecycle" : {
"name" : "metricbeat",
"rollover_alias" : "metricbeat-7.10.2"
}
}
}
},
".ds-metricbeat-8.14.3-000072" : {
"settings" : {
"index" : {
"lifecycle" : {
"name" : "metricbeat"
}
}
}
}
}
번외
설정을 완료했는데, 다음과 같이 에러가 발생했다면
Index lifecycle error
illegal_argument_exception: index.lifecycle.rollover_alias [metricbeat-7.10.2] does not point to index [metricbeat-7.10.2-000001]
먼저 해당 인덱스의 alias를 확인해보자
GET /_alias/metricbeat-7.10.2
응답
{
"error" : "alias [metricbeat-7.10.2] missing",
"status" : 404
}
기존 인덱스를 삭제하고 (이미 clone했기 때문에 데이터는 남아잇음)
DELETE metricbeat-7.10.2
alias 재생성
POST /_aliases
{
"actions": [
{
"add": {
"index": "metricbeat-7.10.2-000001",
"alias": "metricbeat-7.10.2",
"is_write_index": true
}
}
]
}
혹시 alias 생성시 에러가 난다면 아마도 이름이 중복되어 생성이 불가능한 경우다.
ilm의 이름을 변경하거나 새롭게 생성한다면 정상적으로 동작한다. (아래와 같이 alias를 metricbeat-7.10.2-alias 로 변경해보았다.)
정상적으로 셋팅되었다면 키바나의 index management에서 해당 Index를 검색해보면 셋팅된 값을 볼수 있다 .

끝
'Database > elastic search' 카테고리의 다른 글
| Elasticsearch 노드 간 디스크 불균형 문제 (0) | 2025.11.27 |
|---|---|
| [es] monitoring 설정 (0) | 2025.11.07 |
| elastic search ingest (0) | 2025.09.02 |
| illegal argument exception (1) | 2025.07.25 |
| es 칼럼 limit 변경하기 [Limit of total fields [1000] has been exceeded] (0) | 2025.06.30 |