[검색엔진 라이브서치 개발과정 정리]ELK stack의 설치

2019. 5. 17. 10:15ELK stack

ES는 독립적으로 활용되기 보다는, 보조 툴과 함께 사용된다. 대표적으로 ELK stack으로 불리는데, Elasticsearch logstash, Kibana 라는 세 가지 툴의 조합이다.

Logstash는 로그수집툴이라고 볼 수 있다. 필요한 데이터를 ES에 넣는 역할이다. Kibana는 웹에서 ES를 관리하는 모니터링 툴이다. 둘 다 ES를 필요로 하는 서비스이며, 특히 logstash의 경우 JSON파일이나 JDBC 플러그인을 통해 직접 ES RDBMS를 연동할 수 있다는 장점이 있다. Kibana의 경우 mySQL TODO 처럼 ES에 적용할 명령어에 대한 dev console을 지원하며, 저장된 데이터를 시각적으로 표현하고, ES node 상태에 대한 모니터링을 지원한다. 두 가지 다 먼저 ES가 설치되어있어야 하기 때문에 ES부터 설치를 진행해야한다.

 

ES는 약 1GB의 디스크 공간을 필요로 하며, JVM 1.8 에 맞춰져 있다. OpenJDK의 경우에는 같은 1.8의 버전이어도 확실한 테스트가 진행되어있지 않기 때문에 Oracle JDK를 기준으로 하고 있다.

최신버전은 https://www.elastic.co/downloads/elasticsearch 에서 다운받을 수 있다.

 

일반적으로 ES는 버전업이 무척 빠르며, 최신 릴리즈를 받는 것이 안정적이고 버그가 적다.  그러나 사용 과정에서의 기능, 노하우, 사용자들의 경험이나 문제 발생에 대한 대처법 등은 구버전이 훨씬 더 많은 노하우가 축적되어 있다. 특히 구글에서 최신 버전의 ES에 대한 문제는 공식 홈페이지의 지원 외에는 찾기가 쉽지 않다. 따라서 각자의 개발역량과 필요한 기능을 검토 후에 맞는 버전을 고르는 것이 중요하다. 우리는 6.4.0 버전으로 진행했는데, 그 이유는 6.x 버전이 비교적 최신에 가까운 릴리즈이며, 6.4.0 이후 JavaHigh-Level RESTful Api를 지원하며, 시중에 나온 가장 최신의 ES 관련 참고 서적 역시 6.4.0을 기준으로 쓰여졌기 때문이다. 그러나 여전히 2.x대 버전과 5.x 버전대의 사용자들도 무척 많기 때문에, 버전을 고르는 것은 개발환경과 서비스목표에 따라 달라질 것이다.

 

운영체제에 따라 지원하는 설치파일을 받으면 된다. 데미안/레드햇 기반 리눅스 배포판용은 각각의 명령어를 통해 이용할 수 있다. .zip 파일은 윈도우/리눅스/MacOS 모두 사용가능하며, .tar.gz는 리눅스/맥에 사용가능하다.

 

설치법은 간단하다. 본인이 작업할 디렉토리에 압축파일을 다운받고 해제하면 된다.

Docker를 활용하여 설치하면 기본 설정을 적절하게 잡아주는데, 이는 docker라는 툴부터 준비해야하기 때문에 따로 언급하지 않겠다. 웹 서버에 올리는 경우 웹 서버에 디렉토리를 만들고 운영체제에 맞는 압축파일을 해제하면 된다.

ES의 디렉토리 구조는 버전에 따라 다르지만 기본적으로 아래의 틀에서 거의 벗어나지 않는다.

디렉토리

설명

Bin

Elasticsearch 실행에 필요한 스크립트와 플러그인 설치 스크립트가 있다

Config

Elasticsearch.yml logger.yml 등 설정 파일이 있다

Lib

검색엔진에서 사용하는 라이브러리가 있다

Data

별도 path를 지정하지 않으면 기본 index stroe의 위치가 된다.

Logs

검색엔진에서 기록하는 로그 파일의 위치다.

Plugins

검색엔진에서 사용하는 모든 플러그인이 설치되는 위치다.

Work

임시 파일 경로다.

 

ES의 실행은 bin 폴더에 있는 elasitcsearch 파일을 실행하면 된다. 현재 우리 웹 서버의 경우 ./bin/elasticsearch 라는 명령어로 실행이 가능하다. 데모나이즈를 통해 백그라운드에서 실행시키고 싶다면 ./bin/elasticsearch –d 라는 명령어로 실행하면 된다.

 

실행에 성공시 아래와 같은 로그를 볼 수 있다.

 

설치에 대한 확인은 curl 커맨드를 통해 확인할 수 있다. ES는 설치와 동시에 elasticsearch.yml의 설정에 따라 기본 클러스터를 설정하며, 이렇게 설정된 클러스터의 상태를 REST 통신을 통해 확인할 수 있다.

 

Curl –XGET http://localhost:9200 을 치면 아래와 같은 화면이 나온다.

 

만약 웹브라우저 상에서 확인하고 싶다면 http://localhost:9200 포트를 주소창에 입력하면 되며, 외부에서 접속을 원할 때에는 추가적인 설정이 필요하다.

 

이와 비슷한 JSON 형태의 데이터가 뜬다면 설치와 실행에는 문제가 없음을 확인한 것이다.

 

다음으로 ELK stack L을 담당하는 Logstash의 설치를 진행해보고자 한다.

 

설치방법은 ES와 거의 차이가 없다.

 

https://www.elastic.co/downloads/logstash

 

Download Logstash Free • Get Started Now | Elastic

Want to upgrade? We'll give you a hand. Migration Guide »

www.elastic.co

에서 최신 버전의 logstash를 받을 수 있다. 하지만 ELK의 경우 ES의 버전을 기준으로 서로 버전을 맞춰주는 것이 호환성을 유지하는 데에 도움이 되므로, 6.4.0 버전으로 맞춰주는 것이 좋다.

적절한 폴더에 압축을 풀면 설치는 끝이 난다.

 

Logstash의 경우 실행을 할 때 ES와는 약간 다르다. Logstash는 실행시 특정 설정파일에 의존하여 실행이 되며, 이를 .conf 파일이라고 한다. 따라서 logstash의 명령어는 ./bin/logstash –f /디렉토리경로/logstash.conf 와 같은 형태로 실행을 시켜주어야 한다.

 

Logstash.conf 에는 데이터의 input output에 대한 설정이 들어있으며, https://www.elastic.co/guide/en/logstash/current/configuration.html

 

Configuring Logstash | Logstash Reference [7.0] | Elastic

To configure Logstash, you create a config file that specifies which plugins you want to use and settings for each plugin. You can reference event fields in a configuration and use conditionals to process events when they meet certain criteria. When you ru

www.elastic.co

를 통해 참고할 수 있다.

 

기본적으로는

input { stdin { } }
output {
  elasticsearch { hosts => ["localhost:9200"] }
  stdout { codec => rubydebug }
}

위와 같은 형태로 잡혀있다. 자세한 구조는

https://www.elastic.co/guide/en/logstash/current/configuration-file-structure.html

에서 참고할 수 있다.                                     

 

다음으로는 Kibana의 설치를 알아보겠다.

 

Kibana 역시 공식 홈페이지를 통해 다운 받을 수 있다.

https://www.elastic.co/kr/downloads/kibana

kibana를 설치하는 것 역시 위와 동일하다. ES의 버전과 같은 버전을 다운 받은 뒤, 적절한 폴더에 압축을 해제해주면 된다. 실행은 ES와 같이 ./bin/kibana 와 같은 명령어로 실행할 수 있다.

 

Kibana의 경우 config 폴더에 있는 kibana.yml 파일에서 실행 설정을 할 수 있다. 이 파일에서는 # 이 문장 앞에 있을 경우 주석처리가 된다. 따라서 설정을 변경하는 부분은 앞의 #을 지워주어야 한다. 처음에는 elasticsearch.url 이라는 부분을 설정해 줘야하는데, kibana ES와 같은 곳에 설치하기 때문에 보통은 “http://localhost:9200”으로 설정한다.

 

Kibana의 경우 ES가 실행되어있지 않으면 에러가 발생하며 kibana가 실행되지 않는다. 따라서 ES가 실행되어 있음을 확인 후에 kibana를 실행하면 다음과 같은 화면을 확인해 볼 수 있다.

 

위의 화면이 나왔다면 url 접속을 통해 kibana가 동작하는 것을 확인할 수 있다. Kibana의 기본 포트는 5601번을 사용한다. Kibana는 기본적으로 ES front 툴이기 때문에 웹브라우저에서 접속을 할 수 있다.

 

http://localhost:5601 로 접속시 kibana의 화면이 뜨면서 ES를 확인할 수 있다면 성공이다. 아래와 비슷한 화면이다.

 

세 가지 설치와 실행이 끝났다면 기본적인 실행환경은 갖춰진 셈이다.