공부/EFK

Fluentd Index Template 생성 및 ILM 자동 적용

토고미 2021. 6. 25. 17:37

ILM 자체는 인덱스 생명 주기를 자동으로 관리해주지만, ILM 적용을 매번 수동으로 한다면 아이러니한 일 아닌가?

그래서 인덱스가 생성될 때, 자동으로 ILM policy를 적용시키는 방법이 필요했다.

 

그러기 위해 있는 것이 index template 이란 것이다.

index template은 새로운 index가 생성될 때, 그 index에 대한 설정 값들을 미리 만들어두는 것이다.

자세한 설명과 예시는 아래 링크에서 다른 분이 정리한 것을 참고바란다.

https://oboki.net/workspace/data-engineering/elasticsearch/elasticsearch-index-template/

 

[ElasticSearch] Index Template – oboki

 

oboki.net

 

내 목표는 다음과 같다.

일별로 생성되는 인덱스에 대해서, 자동적으로 7일 후에 삭제 되는 ILM policy를 적용시키는 것이다.

참고로 7일 후에 삭제 되는 ILM policy는 자동으로 생성되는 watch-history-ilm-policy를 사용하였다.

 

방법은 간단하다.

index template을 이용해서, 특정 index가 생성될 때 watch-history-ilm-policy가 적용되도록 하면 된다.

fluentd의 설정값만 바꿔주면 된다.

 

1. index-template.json 파일 추가

index_template.json: |-
  {
    "index_patterns": [
      "logstash-*"
    ],
    "settings": {
      "index": {
        "lifecycle": {
          "name": "watch-history-ilm-policy",
          "rollover_alias": ""
        }
      }
    }
  }

index_patterns에는 적용시킬 인덱스 이름을 넣고

settings.index.lifecycle.name에 적용시킬 ILM policy 이름을 넣어주면 된다.

2. kubernetes.conf 설정 추가

kubernetes.conf: |-
  <match fluent.**>
    ...
      enable_ilm true
      #ilm_policy_id watch-history-ilm-policy
      #ilm_policy_overwrite false
      #ilm_policy {}
      #rollover_index true
      template_name delete-after-7days
      template_file /fluentd/etc/index_template.json
    ...
  </match>
  
  ...

나처럼 하는 경우엔 주석처리 부분은 제외하고 적으면 된다.

위에서 작성한 index-template.json을 마운트한 경로로 template_file의 값을 주자.

 

만약 직접 ILM policy를 정의하고 싶다면 주석처리 부분을 풀고 ilm_policy에 직접 그 규칙을 적어주면 된다.

 

이렇게만 설정해주고 적용하면 끝이다!

 

나는 두 파일을 같은 configmap으로 정의했다.

하나의 configmap으로 두 개의 파일을 마운트하는 방법은 아래 글을 참고바란다.

https://togomi.tistory.com/22

 

Mount multiple files with one configmap

k8s에서 하나의 configmap을 이용하여 여러 개의 파일을 마운트하는 법을 알아보자. 아래와 같이 하나의 configmap에서 여러 개의 파일을 만들 수 있다. 이해를 위해 파일이라고 했지만, 사실은 key-value

togomi.tistory.com

 

참고로 kubernetes.conf의 마운트 경로는 /fluentd/etc/kubernetes.conf 이다.