코딩마을방범대
[ELK] Docker를 통해 구축한 ELK 의 데이터를 스냅샷으로 저장하기 본문
아래 포스트를 이용해 ELK를 구축했다면, 호스트 디렉토리에 elasticsearch의 데이터를 저장하도록 설정했기 때문에 재부팅 시 데이터가 날아갈 걱정은 없다.
하지만 만약에라도 데이터가 날아갈 위험이 있을 수 있으니, 주기적으로 백업을 해두는게 좋지 않나? 싶은 취지에서 알아보게 되었다.
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
'💡 백엔드 > ELK' 카테고리의 다른 글
[ELK] 데이터뷰 및 필드 생성하기 (0) | 2024.11.13 |
---|---|
[ELK] 다른 서버에 구축되어 있는 ELK와 연결하기 (0) | 2024.11.12 |
[ELK] Docker로 ELK 스택 구축 시 실행 때마다 자동으로 사용자 설정하기 (0) | 2024.11.04 |
[ELK] ELK에서 Logstash.conf 파일의 filter, input, output 블록 (0) | 2024.11.04 |
[ELK] ELK 역할 부여 및 권한 관리하는 방법 (0) | 2024.10.31 |