본문 바로가기

ELK

[ES] 도커를 이용해 인덱스 주기적으로 삭제하기

로그를 끊임없이 ES에 저장하다보면 디스크 용량이 부족한 문제가 발생한다.
수동으로 인덱스를 삭제하다보면 단순히 번거로울 뿐만이 아니라 삭제하지 않으려고 했던 인덱스도 삭제될 수 있기 때문에,

삭제 자동화는 ES 운영에 반드시 필요하다.


curator는 elasticsearch의 인덱스를 관리를 위한 어플리케이션으로, ES와 격리된 환경에서 http 통신으로 동작이 가능하다.

여기에는 인덱스 삭제만 나와있지만, 샤드의 삭제나 엘라스틱서치의 스냅샷 삭제, 샤드 라우팅 변경도 가능하다.

 

나의 경우 curator를 세팅할 서버는 폐쇄된 환경이었기 때문에,

로컬에서 curator 공식사이트의 dockerfile을 받아 이미지를 빌드한 다음,

이미지를 파일로 압축해 서버에 세팅하고 cronjob을 통해 매일 인덱스 삭제작업을 진행하도록 했다.

 

# docker image 빌드

github에 올라와있는 dockerfile을 다운받아 빌드한다 https://github.com/elastic/curator

docker build .

 

# 큐레이터 기본 설정파일 생성하기: curator.yml

client:
  hosts:
   - elasticsearch
  port: 9200
  url_prefix:
  use_ssl: False
  certificate:
  client_cert:
  client_key:
  ssl_no_validate: False
  http_auth:
  timeout: 30
  master_only: False

logging:
  loglevel: INFO
  logfile: /volume/curator.log #로그 디렉토리 설정, 어플리케이션 수행 
  logformat: default
  blacklist: ['elasticsearch', 'urllib3']

 

# 인덱스 삭제 규칙파일 생성하기: delete-indices.yml

actions:
  1:
    action: delete_indices
    options:
      ignore_empty_list: True
      disable_action: False
    filters:
     - filtertype: pattern
       kind: prefix
       value: kr-*-
     - filtertype: age
       source: name
       direction: older
       timestring: '%Y.%m.%d'
       unit: days
       unit_count: 8 #생성한지 8일이 된 데이터는 삭제한다

 

# 도커 컴포즈 설정

빌드된 이미지의 entrypoint는 아무 옵션 없이 단순히 어플리케이션을 실행하는 'curator/curator'이다.

때문에 설정파일이나 규칙들을 정의해주고싶다면 아래와 같이 entrypoint override를 해야한다.

또한, 어떤 인덱스가 삭제될지 확인하고싶다면 dry run 옵션을 통해 위의 curator.yml에 지정한 log파일에서 리스트확인이 가능하다.

최초 실행시 반드시 dry run을 통해 curator.log에 삭제 대상이 되는 인덱스들을 확인하자.

version: '3.3'

  services:
    curator:
      image: curator:5.6
      container_name: curator
      user: $USER
      volumes:
        - /data/volume/curator:/volume
  # 테스트시 주석 해제 후 실행
  #    entrypoint: ["curator/curator", "--config", "/volume/config/curator.yml", "--dry-run", "/volume/config/delete-indices.yml"]
      entrypoint: ["curator/curator", "--config", "/volume/config/curator.yml", "/volume/config/delete-indices.yml"]
      network_mode: esmaster #엘라스틱 서치가 있는 네트워크와 맞춰주기

 

# 큐레이터로 도커컴포즈 실행하기

도커 컨테이너는 규칙 실행후 exit code 0을 반환하며 종료된다.

정기적으로 실행되도록 설정하려면 리눅스 cronjob 등록을 해줘야한다.

 

도커 컴포즈 실행 스크립트 만들기

#!/bin/bash
cd /path/to/docker-compose
docker-compose up

 

크론탭 에디터 열기

crontab -e

 

규칙 추가

매일 17시에 실행되고, cronjob 작업 수행 이력이 crontab.log에 남는다.

0 17 * * * /data/volume/curator-run.sh > /data/crontab.log 2>&1

완료후 반영은 wq를 통해 하면 된다.

'ELK' 카테고리의 다른 글

[ES] 403 index read-only 에러가 발생했을 때  (0) 2019.03.10
[ES] mapping 데이터 타입 설정하기  (0) 2019.02.27