[ElasticSearch] Index에 Date math Name Alias Rollover 사용해보기

2025. 2. 13. 23:15Devops/ELK

728x90
반응형

예전 프로젝트에서 Index를 Rollover를 할경우 ILM이 잘 적용이 안되었던적이 있었다.. 그 이유는 Index의 alias를 잘 찾지못하였던문제인데.. 이문제를 해결하기 위해 date-math-index-names라는 부분을 사용한 방법을 하여 해결한부분을 적어보고자 한다.

0. URI Encoded

먼저 date-math-index-names를 적용하기 위해선 URI encoded를 규칙을 알아야한다.

해당 규칙대로 Index를 생성시 alias가 자동적으로 URI encode를 활용하기때문이다. 일단 참고만 하고 아래의 내용을 보게 되면 해당 부분을 어떻게 사용하는지 알수있을것이다.

  • 특수문자 인코딩
< %3C
> %3E
/ %2F
{ %7B
} %7D
| %7C
+ %2B
: %3A
, %2C
  • output할경우 rollover_alias의 패턴을 Date지정하는 방법
<logstash-{now/d}> logstash-2024.03.22
<logstash-{now/M}> logstash-2024.03.01
<logstash-{now/M{yyyy.MM}}> logstash-2024.03
<logstash-{now/M-1M{yyyy.MM}}> logstash-2024.02
<logstash-{now/d{yyyy.MM.dd|+12:00}}> logstash-2024.03.23

1. Index Template 만들기

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"
      }
    }
  }
}

먼저 인덱스를 생성하기 위해 주기적으로 만들어주기 위한 Template를 정의한다.

인덱스는 my-log-년.월.일-00001 포멧으로 만들기 위한 템플릿이다.

아직은 년.월.일-00001을 설정하진 않았다. 해당부분은 URI인코딩으로 해줄예정이다.

아래 코드에서는 중요한 부분은 parse_origination_date을 true로 해줘야한다는 점이다.

2. Index 만들기

# /my-log-2023.01.21-00001 Index 생성
PUT /%3Cmy-log-%7Bnow%2Fd%7D-000001%3E
{
  "aliases": {
    "my-log": { "is_write_index": true } 
  }
}

# /my-log-2023.01.01-00001 Index 생성
PUT /%3Cmy-log-%7Bnow%2FM%7D-000001%3E
{
  "aliases": {
    "my-log": { "is_write_index": true } 
  }
}

data-math-index-names 적용을 위해 최초는 Index를 생성해줘야한다.

처음 Index는 생성날짜 기준으로 Index가 생성된다.

두번째 Index 생성방법은 1월 1일이든 5일이든 10일이든 간에 무조건 해당 월의 1일로 설정해서 생성된다.

이방법은 output할경우 rollover_alias의 패턴을 Date 을 지정하는 방법이다. (위에참고)

번외. logstash에도 적용해보기

output {
    elasticsearch {
    hosts => ["elastic주소"]
    ilm_enable => true
    ilm_policy => "my-log-ilm"
    ilm_rollover_alias => "my-log"
    }
}

만약에 logstash을 통해 데이터를 넣으려고 한다면 output 설정도 해야한다.

이와 같이 output에는 rollover_alias는 my-log로 지정해주고 ilm_policy도 똑같이 지정을 해주면 된다.

728x90
반응형

'Devops > ELK' 카테고리의 다른 글

[Filebeat] 전처리(processor)를 통한 ansi 코드 삭제  (1) 2025.02.14
[Logstash] Pipeline to Pipeline  (0) 2025.02.14