ELK 스택 구축 (Elasticsearch, Logstash, Kibana, Filebeat)
- IT/빅데이터
- 2020. 2. 11. 19:02
ELK 스택이란?
"Elasticsearch"
"Logstash"
"Kibana"
"Filebeat"
ELK란 데이터 수집 및 분석 툴로 로그분석이나 데이터분석에 쓰이는 툴로써 동작하는 오픈소스 프로젝트의 약자이다. 여기서 각각 ElasticSearch (엘라스틱서치)는 검색 및 분석엔진, Logstash는 수집 로그를 가공 후 ElasticSearch에 전송하는 파이프라인, Kibana는 데이터 시각화를 담당하는 엔진을 담당한다. 여기에 데이터 수집을 하는 Filebeat가 추가되면서 ELK Stack (ELK 스택)이 되었다.
ELK 스택 환경구성
ELK는 전부 우분투(Ubuntu_1) 한곳에 설치할 예정이다. Filebeat 서버는 총 2곳인데 둘다 우분투여서 _1, _2로 나누었다. Ubuntu_2에 웹서버가 있어서 로그를 수집할 서버에 Ubuntu_2도 포함시켰다.
- ELK(ElasticSearch, Logtash, Kibana) 서버 :Ubuntu x64 (192.168.21.143)
- 로그수집 (Filebeat) 서버 : Ubuntu x64, KaliLinux x64 (192.168.21.139)
ELK 스택 (Elasticsearch, Logstash, Kibana, Filebeat) 설치
ELK 스택 (ElasticSearch, Logstash, Kibana, Filebeat) 설치파일들과 추가로 Elasticsearch 설치에 필요한 자바 JDK를 다운받고, 설치해본다.
자바 JDK 설치
Elasticsearch를 설치하기 위해선 먼저 자바 JDK가 설치되어있어야 한다. 2019년 초반까지는 apt-get으로 쉽게 설치가 가능했는데, 오라클 라이센스 정책 변경으로 apt-get으로 설치하려 할 시 아래와 같은 에러('Pakage 'oracle-java8-installer' has no installation candidate')를 마주하게 된다.
구글링해보다가 오라클 라이센스 정책이 바뀐걸 알게됐다. 오라클 페이지에 들어가보니 페이지에도 2019년 4월 16일부터 라이센스가 변경되어있다고 나와있다.
어쨌든, 무료 다운로드가 막힌건 아니다. JDK 다운로드 링크 로 들어가서 JDK를 다운받자. 오라클 계정이 없다면 회원가입을 해주어야 한다. 난 우분투 x64에 설치할 것이기 때문에 'Java SE 8u241, Linux x64'로 다운받아주었다.
다운받은 jdk를 /usr/local/로 옮긴 후 'tar xvzf'로 압축을 풀어준다.
압축이 다 풀리고 나면, 다음과 같이 내부에 jdk 디렉토리를 확인할 수 있다.
이제 윈도우에서 시스템 환경변수를 등록하듯, JAVA_HOME, JRE_HOME 환경변수를 등록하고 PATH에 추가해준다. /etc/profile 에 직접 써준 후 적용시켜도 되지만 그냥 export를 바로 해주는게 편해서 아래와 같이 환경변수를 등록해주었다.
export JAVA_HOME=/usr/local/jdk1.8.0_241
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
정상적으로 잘 설치가 됐다면, 'java -version'을 했을 때, 다음과 같은 결과를 확인할 수 있다.
그래서 이제 logstash를 설치하려고 받아두었던 logstash-5.4.3.deb를 dpkg로 설치하는데 아래와 같은 에러가 발생했다. (/usr/share/logstash/vendor/jruby/bin/jruby: line 388: /usr/bin/java: No such file or directory)
말 그대로 /usr/bin/java 를 못찾겠다는 것이기 때문에 /usr/bin/java에 심볼릭 링크를 생성해주면 해결된다.
ln -s /usr/local/jdk1.8.0_241/bin/java /usr/bin/java
그런데 혹~시 이것으로 해결이 안될 수도 있다. 아예 리셋하고 해봤는데 JAVACMD 환경변수를 등록하고 심볼릭링크를 걸어주는 방법도 가능하다.
어쨌든 심볼릭 링크를 잘 걸어주자. 아래에서 다시 살펴볼 것이지만 logstash가 잘 설치되는 것을 볼 수 있다.
ELK 스택 파일 다운
Elasticsearch, Logstash, Kibana, Filebeat 파일을 전부 wget을 사용해 다운받아준다. 참고로 난 ELK 서버에서도 로그수집을 할것이기 때문에 filebeat 설치까지 같이 진행해주었다.
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.3.deb
wget https://artifacts.elastic.co/downloads/logstash/logstash-5.4.3.deb
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.4.3-amd64.deb
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.4.3-amd64.deb
아래와 같이 하나하나 wget으로 다운을 받아준다.
혹시 몰라서 실행권한을 다 추가해주었다. (chmod +x [파일명]) 따로 캡쳐이미지를 올리지는 않았지만 Ubuntu_2는 로그수집 서버로만 사용할 것이기 때문에 filebeat만 다운, 설치해준다.
ELK 스택 파일 설치
그다음 dpkg를 사용해 다운받은 deb 파일을 각각 설치해준다.
sudo dpkg -i elasticsearch-5.4.3.deb
sudo dpkg -i logstash-5.4.3.deb
sudo dpkg -i kibana-5.4.3-amd64.deb
sudo dpkg -i filebeat-5.4.3-amd64.deb
> dpkg -i elasticsearch-5.4.3.deb
> dpkg -i logstash-5.4.3.deb
> dpkg -i kibana-5.4.3-amd64.deb
> dpkg -i filebeat-5.4.3-amd64.deb (Ubuntu_1)
> dpkg -i filebeat-5.4.3-amd64.deb (Ubuntu_2)
제대로 설치가 되었으면 /etc/ 하위에 각각 디렉토리가 생긴것을 확인할 수 있다.
서비스 등록 및 재시작
ELK 스택 설치를 전부 마쳤으니 해당 서비스를 등록하고 재시작해준다. 당연하지만, 추가하고 싶은 로그 수집 서버가 있다면 원하는 만큼, 해당 PC에 Filebeat 파일을 다운받고, 설치하고, 서비스 등록과 재시작, 아래에 설명된 환경설정 변경까지 해주면 된다.
# elasticsearch
systemctl enable elasticsearch.service
systemctl start elasticsearch.service
systemctl status elasticsearch.service
# logstash
systemctl enable logstash.service
systemctl start logstash.service
systemctl status logstash.service
# kibana
systemctl enable kibana.service
systemctl start kibana.service
systemctl status kibana.service
# Filebeat
systemctl enable filebeat.service
systemctl start filebeat.service
systemctl status filebeat.service
위에 나와있는 방법대로 아래와 같이 systemctl을 사용해서 Elasicsearch, Logstash, Kibana, Filebeat 전부 서비스를 등록하고 시작하고 active 상태임을 확인해준다. 마찬가지로 추가 로그수집 서버로 사용할 Ubuntu_2에도 Filebeat 서비스를 등록하고 시작해준다.
filebeat.yml 설정파일 설정
ELK 스택(Elasticsearch, logstash, kibana, filebeat)의 설정파일들은 /etc/[서비스]/ 디렉토리 아래에 .yml 파일로 확인할 수 있다. 해당 포스팅에서는 filebeat.yml 설정파일에서만 설정을 조금 변경해주려 한다.
filebeat.yml 설정 (Ubuntu_2)
Ubuntu_1은 위에서 봤다시피 ELK가 같이 설치되어 있기 때문에 어차피 host: localhost가 디폴트 설정이기 때문에 따로 Elasticsearch 서버, Logstash 서버를 설정해주거나 할 필요는 없고 apache2 웹서버 로그를 수집하기 위해 filebeat.yml 파일의 paths: 부분에 syslog와 apache2 관련 로그들을 추가해주었다.
filebeat.yml 설정 (Ubuntu_2)
Ubuntu_2는 수집할 로그를 보내야 할 Logstash 서버가 다르므로 먼저 'Logstash output' 부분의 hosts를 Ubuntu_1으로 설정해주었다. Logstash에서 다시 Elasticsearch로 보내기 때문에 'Elasticsearch output 부분은 주석처리 해주었고 기본 포트는 5044인데 변경하지 않았다.
추가로 filebeat.yml 파일의 paths: 부분에 syslog를 추가해주었다.
ELK 스택 구동 확인
이제 다운, 설치, 서비스 등록 및 재시작, 설정파일 설정까지 모두 끝마쳤다. 이제 각 단계가 잘 이루어졌는지 확인하기 위해 몇가지 확인을 해보자.
'localhost:9200/_cat/indices'로 로그를 수집해오는지에 관한 데이터를 확인할 수 있다. 만약 내가 Filebeat를 2곳에 설치했는데 아래 화면에서 filebeat -* 가 2개가 아니라면 설치 혹은 구동 여부를 다시 확인해보아야 한다. 나도 처음에 한개만 올라와서 Ubuntu_2의 filebeat 서비스를 몇번 재시작해주었더니 몇분 후에 올라왔다.
Kibana를 설치한 서버에서 [서버IP]:5601 로 들어가면 아래와 같이 Kibana 사용자 접속 화면을 확인할 수 있다.
Kibana 접속 화면에서 왼편에 Management을 클릭해 Index name or pattern를 'filebeat-*'로 지정해주었다. 그리고 create로 생성을 시켜준다.
그리고 Discover 메뉴에 접속하면, 다음과 같이 Filebeat를 킨 시점에서부터 쌓인 로그 데이터를 볼 수 있다. 이렇게 데이터를 확인했다면 ELK 스택이 전부 제대로 설치되었고 구동되고 있다고 보아도 무방하다.
이번 포스팅에서는 ELK 스택을 구축하고 제대로 돌아가고 있는지 구동 여부도 간단히 확인해보았다. 다음 포스팅에서는 이렇게 힘들게(?) 구축한 ELK 스택을 사용해서 어떤식으로 대용량의 로그들을 모니터링하고 관리할 수 있는지 작성해보려 한다.