Logstash와 Elasticsearch Performance Test중 

Logstash Performance Test 부분과 관련하여 정리한 자료입니다.


Posted by minji7

얼마전 ELK Stack이 Splunk 대체 Solution으로서 적합한가에 대해 논하고자 글을 적었다. ELK Stack을 사용해보고 Splunk와 비교하기 위해 글을 적으며 ELK Stack의 간단한 소개와 설치, 설정, 사용법에 대해 다룬 적이 있다.

하지만 얼마 지나지않아 Elasticsearch, Logstash, Kibana가 새로운 버전을 선보였다. 이에 이 글에서는 새로워진 ELK Stack을 사용해보고자 설치와 설정 및 사용법에 대해 설명한다.

ELK Stack이 무엇인지 잘 모른다면 이전 글을 참고하길 바란다.


설치 및 설정

아래의 내용은 1대의 Server 환경에서 설치 및 설정한 경우이며, Elasticsearch는 1.0.1, Logstash는 1.4.0 GA, Kibana는 3.0.0 GA를 사용하였다.


Elasticsearch 설치 및 설정

(1) Elasticsearch 홈페이지에서 Elasticsearch의 zip파일을 다운받아 unzip한다.


(2) Elasticsearch 모니터링을 위한 Plugin을 설치 한다.

  $ bin/plugin --install mobz/elasticsearch-head


(3) config/elasticsearch.yml의 node.name을 지정한다. 이는 노드 식별을 위한 이름이므로 유일성과 의미를 가진 이름을 사용한다.


Logstash 설치 및 설정

(1) Elasticsearch 홈페이지에서 Logstash의 zip파일을 다운받아 unzip한다.


(2) Logstash Config File을 생성하여 다음과 같이 저장한다.

  input {

    file {

      path => "/var/log/apache2/access.log"

      type => "apache"

    }

  }

  filter {

    grok {

      type => "apache"

      pattern => "%{COMBINEDAPACHELOG}"

    }

    date {

      type => "apache"

      match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]

    }

  }

  output {

    stdout { debug => true debug_format => "json"}

    elasticsearch { host => "localhost" }
  }


Kibana 설치 및 설정

(1) Elasticsearch 홈페이지에서 Kibana의 zip파일을 다운받아 unzip한다.

 


(2) unzip한 파일은 Elasticsearch의 Plugin에 넣어 사용한다. 경로는 다음과 같다.

  path/to/elasticsearch/plugins/kibana/_site


(3) path/to/elasticsearch/plugins/kibana/_site/config.js의 Elasticsearch Server URL을 지정한다. 

     (예: elasticsearch: "http://localhost:9200")


실행

Elasticsearch 실행

unzip한 Elasticsearch 디렉토리안에서 실행한다.

  $ bin/elasticsearch


Logstash 실행

unzip한 Logstash 디렉토리안에서 실행한다.

  $ bin/Logstash -f logstash.conf

logstash.conf는 앞서 생성한 Logstash의 Config File이다.


Kibana 실행

Elasticsearch의 Plugin안에 넣었기 때문에 따로 실행할 필요가 없다. 

http://localhost:9200/_plugin/kibana/#/dashboard에서 Kibana가 잘 뜨는지 확인한다.


사용

Dashboard 생성

(1) http://localhost:9200/_plugin/kibana/#/dashboard에서 Blank Dashboard를 클릭한다.


(2) 설정 아이콘을 클릭한다.


(3) Dashboard의 Title을 입력하고 저장하면 새로운 Dashboard가 생성된다.

Panel 생성

(1) 'ADD A ROW' 버튼을 클릭 한다.


(2) Rows의 Title을 입력하고, 'Create Row' 버튼을 클릭하여 Row를 생성한 후 저장하고 창을 닫는다.


(3) Panel 생성을 위해 'Add panel to empty row' 버튼을 클릭한다.


(4) Panel Type을 선택하고 저장한후 창을 닫는다. 여기서는 'histogram'을 선택하였다.


(5) Panel의 Title 및 사용자가 원하는 설정을 하고난 후 'Add Panel' 버튼을 클릭하여 Panel을 생성하고 창을 닫는다.


(6) 위에서 선택한 Type의 Panel이 생성되었음을 확인할수 있다.


Query

다양한 Query를 이용하여 Search하고 결과를 확인할 수 있다. 

(Query문의 종류 :  http://lucene.apache.org/core/3_5_0/queryparsersyntax.html )



Apache로그를 이용하여 위와 같은 작업을 거쳐 Dashboard를 완성해 보았다.



Reference Sites

(1) Elasticsearch : http://www.elasticsearch.org/

(2) ELK Download : http://www.elasticsearch.org/overview/elkdownloads/

(3) Logstash 1.4.0 Docs : http://logstash.net/docs/1.4.0/tutorials/getting-started-with-logstash

(4) Elasticsearch 1.x version set up : http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/setup.html

(5) Whats cooking kibana : http://www.elasticsearch.org/blog/whats-cooking-kibana/



Posted by minji7



이전 포스팅에서 ELK Stack이 Splunk 대체 Solution으로 유용하다는 결론을 내렸다. ELK Stack에 관한 이전 포스팅은 여기를 참조하면 된다. 그래서 ELK Stack이 사용하기에 얼마나 유용한지 알아보고자 ELK Stack의 핵심인 Elasticsearch와 Logstash의 성능을 테스트 하게 되었다.

이에 이 글에서는 ElasticsearchLogstash의 성능 테스트 방법과 결과를 알아보고자 한다.



테스트 환경

이후 나오는 모든 Server의 환경은 다음과 같이 동일하다.

  OS

  Ubuntu 12.04 64bit

  JAVA

  Oracle java 1.7.0-51

  Elasticsearch

  0.90.12

  Logstash

  1.3.3

  CPU

  Intel(R) Pentium(R) CPU G2030 3.00GHz (2 core)

  Memory

  16GB 

  Disk

  Toshiba Q Series Pro (128GB)



설정


Elasticsearch 설정

이전 포스팅에서도 설명했듯이 node.name은 유일성과 의미를 가진 이름을 사용한다. 또한 이후 테스트에서 Cluster 구성을 할 예정이기 때문에 cluster.name 설정을 한다. 

  cluster.name: eesc

  node.name: "embian" 


Logstash 설정

Logstash Output Plugin으로 Elasticsearch를 사용했고, Elasticsearch Cluster 설정으로 앞에 Elasticsearch에 설정한 cluster.name과 동일하게 써준다. 

  input {  

    file {

        type => "apache"

        path => "apacheAccess.log"

    }

  }


  filter {

    grok {

      type => "apache"

      pattern => "%{COMBINEDAPACHELOG}"

    }


    date {

      type => "apache"

      match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]

    }

  }


  output {

    elasticsearch { cluster => "eesc" }

  }


Logstash Workers 설정

이 설정은 Logstash Workers의 수를 늘려가며 테스트 할때만 해준다. Logstash Output Plugin의 Workers만 추가하며, Logstash Workers Default 값은 1이다.

  output {

    elasticsearch { cluster => "eesc" workers => 2 }

  } 



성능 측정에 사용될 변화 요인

1. Apache Access Log 수

2. Logstash Agent 수

3. Elasticsearch Cluster Node 수

4. Logstash Workers 수



테스트 결과

여기서는 위에 나열한 성능 측정에 사용될 변화 요인에 따른 테스트 결과를 그래프로 나타내고, 각각의 테스트시 어떤 환경을 구축했는지 설명하려한다.


테스트 결과 그래프에서 Elasticsearch와 Logstash의 초당 Log 처리량을 초당 처리량으로 표현했고, 테스트를 위한 도구인 Log Generator가 Log를 파일에 쓰는 시간은 무시할 정도로 작아서 표시하지않았다.


1. Apache Access Log 수

첫번째 테스트에서는 Apache Access Log 수가 증가함에 따라 Elasticsearch와 Logstash의 초당 Log처리량에 대해 알아보았다.

 

테스트는 Elasticsearch Cluster Node 1개와 Logstash Agent 1개로 했으며, Log Generator는 Logstash와 동일한 Server에서 구동했다.


2. Logstash Agent 수

두번째 테스트에서는 Logstash Agent의 수를 1개부터 6개까지 늘려감에 따라 Elasticsearch와 Logstash의 초당 Log처리량 대해 알아보았다. 단, Apache Access Log의 수는 1,000,000개로 6번 모두 동일하다.

 

테스트는 Elasticsearch Cluster Node 1개와 Logstash Agent 1개에서 6개까지 1개씩 늘려가며 했으며, Log Generator는 Logstash와 동일한 Server에서 구동했다. 간단하게 보면 테스트 환경은 다음과 같다. 

 

Server 1

Server 2

Server 3 

 Server 4

 Server 5

 Server 6

Logstash 1대일때

Logstash

   

 

 

 

  Elasticsearch

Logstash 2대일때

Logstash

Logstash

 

 

 

  Elasticsearch

Logstash 3대일때

Logstash

Logstash

Logstash

 

 

  Elasticsearch

Logstash 4대일때

Logstash

Logstash

Logstash

Logstash

 

  Elasticsearch

Logstash 5대일때

Logstash

Logstash

Logstash

Logstash

Logstash

  Elasticsearch

Logstash 6대일때

Logstash

Logstash

Logstash

Logstash

Logstash

  Logstash, Elasticsearch


3. Elasticsearch Cluster Node 수

세번째 테스트에서는 Elasticsearch Cluster Node 수를 1대부터 6대까지 늘려감에 따라 Elasticsearch와 Logstash의 초당 Log처리량에 대해 알아보았다. 단, Apache Access Log의 수는 1,000,000개로 6번 모두 동일하다.

 

테스트는 Elasticsearch Cluster Node를 1대에서 6대까지 1대씩 늘려가고 Logstash는 Server 1대에서 했으며, Log Generator는 Logstash와 동일한 Server에서 구동했다. 간단하게 보면 테스트 환경은 다음과 같다. 

 

Server 1

Server 2

Server 3

 Server 4

Server 5

Server 6 

Elasticsearch 1대

Elasticsearch

   

 

 

 

 Logstash

Elasticsearch 2대

Elasticsearch

Elasticsearch


 

 

 Logstash

Elasticsearch 3

Elasticsearch

Elasticsearch

Elasticsearch

 

 

 Logstash

Elasticsearch 4

Elasticsearch

Elasticsearch

Elasticsearch

Elasticsearch


 Logstash

Elasticsearch 5

Elasticsearch

Elasticsearch

Elasticsearch

Elasticsearch

Elasticsearch

 Logstash

Elasticsearch 6

Elasticsearch

Elasticsearch

Elasticsearch

Elasticsearch

Elasticsearch

Elasticsearch, Logstash


4. Logstash Workers 수

네번째 테스트에서는 Logstash Output Plugin의Workers를 1개부터 4개까지 늘려감에 따라 Elasticsearch Cluster 구성 전 구성 후의 Elasticsearch와 Logstash의 초당 Log처리량에 대해 알아보았다. 단, Apache Access Log의 수는 1,000,000개로 4번 모두 동일하다.


Elasticsearch Cluster 구성 전

 

테스트는 네번 모두 Elasticsearch Cluster Node 1개와 Logstash Agent 1개로 했으며, Log Generator는 Logstash와 동일한 Server에서 구동했다.


Elasticsearch Cluster 구성 후

 

테스트는 네번 모두 Elasticsearch Cluster Node 2개와 Logstash Agent 1개로 했으며, Log Generator는 Logstash와 동일한 Server에서 구동했다. 간단하게 보면 테스트 환경은 다음과 같다. 

 

 Server 1

 Server 2 

 Server 3 

Logstash Workers 1개

Elasticsearch

Elasticsearch

Logstash

Logstash Workers 2개

Elasticsearch

 Elasticsearch 

Logstash

Logstash Workers 3개

Elasticsearch

 Elasticsearch 

Logstash

Logstash Workers 4개

Elasticsearch

Elasticsearch

Logstash



추가 테스트 결과

추가로 두가지 테스트를 더 해보았다.

첫째로 Elasticsearch Cluster를 구성하지 않고, Logstash Agent 1개당 Workers 2개를 동작시켰다. 간단하게 보면 테스트 환경은 다음과 같다. 

 

 Server 1

 Server 2

 Server 3

 Server 4

 Server 5

  Server 6

테스트 환경 

Elasticsearch, Logstash

 Logstash

 Logstash

Logstash 

 Logstash

 Logstash

테스트 결과 몇번을 다시해 보아도 데이터가 유실되어 제대로된 테스트가 이루어 지지 않았다.


둘째로 Elasticsearch Cluster를 구성하고, Logstash Agent 1개당 Workers 2개를 동작시켰다. 간단하게 보면 테스트 환경은 다음과 같다. 

 

Server 1 

Server 2

Server 3

Server 4

Server 5

Server 6

테스트 환경 

ElasticsearchLogstash 

ElasticsearchLogstash 

Logstash 

 Logstash

 Logstash

Logstash 

테스트 결과 Elasticsearch와 Logstash의 초당 Log처리량이 27,519(events/sec)로 지금 까지의 테스트 중 가장 높았고, 위 테스트 환경이 현 Server 6대에서 최적의 구성이였다. 



결론

위에 작성한 테스트 결과를 간단히 요약하자면 다음과 같다.

1. Apache Access Log 수

 Log수가 증가함에 따라 초당 처리량이 소폭 증가했다.

2. Logstash Agent 수

Logstash Agent의 수가 증가함에 따라 초당 처리량이 선형적으로 증가했다.

3. Elasticsearch Cluster Node 수

Elasticsearch Cluster Node 수가 1개에서 2개로 늘렸을 경우 초당 처리량이 약 100%정도 증가했으며,  Cluster Node 수가 2개부터 6개까지는 초당 처리량 변화가 거의 없었다.

4. Logstash Workers 수

Elasticsearch Cluster 구성 전과 구성 후 모두 Logstash Workers 수가 1개에서 2개로 늘렸을 경우 초당 처리량 증가했으며,  Logstash Workers 수가 2개부터 4개까지는 초당 처리량 변화가 거의 없었다.

또한 Elasticsearch Cluster 구성 전보다 구성 후에 초당 처리량이 증가했다.

추가 테스트

현 Server 6대에서의 최대 초당 처리량은 27,519(events/sec)로 나왔다.

Posted by minji7