ELK에서 그리고 Kibana로 쉽게 ILM 적용하기

Elastic Search, Logstash, Kibana를 로그 수집기로 사용하다가 이전부터 적용하려고 하였지만, 시간이 없어서… 라는 핑계로 계속 미루다가 오늘 적용을 수행하였다.

ILM 적용이라고 구글에 검색만해도 수 많은 글이 나온다. REST API를 사용해서 적용하는 방법이 주를 이루기는 하지만, 상당히 많은 시행착오를 겪었다.

시행착오를 겪었던 이유는 아마도 내가 생각하기에 가장 큰 착각 하나에서 시작된 것 같다.

Lifecycle 규칙을 만들고, 템플릿만 만들면 끝나지 않을까?

그래서 Kibana에서 쉽게 적용하는 방법을 설명하고자 한다. 물론… Logstash는 CLI로 이동해야 한다.

1. Lifecycle 규칙 생성

이건 사실 설명할 필요조차 없을 정도로 편리하게 Lifecycle 규칙을 생성할 수 있다.

Kibana에서
"Stack Management" -> "Data" -> "Index Lifecycle Policies" 로 이동 후,
우측 상단 "Create Policy" 클릭

그러면 위와 같은 화면이 뜨게 되고… 뭐… 그다음에는 설명이 잘 되어 있으므로 클릭, 입력, 클릭, 입력을 반복하면 된다. 예를 들어 “TEST-POLICY”라고 이름을 정하고 Hot Phase에서 30일 후, 삭제 같은 경우에는

위와 같이 입력해주면 끝난다. 그리고 저장하면 끝이다. 혹, “REST API를 이용해서 전송은 어떻게 할까?” 라는 궁금증이 생긴다면 최하단 우측에 “Show request”를 클릭하면 볼 수 있으니 참고하길 바란다. TEST-POLICY 같은 경우에는

PUT _ilm/policy/TEST-POLICY
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_age": "30d",
            "max_primary_shard_size": "50gb"
          },
          "set_priority": {
            "priority": 100
          }
        },
        "min_age": "0ms"
      },
      "delete": {
        "min_age": "30d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

라고 나타났다. 참 쉽다.

2. Index Template 생성

Index Template 같은 경우에도 쉽게 생성할 수 있다.

Kibana에서
"Stack Management" -> "Data" -> "Index Management" -> "Index Templates" 로 이동 후,
우측 상단 "Create template" 클릭

그러면 위와 같은 템플릿 생성창이 뜨고, 이름과 인덱스 패턴을 입력하고 다음을 누르면 된다. 주의해야 할 사항은 인덱스 패턴인데, 해당 인덱스 패턴은 데이터 입력, ILM 동작시 모두 중요한 역할을 하게 된다.

위와 같은 경우일 경우, 데이터를 입력할 때도 인덱스 이름은 “test-“로 시작해야 하고, ILM 동작을 위해서도 해당 인덱스는 “test-“로 시작하는 이름을 가지고 있어야 한다.

이름과 인덱스 패턴을 입력하였으면 다음을 누른다. 다음은 “Component templates”를 설정하는 부분이다. 이 부분은 지금은 필요 없으니 다음을 누른다. 그러면 “Index settings”가 나오게 된다. 여기가 중요한 부분인데, 여기서 Lifecycle에 대한 설정을 해야한다.

위의 화면을 보면, “index” 아래에 여러 옵션이 있는데 “number_of_shards”나 “number_of_replicas”의 경우에는 데이터의 종류, 사이즈에 따라 설정하면 되고 ILM 적용을 위해서는 “lifecycle” 부분이 중요하다.

먼저, “name”에는 목차 1에서 생성한 Lifecycle의 이름을 적어준다. 그리고, rollover_alias의 경우에는 템플릿 생성 제일 처음에 선언한 인덱스 패턴에 맞게 “test”라고 적어준다.

rollover_alias의 경우 뒤에 “Aliases setting” 값에 따라 여러 방면으로 활용할 수 있지만 이 글에서는 심플하게 적용하는 것이 목적이므로 그냥 인덱스 패턴에 맞게 적어준다.

그 외의 옵션은 취향대로 설정하면 된다.

{
  "index": {
    "lifecycle": {
      "name": "TEST-POLICY",
      "parse_origination_date": "true",
      "rollover_alias": "test"
    },
    "number_of_shards": "2",
    "number_of_replicas": "2"
  }
}

그리고 다음을 클릭, Mapping 부분은 데이터 형태에 따르므로 여기서는 생략한다. Aliases 역시 다 생략하고 마지막에 “Create template”을 눌러 템플릿을 생성한다.

여기까지가 Kibana에서 가능한 부분이다. 다음은 Logstash 설정을 위하여 CLI로 접속한다.

3. Logstash ElasticSearch Output 설정

먼저 기존에 사용하던 Logstash 설정 파일을 열어 output 부분을 보면 대부분 아래와 비슷하게 설정되어 있을 것이다.

output {
  elasticsearch {
    hosts => "[호스트 이름]"
    user => "[사용자 이름]"
    password => "[패스워드]"
    index => "test-%{+YYYY.MM.dd}"
  }
}

물론 ssl 적용이라던가, 다른 옵션에 의해 추가되는 부분도 있을 것이고 index 패턴도 다를 수 있다. 하지만 중요한 것은 index 부분이다. 먼저 해당 index 부분을 삭제하고, 아래와 같이 ilm 적용 옵션을 넣어준다.

output {
  elasticsearch {
    hosts => "[호스트 이름]"
    user => "[사용자 이름]"
    password => "[패스워드]"
    ilm_enabled => true
    ilm_rollover_alias => "test"
    ilm_policy => "TEST-POLICY"
  }
}

요렇게 설정하고 재시작… 하면, 끝. 이후 데이터가 입력되면

test-2022.09.01-000001
test-2022.09.01-000002
test-2022.09.02-000001

이런식으로 생성되는 것을 확인할 수 있을 것이다. 위의 패턴은 “ilm_pattern” 기본값이 “{now/d}-000001″로 설정되어 있어서 그런데, 만약 날짜를 생략하고 싶다면..

output {
  elasticsearch {
    hosts => "[호스트 이름]"
    user => "[사용자 이름]"
    password => "[패스워드]"
    ilm_enabled => true
    ilm_rollover_alias => "test"
    ilm_policy => "TEST-POLICY"
    ilm_pattern => "000001"
  }
}

로 설정하면

test-000001
test-000002
test-000003
test-000004

위와 같이 생성되는 것을 확인할 수 있다.

ELK를 사용한지 6달 정도 되었는데 실사용은 아마 한달정도 였을 것이다. 그래서 틀린 것도 있을 수 있지만 ILM 적용을 위해서 삽질하다보니 쉽게 설명되어 있는 내용이 없어서 삽질을 바탕으로 정리해본다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다