본문 바로가기

Monitoring Tools/ELK Stack

[elasticsearch] Data Stream에 ILM(Index Lifecycle Management) 적용시켜 보기

반응형

관련글은 아래 링크를 참조 하도록 한다.

 

 

Data Stream의 간단한 지식


Elasticsearch에서는 Data Stream은 시계열 데이터를 색인하고 관리하는데 적합하다고 설명한다. Data Stream은 1개 이상의 숨겨진 index로 구성된다. 숨겨진 index를 backing index라고 하며 색인이나 검색을 Data Stream을 통해 요청하면 Data Stream에서 backing index으로 라우팅(아래 그림 참조)하여 처리한다. 즉, Data Stream은 backing index의 집합이며 alias를 할당 할 필요없이 Data Stream에서 알아서 처리하기 때문에 Data Stream으로만 요청을 보내면 된다.

 

backing index의 관리는 ILM을 통하여 자동화 할 수 있다. alias를 설정하지 않아도 ILM 정책에 충족되면 알아서 확장하거나 삭제한다.

참조 : https://www.elastic.co/guide/en/elasticsearch/reference/current/data-streams.html

Logstash를 통해 데이터를 수집하고 Elasticsearch(이하 ES) Data stream을 통해 색인하는 설정을 해보려고 한다.

 

 

환경 구성


환경 구성은 이전글과 동일하다.

  • CentOS Stream release 8
  • elasticsearch, logstash, kibana 버전 : 8.14.3
  • 총 4개의 node로 이루어진 cluster
  • 2개의 hot node, 2개의 warm node
  • ES node :
    • test-ES01 : 172.16.10.111
      • node name : es-node01
      • node role : data_hot
    • test-ES02 : 172.16.10.112
      • node name : es-node02
      • node role : data_hot
    • test-ES03 : 172.16.10.113
      • node name : es-node03
      • node role : data_warm
    • test-ES04 : 172.16.10.114
      • node name : es-node04
      • node role : data_warm
      • 그밖에 : kibana, logstash 
test-ES01은 host의 hostname이며 es-node01은 ES 의 node name 이다

 

역할 별 node는 최소 2개의 node로 구성해야 한다. 

 

 

 

ILM 정책 설정


"test-ilm" 이라는 이름으로 ILM 정책을 설정한다.

  • Hot Phase : 최대 document 10,000개를 기준으로 roll over 한다.
  • Warm Phase : Hot Phase에서 roll over후 3분이 경과 하면 Warm Phase로 진입하며 data_warm node로 migrate 한다. 이때 replica는 0개, shard는 1개로 축소한다.
PUT _ilm/policy/test-ilm

{
  "policy": {
    "phases": {
      "hot": {
        "min_age": "0ms",
        "actions": {
          "set_priority": {
            "priority": 100
          },
          "rollover": {
            "max_docs": 10000
          }
        }
      },
      "warm": {
        "min_age": "3m",
        "actions": {
          "set_priority": {
            "priority": 50
          },
          "shrink": {
            "number_of_shards": 1,
            "allow_write_after_shrink": false
          },
          "allocate": {
            "number_of_replicas": 0
          }
        }
      }
    }
  }
}

 

 

 

Index Template


자주 사용하는 template 설정을 컴포넌트 템플릿으로 작성해두고 index template을 만들때 적용하면 편리하다.

 

component template 설정

ilm 정책을 적용하고 shard와 replica, 그리고 index segment refresh interval 등을 설정한다.

PUT _component_template/test-settings
{
  "template": {
    "settings": {
      "index.lifecycle.name": "test-ilm",
      "number_of_shards": "2",
      "number_of_replicas": "1",
      "refresh_interval": "5s"
    }
  }
}

 

index template 설정

PUT _index_template/test-tmpl
{
  "index_patterns": ["my-index*"],
  "priority": 300,
  "data_stream": {},
  "composed_of": ["test-settings"]
}

 

 

 

Data Stream 만들기


"my-index-plo" 라는 Data Stream을 만든다.

Data Stream을 Logstash에서 옵션을 통해 자동생성되게 할 수 있다. 이 방법은 아래 Logstash 부분 설정시에 참고로 설명 할 예정이다.

PUT _data_stream/my-index-plo

 

 

 

Logstash 설정


elasticsearch {
	hosts => ["http://test-ES01:9200","http://test-ES02:9200","http://test-ES03:9200"]
	user => "logstash_writer"
	password => "[패스워드]"
	index => "my-index-plo"
	action => "create"
}

 

(참고)ES에서 Data Stream을 만들지 않고 Logstash에서 만들 수 있는 방법이 있다.

elasticsearch {
	hosts => ["http://test-ES01:9200","http://test-ES02:9200","http://test-ES03:9200"]
	user => "logstash_writer"
	password => "[패스워드]"
	data_stream => "true"
	data_stream_type => "logs"
	data_stream_dataset => "my-index-plo"
	data_stream_namespace => "mlk"
}
  • data_stream_type : Data Stream의 유형으로 logs, metrics, synthetics, traces 만 지원된다.
  • data_stream_dataset : (default generic) Data Stream을 만들때 사용된다.
  • data_stream_namespace : (default default) Data Stream을 만들때 사용된다.

Data Stream 이름은 {data_stream_type}-{data_stream_dataset}-{data_stream_namespace} 으로 결정된다.

따라서 Index Template에서 index pattern을 위 형식에 맞게 수정하거나 추가해주어야 한다.

참조 : https://www.elastic.co/guide/en/logstash/7.17/plugins-outputs-elasticsearch.html#plugins-outputs-elasticsearch-data-streams

 

반응형