2025. 2. 13. 23:15ㆍDevops/ELK
예전 프로젝트에서 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도 똑같이 지정을 해주면 된다.
'Devops > ELK' 카테고리의 다른 글
| [Filebeat] 전처리(processor)를 통한 ansi 코드 삭제 (1) | 2025.02.14 |
|---|---|
| [Logstash] Pipeline to Pipeline (0) | 2025.02.14 |