Splunk는 모든 머신 데이터를 실시간으로 collecting하고 Indexing하고 Reporting하는 End-to-End Solution이다. 모든 머신 데이터를 제한 없이 처리 할수있다. 사용자가 원하는 데이터를 즉시 분석할수 있으며, 원하는 Reporter, Dashboard를 추가적인 개발없이 구성할수 있다. 또한 통계적 명령들을 조합하여 여러가지 Query문으로 Search가 가능하며 Query문의 자동완성 기능까지 갖추고 있어 사용하기 매우 편리하다. 하지만 상당히 높은 가격대의 Solution이라서 일반적인 중소기업이 사용하기에 경제적으로 어렵다. 그래서 보다 낮은 가격대의 편하게 이용가능한 Splunk의 대체 Solution을 조사하던 중, Elasticsearch 사이트에서 Splunk와 비슷한 기능을 가진 ELK(Elasticsearch, Logstash, Kibana) Stack을 찾게 되었다. 

이에 이 글에서는 ELK(Elasticsearch, Logstash, Kibana) Stack을 사용해보고 Splunk의 대체 Solution으로 적합한지 알아보고자 한다.


소개 

ELK Stack은 Elasticsearch, Logstash, Kibana의 약자로서 Elasticsearch는 Apache의 Lucene을 바탕으로 개발한 실시간 분산 검색 엔진이며, Logstash는 각종 로그를 가져와 JSON형태로 만들어 Elasticsearch로 전송하고 Kibana는 Elasticsearch에 저장된 Data를 사용자에게 Dashboard 형태로 보여주는 Solution이다.



설치 및 설정

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


Elasticsearch 설치 및 설정

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


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

  $ bin/plugin -install mobz/elasticsearch-head

  $ bin/plugin -install lukas-vlcek/bigdesk/2.4.0

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


Logstash 설치 및 설정

(1) Elasticsearch 홈페이지에서 Logstash의 jar파일을 다운받는다.


(2) 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/bin/elasticsearch -f 


Logstash 실행

  $ java -jar logstash-1.2.2-flatjar.jar agent -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를 완성해 보았다.



결론

Splunk와 ELK Stack은 End-to-End Solution이라는 면에서는 비슷할지 모르나, Kibana3가 아직 Release된 GA 버전이 없어 Splunk보다 기능적으로 부족하다.  

몇가지 예를 들자면 다음과 같다.

1. Splunk는 Query문의 자동완성 기능이 매우 잘되어있으나, Kibana는 이전에 사용했던 검색어에 대해서만 Query문의 자동완성을 지원 해준다. 

2. Splunk는 한개의 그래프에 한개의 Query 결과가 붙는 형태인 반면, Kibana는 한개의 Dashboard에 한개의 Query가 붙는 형태로 이를 공유하여 사용하기 때문에 하나의 Dashboard가 다양한 데이터를 가지고 표현할 수가 없다. 

3. Kibana는 아직까지 로그로부터 상위 n개의 결과를 그래프로 작성하는 Top-N Queries 기능이 없어 이 또한 사용하기 불편하다. (Top-N Queries 기능은 Kibana3 정식 Release 버전에서 추가될 예정이다.
참조 : http://www.elasticsearch.org/blog/whats-cooking-kibana/ )


현재는 ELK Stack이 Splunk비해 사용하기 불편하지만, 경제적인 측면까지 고려한다면 ELK Stack이 Splunk의 대체 Solution으로 유용할것이라 생각한다.



Reference Sites

ELK(Elasticsearch, Logstash, Kibana) Stack

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

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

(3) ELK Stack 연동 : http://www.yongbok.net/blog/real-taime-visitor-analysis-with-logstash-elasticsearch-kibana/

(4) Logstash Docs : http://logstash.net/docs/1.3.3/

(5) Kibana Dashboard 생성 : http://www.elasticsearch.org/videos/make-sense-of-your-big-data/

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

(7) Kibana3 Release GA버전 수정될 사항 : http://www.elasticsearch.org/blog/whats-cooking-kibana/


문서 Format 참고

(1) http://logstash.net/docs/1.4.0.beta1/tutorials/getting-started-with-logstash

(2) http://red-badger.com/blog/2014/02/18/jlt-world-risk-review-rapid-innovation/



2014년 3월 Elasticsearch, Logstash, Kibana의 새로운 버전이 나왔고, 이에 대한 글은 여기를 참조하시면 됩니다.



Posted by minji7

댓글을 달아 주세요

  1. 2014.03.13 12:33  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  2. minji7 2014.03.13 16:18 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요ㅎㅎ

    먼저 Logstash랑 연결이 안되는 것은 Elasticsearch의 버전 문제일듯 합니다. 저는 Elasticsearch 0.90.11 버전을 사용했는데 얼마전에 Elasticsearch 1.0 버전이 새로 나오며 Logstash와 연결이 안되는 현상이 발생하고 있습니다. Elasticsearch 0.90.11 버전은 아래 주소에서 받으실 수 있습니다
    http://www.elasticsearch.org/downloads/0-90-11/

    apache2 디렉토리가 없는것은 apache 설치를 안하셨기 때문입니다. apache를 설치하시면 되겠습니다.

    키바나에선 히스토그램 생성 시 facetPhaseExecutionException 에러만 뜨는 현상은 위의 문제 해결 후 다시 Test 해보시길 바랍니다.

    node name은 Elasticsearch cluster 내에서 해당 노드의 지칭하는 이름입니다. 따라서 Elasticsearch config에서 node name의 주석을 제거하신 후 유일성을 가진 이름을 넣으시면 되겠습니다
    (예 : node.name: "embian")

    index에 대한 정보는 ELK Stack을 구동시키고 Elasticsearch의 Head Plugin이 설치 되어있는 경우
    http://elasticsearch server ip:9200/_plugin/head/ 에서 확인하실 수 있습니다.

  3. sjsj 2014.03.13 19:01  댓글주소  수정/삭제  댓글쓰기

    답변 감사드립니다. 정말 친절하세요 ㅠㅠ

    버전을 바꿔서 다시 설치했습니다. apache라 하면 아파치 서버 말씀하시는 건가요?
    ..apache2 디렉토리는 없구, httpd에 access_log.log가 생성되어서 일단 그걸 집어넣었습니다
    터미널을 보니 logstash에선 따로 에러가 뜨지 않네요. 감사합니다.ㅠ_ㅠ

    facetPhaseExcutionException은 여전히 뜨는데..time stamp
    table 정보는 뜨는걸 보면 키바나와 연동이 된거 같긴 합니다..다만 엘라스틱 서버측을 보니 @timestamp를 찾을 수 없다고 뜨네요. 이건 document에 추가해 주신 건가요?

  4. minji7 2014.03.14 10:06 신고  댓글주소  수정/삭제  댓글쓰기

    일단 apache는 apache server를 말하는게 맞습니다.

    @timestamp는 Logstash가 생성하는 필드이기 때문에 따로 document에 추가해주지 않았습니다.
    @timestamp를 찾을수 없다고 뜨는건 Elasticsearch와 Logstash의 문제라기 보다는 Kibana의 문제인듯합니다.

    제가 Test할 때에는 facetPhaseExcutionException이 발생한적이 없어서 정확한 답변은 못드리겠습니다.

  5. 루단스 2014.04.21 14:58  댓글주소  수정/삭제  댓글쓰기

    정보 감사히 잘 읽었습니다.

    그리고..
    본문 bigdesk 플러그인 설치 주소에 오타가 있는것 같습니다.
    lukas 가 lokas 로 표기가 되어있네요..

    현재 2.4.0 까지 나왔네요.
    plugin -install lukas-vlcek/bigdesk/2.4.0

  6. minji7 2014.04.21 16:04 신고  댓글주소  수정/삭제  댓글쓰기

    네 수정했습니다. 감사합니다.