엔지니어링

Logstash 2.2 업그레이드 가이드

Logstasher 여러분 반갑습니다. 이 포스트에서는 Logstash 2.2.0으로 업그레이드할 때 고려해야 할 점들을 살펴보겠습니다. 특히 일부 새로운 동작들(그리고 Elasticsearch 출력 plugin을 통해 곧 수정될 일부 오류)로 인해 적정수보다 많은 파일들을 다룰 때 발생할 수 있는 상황들을 방지할 수 있는 방법을 소개해 드리겠습니다. 또한, 2.2.0의 새로운 조정(tuning)에 관한 고려 사항도 몇 가지 말씀드리겠습니다. 2.2.0 업그레이드에 참조하실 수 있도록 여기의 새 문서 섹션을 추가해 드렸습니다.

좋은 소식은 Logstash 2.2가 비약적인 성능 개선과 함께 출시되었다는 점입니다! 안 좋은 소식은 Logstash의 기본 설정에 적용된 변경 사항으로 인해 일부 구성에서 문제가 발생할 수 있다는 점입니다. 예를 들어, Logstash에서 기존보다 많은 파일 핸들을 사용한다는 보고가 접수되고 있습니다.

이제 이러한 변경 사항들을 자세히 알아보겠습니다.

작업자 유닛

Logstash 2.2에는 파이프라인 작업자(기존의 필터 작업자)와 출력 작업자의 두 가지 유형의 작업자가 있습니다. 이전 버전의 Logstash에서 필터와 출력은 각각의 스레드로 실행되었습니다. 2.2에서는 필터 작업자 스레드와 출력 작업자 스레드가 하나의 '파이프라인' 작업자 스레드 유형으로 통합되는 방식으로 스레딩 모델이 단일화되었습니다. 이로 인해 큰 성능 이점을 가져다 주었습니다. 출력 작업자 개념은 유지되지만 스레드로 직접 매핑되는 것이 아니라 사용 가능한 출력 개체 풀로 매핑됩니다. 작업 실행 시 이들은 파이프라인 작업자에 의해 사용되며 작업이 완료되면 반환됩니다.

-w 를 기존보다 높게 설정해야 한다는 것을 알게 되실 것이며 Logstash는 기존보다 많은 총 스레드를 필요로 할 수 있습니다. 그러나 이는 의도된 설계입니다! 더 적은 작업을 처리하는 스레드들을 더 많이 생성할 수 있습니다. 물론 이 중 상당수가 IO 대기에서는 유휴 상태이지만, 이제 훨씬 효율적이고 더 적은 컨텍스트 전환으로 작업을 실행할 수 있습니다. -w 설정을 조정하려면 처리량 감소가 확인될 때까지 시스템의 코어 개수의 배수까지도 그 값을 높여보십시오. 기본적으로 -w 는 시스템 코어 개수에 일치하도록 설정됩니다.

이벤트 일괄 처리

새로운 배치 크기 설정인 -b 도 비슷한 방식으로 조정할 수 있습니다. 자세한 내용은 이 옵션을 설명한 기존 게시물 을 참조하시기 바랍니다. 이제 이 배치 크기가 Elasticsearch 출력에 대한 기본 플러시 크기가 됩니다. 이제flush_size 옵션은 최대 플러시 크기만 변화시키며 더 이상 최소 플러시 크기를 설정하지 않습니다.

새로운 파이프라인 및 출력

우리의 성능 테스트에서는 파이프라인 작업자의 크기에 맞춰 출력 작업자 증가를 제한하면 우수한 성능 이점을 거둘 수 있는 것으로 확인되었습니다. 그러나 Elasticsearch 출력의 경우에는 지금까지는 알려지지 않은 부적절한 동작이 존재합니다. 여러 개의 Elasticsearch 출력 작업자를 사용한다면 이들은 동일한 백엔드 연결 풀을 공유하지 않습니다. 즉, 5개의 백엔드 ES 인스턴스와 5개의 작업자가 있으면 최대 5*5=25 연결이 만들어집니다. 40개의 ES 노드가 있으면 문제는 더욱 심각해집니다!

이 상황은 경우에 따라 문제가 생길 수 있다는 점은 알고 있습니다. 이번 수정은 Logstash 코어 행동을 변경하는 것이 아니라, 새로운 파이프라인 모델에 적합하게 Elasticsearch 출력 핸들 연결을 만드는 것입니다. 이 문제는 2.2 시리즈의 신규 릴리스로 해결하려고 합니다. 현재 우리는 plugin 업그레이드만 필요한 패치 를 준비 중이지만 릴리스 전까지는 비교적 적은 수의 ES 출력 작업자가 유지되길 바랄 것입니다. 2.2의 임시 해결 방법은 worker 1이나 2개로 확실히 낮게 설정하는 것입니다.

피드백

새로운 파이프라인 아키텍처와 2.2 업그레이드에 관한 궁금증이 해소되었길 바랍니다. 의견이 있으시면 당사 트위터(@elastic) 또는 포럼에 남겨주시거나 GitHub 문제점 페이지에 문제를 보고해 주시기 바랍니다.