2017-12-04 17 views
0

Elastic Docker Compose에서 영감을 얻은 ElasticSearch, Logstash, Filebeat 및 Kibana로 도커 설정을 실행 중입니다. 시스템 (Filebeat-> Logstash-> ElasticSearch)에 처음으로 15GB의 로그 파일을로드해야하지만 성능에 문제가 있습니다.ElasticSearch 초기 대량 가져 오기 우수 사례

Filebeat/Logstash가 ElasticSearch에 너무 많은 작업을 출력하고있는 것처럼 보입니다. 몇 시간 후, 나는이 같은 ElasticSearch 오류의 무리를보기 시작 : https://www.elastic.co/guide/en/elasticsearch/guide/master/indexing-performance.html#segments-and-merging : 나는을 조절 병합을 사용하지 않도록 설정하는 방법에 대한이 오래된 문서 문서를 발견했습니다

[INFO ][o.e.i.IndexingMemoryController] [f8kc50d] now throttling indexing for shard [ log-2017.06.30 ]: segment writing can't keep up

. 내가 위의 문제를 해결할 수있는 방법

{ 
    "error": { 
    "root_cause": [ 
     { 
     "type": "illegal_argument_exception", 
     "reason": "transient setting [indices.store.throttle.type], not dynamically updateable" 
     } 
    ], 
    "type": "illegal_argument_exception", 
    "reason": "transient setting [indices.store.throttle.type], not dynamically updateable" 
    }, 
"status": 400 
} 

:

PUT /_cluster/settings 
{ 
    "transient" : { 
     "indices.store.throttle.type" : "none" 
    } 
} 

그러나 (ElasticSearch 6) 현재 버전에서이 날이 오류를 제공

?

VM에는 4 개의 CPU 코어 (Intel Xeon E5-2650)가 있으며 ElasticSearch에는 4GB RAM, Logstash 및 Kibana 각각 1GB가 할당됩니다. "swapoff -a"를 사용하여 스와핑을 사용할 수 없습니다. X- 팩 및 모니터링이 활성화됩니다. 이 로그 서버에는 하나의 ES 노드 만 있습니다. 이 초기 대량 가져 오기를 위해 다중 노드가 있어야합니까?

EDIT1 :

이 refresh_interval이 더 잘 수행 할 것 같습니다 number_of_replicas 변경. 여전히 테스트 중입니다. 당신이 압력을 줄일 필요가 있으므로

PUT /log-*/_settings 
{ 
    "index.number_of_replicas" : "0", 
    "index.refresh_interval" : "-1" 
} 
+0

클러스터 통계 (노드, 샤드, 복제본 수, 하드웨어 종류)는 무엇입니까? iostat, JVM 통계 등 다른 통계가 있습니까? 다른 설정을 변경 했습니까? – Egor

+0

@Egor 귀하의 추천에 감사드립니다. 추가 정보로 질문을 업데이트했습니다. – dhrm

+0

logstash에서 작업자 스레드 수를 줄일 수 있습니다 (시작할 때 -w 옵션 사용). elasticsearch의 경우 사용 가능한 RAM의 절반을 할당하고 나머지는 파일 시스템으로 남겨 두어야한다는 것을 기억합니다 ("Xmx를 실제 RAM의 50 % 이상으로 설정하십시오"https://www.elastic.co/guide에서 /en/elasticsearch/reference/master/heap-size.html). – baudsp

답변

1

는 대부분의 경우 병목 현상이 IO이다, (당신은 당신이 ES 모니터링 스크린 샷을 게시하는 경우 또한 유용 할 것이다,이 실행 iostat를 확인할 수 있습니다.)

기본 ES 구성으로 인해 대량로드 중에 많은 인덱스 세그먼트가 생성됩니다. 이 문제를 해결하려면 대량로드 인 경우 index.refresh_interval (또는 -1로 설정) - doc을 참조하십시오. 기본값은 1 초이며 새 세그먼트가 1 초마다 만들어지며 배치 크기를 늘리고 도움이되는지 확인하려고합니다. 당신이 회전하는 디스크를 사용하는 경우

또한, 이것은 하나의 스레드 만 병합 세그먼트를 수행 할 수 있습니다 및 병합 세그먼트 및 색인 사이 IO 경합을 줄일 1. index.merge.scheduler.max_thread_count을 설정합니다.

+0

감사합니다. 이러한 설정을 사용하려면 PUT 요청을 표시하는 my * EDIT1 *을 참조하십시오. Elasticsearch가 이러한 설정을 이후에 만들어진 색인에 적용하도록하는 방법이 있습니까? 하나의 노드 만 가지고 있기 때문에 일괄 가져 오기를 완료 한 후에 이러한 설정을 그대로 두는 것이 합리적일까요? – dhrm

+0

단일 노드 클러스터에서는 복제본 수가 중요하지 않습니다. 복제본은 기본 샤드와 동일한 노드에서 호스트되지 않습니다. index.refresh_interval은 대량로드 중에 -1이어야합니다. – Egor