본문 바로가기
Elasticsearch

ES curator 인덱스 관리 보완

by eden.do 2022. 9. 22.

인덱스 관리 보완 배경

ES 반납된 클러스터들을 정리하면서 전체적으로 인덱스 삭제가 제대로 되는지 확인해보았습니다. 인덱스 삭제가 제대로 진행되지 않은 클러스터들이 있었고 이유를 확인해보니 생성한 인덱스의 날짜 형식이 curator의 action_config에 정의된 timestring 형식과 다르기 때문이었습니다. curator는 삭제, 이동 등의 action을 action_config 파일에 정의를 하는데 현재 curator에서 관리하는 인덱스는 아래와 같은 형식으로 정의되어 있습니다. 

filters:
- filtertype: pattern  #별 다른 요청이 없으면 kibana-2021.11.22 이런 형식의 모든 인덱스를 unit_count에 설정할 날짜 기준으로 관리를 합니다.
  kind: prefix
  value: '^[a-z].*-'
  exclude:
- filtertype: age
  source: name
  direction: older
  timestring: '%Y.%m.%d'  #이 timestring을 time으로 환산하여 인덱스를 관리합니다.
  unit: days
  unit_count: $unit_count
  exclude:
 

하지만, 저장되고 있는 인덱스는 %Y.%m.%d / %Y%m%d / %Y-%m-%d 등 다양한 날짜 형식으로 지정되어 있었습니다. 

예를 들면.. 아래와 같이 %Y.%m.%d / %Y%m%d 로 구성한 경우..

green  open   k8s-pod-prod-2022.08.18             z6w0_PwIQ1S6IjsA4L8W8Q  10   1     630059            0    531.1mb        265.4mb
green  open   k8s-pod-prod-2022.08.19             HEUy8cN1SYC2wUeuPetODA  10   1     558301            0      449mb        224.6mb
green  open   k8s-pod-prod-2022.08.16             ZoyH9HoIRP6LK-4fIAM2SA  10   1     546480            0    467.7mb        233.5mb
green  open   eden-prod-1-20220531   Pl3kJi_NSmWSWigEU0EFbQ  10   1       1673            0     15.7mb          7.8mb
green  open   k8s-pod-prod-2022.08.17             1M69qMeQRVadvXww778UAQ  10   1     681887            0      509mb          256mb
green  open  eden-prod-1-20220530   DRq2hBHcRRaP1-2cuCrAfg  10   1       1124            0     11.8mb          5.9mb
green  open   k8s-pod-prod-2022.08.15             berDJh8jS120CcBmIDMwrA  10   1     493365            0    411.1mb        205.4mb
green  open  eden-prod-1-20220414   JUnMXKXWRTmzNM2he-44jw  10   1       1340            0     20.9mb         10.4mb
green  open  eden-prod-1-20220415   5ffH1FX2Qgyzb1IWmK9CGA  10   1       2657            0       19mb          9.5mb
green  open  eden-prod-1-20220413   W4KTn0QMTiCgXMIIjXFJdA  10   1        771            0     15.4mb          7.7mb
green  open  eden-prod-1-20220418   yjQOe8PJToaK-NrYQSpMCw  10   1       2213            0     21.1mb         10.6mb
green  open  eden-prod-1-20220419   KjwD36IqT-qXi4J4sOyeFQ  10   1       1070            0       21mb         10.5mb
green  open  eden-prod-1-20220416   djrg81AlSWGRORnRBJMI0Q  10   1        350            0      3.8mb          1.9mb
 

ES 클러스터 구성시 전체 용량을 산정할 때 인덱스 보관주기도 함께 고려하여 용량을 산정합니다. 하지만, 지금처럼 curator가 동작하더라도 인덱스가 관리되지 않으면 현재는 문제가 없더라도 추후에는 데이터들이 전체 용량을 초과하는 문제가 발생할 수 있다고 판단하여 action_config 파일을 보완하였습니다. 

인덱스 관리 보완 방안

아래와 같이 curator_auto.sh 을 수정하였습니다. 

#!/bin/bash
escluster="eden-test-es"
url=$escluster".k9etool.io"
unit_count="30"

...

touch /home/eden/curator/action_config/$escluster"-action.yml"
cat <<EOF > /home/eden/curator/action_config/$escluster"-action.yml"
actions:
  1:
    action: delete_indices
    options:
      ignore_empty_list: True
      timeout_override:
      continue_if_exception: False
      disable_action: False
    filters:
    - filtertype: pattern
      kind: prefix
      value: '^[a-z].*-'
      exclude:
    - filtertype: age
      source: name
      direction: older
      timestring: '%Y.%m.%d'
      unit: days
      unit_count: $unit_count
      exclude:
  2:    ## 추가 부분
    action: delete_indices
    options:
      ignore_empty_list: True
      timeout_override:
      continue_if_exception: False
      disable_action: False
    filters:
    - filtertype: pattern
      kind: prefix
      value: '^[a-z].*-'
      exclude:
    - filtertype: age
      source: creation_date ## creation_date를 기준으로 인덱스 삭제
      direction: older
      unit: days
      unit_count: $unit_count
      exclude:
EOF

echo "0 5 * * * /home/eden/curator/scrtips/$escluster".sh" >> /home/eden/curator/log/$escluster".log"" >> /var/spool/cron/root
/home/eden/curator/scrtips/$escluster".sh" >> /home/eden/curator/log/$escluster".log""
 

2. 로 추가된 것처럼 creation_date를 기준으로 인덱스를 삭제하는 부분을 추가하였습니다. 

creation_date는 인덱스가 생성된 날짜이고, 1번에 설정된 %Y.%m.%d 형식으로 지정하지 않은 인덱스들 중에 creation_date가 삭제될 날짜에 해당되는 인덱스들은 삭제하도록 처리하였습니다. 

기존 날짜 기반으로 삭제하던 부분을 그대로 둔 이유는 creation_date는 인덱스 생성 날짜인데, reindexing을 하게 되면 creation_date가 reindexing한 날짜로 업데이트되어 내부 document는 예전 데이터여도 삭제가 되지 않을 수 있어서 그대로 두었습니다. 

인덱스를 조회하면 아래와 같이 인덱스와 생성일자를 확인할 수 있습니다.

[eden@kep-cloudeng-mgmt1 curator]$ curl http://waas-prod-es.k9etool.io:9200/_cat/indices?h=i,creation.date.string
eden-cbt-20211209      2021-12-09T00:11:07.073Z
eden-prod-2-20220527   2022-05-27T00:04:57.054Z
 

 

dry-run으로 삭제될 인덱스 테스트 하였습니다. 

2022-09-14 13:52:47,409 INFO      Preparing Action ID: 1, "delete_indices"
2022-09-14 13:52:47,409 INFO      Creating client object and testing connection
2022-09-14 13:52:47,411 INFO      Instantiating client object
2022-09-14 13:52:47,411 INFO      Testing client connectivity
2022-09-14 13:52:47,414 INFO      Successfully created Elasticsearch client object with provided settings
2022-09-14 13:52:47,416 INFO      Trying Action ID: 1, "delete_indices": No description given
2022-09-14 13:52:48,100 INFO      DRY-RUN MODE.  No changes will be made.
2022-09-14 13:52:48,100 INFO      (CLOSED) indices may be shown that may not be acted on by action "delete_indices".
2022-09-14 13:52:48,100 INFO      DRY-RUN: delete_indices: k8s-pod-cbt-2022.08.15 with arguments: {}
2022-09-14 13:52:48,100 INFO      DRY-RUN: delete_indices: k8s-pod-prod-2022.08.15 with arguments: {}
2022-09-14 13:52:48,101 INFO      Action ID: 1, "delete_indices" completed.
2022-09-14 13:52:48,101 INFO      Preparing Action ID: 2, "delete_indices"
2022-09-14 13:52:48,101 INFO      Creating client object and testing connection
2022-09-14 13:52:48,101 INFO      Instantiating client object
2022-09-14 13:52:48,101 INFO      Testing client connectivity
2022-09-14 13:52:48,105 INFO      Successfully created Elasticsearch client object with provided settings
2022-09-14 13:52:48,107 INFO      Trying Action ID: 2, "delete_indices": No description given
2022-09-14 13:52:48,857 INFO      DRY-RUN MODE.  No changes will be made.
2022-09-14 13:52:48,857 INFO      (CLOSED) indices may be shown that may not be acted on by action "delete_indices".
2022-09-14 13:52:48,861 INFO      DRY-RUN: delete_indices: eden-cbt-20211019 with arguments: {}
2022-09-14 13:52:48,861 INFO      DRY-RUN: delete_indices: eden-cbt-20211022 with arguments: {}
2022-09-14 13:52:48,895 INFO      Action ID: 2, "delete_indices" completed.

 

[참고] elastic.co/guide/en/elasticsearch/client/curator/current/fe_source.html

 

'Elasticsearch' 카테고리의 다른 글

ES 공부 자료  (1) 2022.09.22
ES rolling restart (vm 정지 & 시작)  (0) 2022.09.22
Elasticsearch 클러스터 반납 ansible 코드 작성  (0) 2022.08.28
elasticsearch health down  (0) 2022.08.16
Elasticsearch의 index, shard, replica  (0) 2022.08.12