아무거나

AWS S3를 활용한 ELK 스택 로그 백업 및 복원 본문

Data Store/Elastic Stack

AWS S3를 활용한 ELK 스택 로그 백업 및 복원

전봉근 2019. 5. 24. 11:07
반응형

[AWS S3를 활용한 ELK 스택 로그 백업 및 복원]

1. 설치(S3 repository plugin)

   - elasticsearch 와 같은 서버에 설치한다.

   - cd /usr/share/elasticsearch

   - sudo bin/elasticsearch-plugin install repository-s3

   - sudo service elasticsearch restart

 

2. s3 백업을 등록(aws IAM 기준)

   - curl -XPUT 'http://127.0.0.1:9200/_snapshot/s3_elk_backup' -d '{

      "type":"s3",

      "settings":{

        "access_key":"[YOUR_ACCESS_KEY]",

        "secret_key":"[YOUR_SECRET_KEY]",

        "bucket":"YOUR_BUCKET",

        "region":"YOUR_REGION",

        "base_path":"elasticsearch",

        "max_retries":3

      }

   }'

 

3. s3로 백업하는걸 crontab에등록(/etc/cron.d/s3_backup_cron)

   [추가내용]

   SHELL=/bin/bash

   PATH=/sbin:/bin:/usr/sbin:/usr/bin

   HOME=/

 

   # daily

   0 0 * * * ubuntu /home/ubuntu/daily_elk_backup.sh > /home/ubuntu/log/elk_backup.log 2>&1

 

4. 백업 스크립트

[스크립트내용]
   // YESTERDAY=$(date --date="1 days ago" +'%Y.%m.%d') : 어제동안 있었던 모든 로그들을 받도록 한다.
   // INDEX_... : 모든 인덱스 및 프리픽스 지정
   // for.... done  : 백업을 s3에 저장
   // 확인은 curl -XGET 'localhost:9200/_snapshot/s3_elk_backup/_all?pretty' 로 백업여부확인
   TODAY=$(date +'%Y.%m.%d')
   YESTERDAY=$(date --date="1 days ago" +'%Y.%m.%d')
   echo Today is $TODAY
   echo Yesterday $YESTERDAY indices will be stored in S3

   INDEX_PREFIXES=''
   INDEX_PREFIXES+='tomcat- '
   #INDEX_PREFIXES+='filebeat- '
   #INDEX_PREFIXES+='database- '

   for prefix in $INDEX_PREFIXES;
   do
    INDEX_NAME=${prefix}$YESTERDAY
    SNAPSHOT_NAME=$INDEX_NAME"-snapshot"
    echo Start Snapshot $INDEX_NAME
    curl -XPUT "http://localhost:9200/_snapshot/s3_elk_backup/$SNAPSHOT_NAME?wait_for_completion=true" -d '{
    "indices": "'"$INDEX_NAME"'",
    "ignore_unavailable": "true",
    "include_global_state": false
    }'
    echo Successfully completed storing "$INDEX_NAME" in S3
   done

 

5. 복원

   - 키바나 데이터 삭제 curl -XDELETE 'localhost:9200/tomcat-2' // 기존 인덱스삭제

   - sh elk_restore.sh tomcat-2017.08.06  // 스크립트를 이용하여 복원

[스크립트]
     if [[ $# -ne 1 ]] ; then
         echo "Missing argument. Please provide index name"
         echo "Usage: elk_restore.sh tomcat-2017.08.05"
         exit 1
     fi
     # Store environment from command argument which will be used for S3 location
     INDEX_NAME=$1
     echo "INDEX_NAME: $1"

     curl -XPOST "localhost:9200/_snapshot/s3_elk_backup/$INDEX_NAME-snapshot/_restore" -d '{
         "indices": "'"$INDEX_NAME"'",
         "ignore_unavailable": "true",
         "include_global_state": false
     }'
반응형
Comments