코딩마을방범대

[ELK] Docker를 통해 구축한 ELK 의 데이터를 스냅샷으로 저장하기 본문

💡 백엔드/ELK

[ELK] Docker를 통해 구축한 ELK 의 데이터를 스냅샷으로 저장하기

신짱구 5세 2024. 11. 6. 14:32
728x90

 

 

아래 포스트를 이용해 ELK를 구축했다면, 호스트 디렉토리에 elasticsearch의 데이터를 저장하도록 설정했기 때문에 재부팅 시 데이터가 날아갈 걱정은 없다.

하지만 만약에라도 데이터가 날아갈 위험이 있을 수 있으니, 주기적으로 백업을 해두는게 좋지 않나? 싶은 취지에서 알아보게 되었다.

 

도커를 통해 ELK 구축하기

ELK란 아래 포스트를 통해 개념을 확인할 수 있다. ELK 스택(Elasticsearch, Kibana, Beats, Logstash) 개념 정리ELK 스택Elasticsearch, Logstash, Kibana의 세 가지 인기 있는 프로젝트로 구성된 스택을 의미

sweet-rain-kim.tistory.com

 

 

 


 

 

 

 

 



1. 스냅샷 폴더 설정하기

 

스냅샷을 저장할 폴더 위치를 지정해줘야한다.

docker-compose.yml 에서 elasticsearch 부분에 주황색 옵션 두 줄을 추가해주면 된다.

 

※ 주황색 부분만 추가하고 나머지는 그대로 두면 된다.

  elasticsearch:
    volumes:
      - 로컬 백업 폴더 경로:컨테이너 내 백업 폴더 경로
   environment:
      path.repo: 컨테이너 내 백업 폴더 경로

 

아래 예시는 ELK 가 설치되어 있는 폴더를 기준으로 하위의 /elasticsearch/backup 폴더 데이터를 

Elasticsearch 컨테이너 내의 /usr/share/elasticsearch/backup 폴더와 동기화한다.

 

즉, 컨테이너의 폴더와 ELK를 실행하는 로컬 폴더를 동기화 한다.

  elasticsearch:
    volumes:
      - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
      - elasticsearch_data:/usr/share/elasticsearch/data
      - ./elasticsearch/backup:/usr/share/elasticsearch/backup
   environment:
      path.repo: /usr/share/elasticsearch/backup

 

 


 

 

 

2. ELK 실행

 

실행 후 확인해보면 1번에서 설정한 경로에 폴더들이 생성된 것을 볼 수 있다.

docker-compose build && docker-compose up -d

 

 

 


 

 

3. 로컬 백업 경로 소유자 변경

 

위 설정에서 ./elasticsearch/backup로 로컬 경로를 설정해주었기 때문에, 해당 폴더의 소유자를 docker을 실행시킨 사용자로 변경해주어야 한다.

(만약 이 단계를 건너뛰고 바로 5번을 실행할 경우, 폴더가 root 권한이기 때문에 elasticsearch에서 접근이 불가하다)

sudo chown -R 1000:1000 ./elasticsearch/backup/

 

 

 

 


 

 

 

4. 스냅샷 생성하기

 

Kibana 사이트의 Management - Dev tools 에 접속해서 아래 API를 차례로 호출해주면 된다.

 

# 스냅샷 리포지토리 생성
PUT /_snapshot/레포지토리명
{
  "type": "fs",
  "settings": {
    "location": "path.repo로 설정한 폴더경로"
  }
}

# 스냅샷 생성
PUT /_snapshot/레포지토리명/스냅샷명

 

 


 

 

 

스냅샷의 Type

 

ⓐ fs (파일 시스템)

로컬 파일 시스템의 디렉토리에 스냅샷을 저장한다.

일반적으로 Docker와 같은 환경에서 호스트의 디렉토리를 매핑하여 사용한다.

 

예시.

PUT /_snapshot/my_backup
{
  "type": "fs",
  "settings": {
    "location": "/path/to/backup"
  }
}

 


 

ⓑ url

클라우드 스토리지 서비스와 같은 외부 URL에 스냅샷을 저장한다.

AWS S3, Azure Blob Storage, Google Cloud Storage 등의 클라우드 스토리지를 지원한다.

 

예시.

PUT /_snapshot/my_s3_backup
{
  "type": "s3",
  "settings": {
    "bucket": "my-s3-bucket",
    "base_path": "path/in/bucket",
    "region": "us-west-1"
  }
}

 


 

ⓒ azure

Microsoft Azure Blob Storage에 스냅샷을 저장한다.

 

예시.

PUT /_snapshot/my_azure_backup
{
  "type": "azure",
  "settings": {
    "container": "my-container",
    "base_path": "path/in/container",
    "client": "my-azure-client"
  }
}

 


 

ⓓ gcs

Google Cloud Storage에 스냅샷을 저장한다.

 

예시.

PUT /_snapshot/my_gcs_backup
{
  "type": "gcs",
  "settings": {
    "bucket": "my-gcs-bucket",
    "base_path": "path/in/bucket"
  }
}

 

 

 


 

 

 

5. 스냅샷을 이용한 복원하기

POST /_snapshot/레포지토리명/스냅샷명/_restore

 

 

 

 

 

 

728x90