이전 포스팅에서 ELK Stack이 Splunk 대체 Solution으로 유용하다는 결론을 내렸다. ELK Stack에 관한 이전 포스팅은 여기를 참조하면 된다. 그래서 ELK Stack이 사용하기에 얼마나 유용한지 알아보고자 ELK Stack의 핵심인 Elasticsearch와 Logstash의 성능을 테스트 하게 되었다.
이에 이 글에서는 Elasticsearch와 Logstash의 성능 테스트 방법과 결과를 알아보고자 한다.
테스트 환경
이후 나오는 모든 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 |
테스트 환경 |
Elasticsearch, Logstash |
Elasticsearch, Logstash |
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)로 나왔다.