Logstash 마이그레이션 Elasticsearch 데이터 방법 해독

Elasticsearch에서 데이터 이전은 엔지니어들이 자주 하는 것이다. 때로는 집단 이전, 때로는 데이터 백업, 때로는 업그레이드를 위한 등이다. 이전 방식도 여러 가지가 있다. 예를 들어elasticsearch-dump, snapshot, 심지어reindex를 통해 하는 것이다.오늘 여러분께 또 다른 방안을 소개합니다: Logstash로 Elasticsearch 집단의 빠른 이동을 실현합니다
우리는 logstash를 통해 데이터 이동 자체의 원리를 이해하기 쉽기를 희망합니다. logstash를 통해 원본 elasticsearch Cluster에서 데이터를 읽고 목표 elasticsearhCluster에 기록합니다. 상세한 조작은 다음과 같습니다.
logstash 디렉터리에 데이터 동기화를 위한 conf 파일을 만듭니다
vim ./logstash-5.5.3/es-es.conf

conf 파일을 설정합니다. index 이전만 하면 되기 때문에 대상 Cluster와 원본 Cluster의 index 이름은 같습니다.
input {
    elasticsearch {
        hosts => ["********your host**********"]
        user => "*******"
        password => "*********"
        index => "logstash-2017.11.07"
        size => 1000
        scroll => "1m"
    }
}
#  , filter 
filter {
}
output {
    elasticsearch {
        hosts => ["***********your host**************"]
        user => "********"
        password => "**********"
        index => "logstash-2017.11.07"
    }
}

conf 파일 설정 완료 후 logstash 실행
bin/logstash -f es-es.conf

이 지령을 실행할 때, 때때로 다음과 같은 오류 메시지가 나타날 수 있다
[FATAL][logstash.runner] Logstash could not be started because there is already another instance using the configured data directory.  If you wish to run multiple instances, you must change the "path.data" setting.

이것은 현재logstash 버전이 여러 개의 instance 공유 경로를 지원하지 않기 때문입니다.데이터, 따라서 시작할 때 명령줄에 "--path.data PATH"를 추가하여 서로 다른 실례에 다른 경로를 지정해야 합니다
bin/logstash -f es-es.conf --path.data ./logs/

만약 실행이 순조롭다면, 아래 명령을 실행하면 목표의elasticsearch에서 대응하는 index를 볼 수 있습니다
curl -u username:password host:port/_cat/indices

이상은logstash를 통해elasticsearch에서 지정한 index를 이동하는 방법을 소개했습니다. 다음은 실용적인 장면을 소개합니다.
** Elasticsearch를 자체 제작한 많은 고객들이 최근에 아리운 Elasticsearch라는 제품을 주목하고 있습니다.사용하려고 할 때 자체 구축된 데이터를 아리운 Elasticsearch로 어떻게 옮겨야 할지 곤혹스러웠다.logstash를 통해 클라우드에 구축된 Elasticsearch의 index 데이터를 신속하게 이전하는 방법을 소개합니다.**
이 방안의 논리는 매우 간단하다. 해체는 N개의es-to-es를 설정하는 conf 파일이지만, 이렇게 하는 것은 매우 번거롭다.사실logstash는 이 일을 대량으로 할 수 있는 능력을 제공했기 때문에 세 가지 중요한 개념을 미리 소개해야 한다.
  • 메타데이터:logstash 1.5 버전 이후 메타데이터의 개념을 사용하여 이벤트를 묘사하고 사용자에게 수정을 허용하지만 이벤트 결과에 쓰지 않고 이벤트 결과에 영향을 미친다.이외에metadata는 이벤트의 메타데이터 설명 정보로 input,filter,output 세 가지 플러그인의 전체 실행 주기 내에 생존할 수 있다

  • 참고 문서 Logstash Metadata로 Config Cleaner 및 Log Processing Faster 만들기
  • docinfo:elasticsearch input 플러그인의 매개 변수입니다. 기본값은false입니다. 홈페이지에 기술된 원문은'Ifset, include Elasticsearch document information such as index, type, and the id in the event'입니다.즉, 이 필드를 설정하면 index, type, id 등 정보를 모두 이벤트에 기록한다는 것을 의미한다. 즉, 메타데이터에 기록된다. 이것은 전체 이벤트 실행 주기 내에 사용자가 index, type, id 등 매개 변수를 마음대로 사용할 수 있다는 것을 의미한다
  • elasticsearch input 플러그인의 index 매개 변수로 어댑터를 지원합니다. "*"같은 모호한 어댑터로 모든 대상을 표시할 수 있습니다

  • metadata의 특성 때문에 우리는 output에서 input의 index, type 정보를 직접 계승하고 목표 Cluster에서 원본 Cluster와 같은 index와 type, 심지어 id를 직접 만들 수 있습니다.
    전체 과정에서 메타데이터 정보를 보고 클래스 debug 작업을 하려면 output에 설정을 추가해야 합니다.
    stdout { codec => rubydebug { metadata => true } }

    예제 구성 코드는 다음과 같습니다.
    input {
        elasticsearch {
            hosts => ["yourhost"]
            user => "**********"
            password => "*********"
            index => "*"# index 
            size => 1000
            scroll => "1m"
            codec => "json"
            docinfo => true
        }
    }
    #  , filter 
    filter {
    }
    
    output {
        elasticsearch {
            hosts => ["yourhost"]
            user => "********"
            password => "********"
            index => "%{[@metadata][_index]}"
    
        }
        stdout { codec => rubydebug { metadata => true } }
    
    }

    실행 후,logstash는 원본 Cluster의 모든 index를 목표 Cluster에 모두copy로 보내고,mapping 정보를 가지고 가서 index 내의 데이터 이동을 시작합니다.
    건의: 정식으로 집행할 때
    stdout { codec => rubydebug { metadata => true } }

    이 설정 항목은 삭제하는 것을 권장합니다. 그렇지 않으면 화면이 가득 찬 메타데이터 정보를 삭제할 것입니다.

    좋은 웹페이지 즐겨찾기