Web_Service/AWS

AWS EC2 ELK의 설치 및 설정

옥뀨 2021. 2. 2. 12:36

ELK란 Elasticsearch, Logstash, Kibana의 소스 프로젝트의 약자이다.

 

각 제품이 서로 연동되어 데이터 수집 및 분석 툴로써 동작하고 뛰어난 확장성과 이식성을 가지고 있기 때문에 다른 여러가지 툴과도 연동이 가능하다는 장점이 있다.

 

Elasticsearch는 검색 및 분석 엔전이다.

 

Logstash는 여러 소스의 데이터를 받아 변환 후 Elasticsearch로 보내는 역할을 한다.

 

Kibana는 Elasticsearch에서 받은 데이터를 시각화한다.

 

처리 순서

1. Logstash에서 수집할 1개 이상의 클라이언트의 데이터를 전송받는다.

2. Logstash에서 전달받은 데이터를 변환하여 Elasticsearch로 전송한다.

3. Elasticsearch로 전달받은 데이터를 저장하고 연동된 Kibana로 데이터를 시각화한다.

 

설치 및 설정

 

해당 과정은 EC2 서버에 로그인 한 상태로 진행한다.

 

설치를 하기 전 소프트웨어 업데이트를 진행한다.

 

$ sudo apt-get update

 

소프트웨어 업데이트

 

업데이트가 완료되면 자바를 설치해준다.

 

$ sudo apt-get install openjdk-8-jdk

 

자바 설치

 

elasticsearch의 GPG 키를 가져온다.

 

$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

 

elasticsearch 키 받기

 

apt-transport-https 패키지를 설치한다.

 

$ sudo apt-get install apt-transport-https

 

 

업데이트할 때마다 자동으로 업데이트가 되도록 elastic 서버를 저장소에 저장해놓는다.

 

$ echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

 

저장소 추가

 

저장소에 추가해줬으니 새로 업데이트를 진행해주고 elasticsearch를 설치해준다.

 

$ sudo apt-get update && sudo apt-get install elasticsearch

 

업데이트 및 elasticsearch 설치

 

kibana 설치도 진행해준다.

 

$ sudo apt-get update && sudo apt-get install kibana

 

kibana 설치

 

서버와 통신하는지 확인할 수 있는 net-tools 패키지, url 서버와 통신할 수 있는 curl 패키지와 apache 패키지를 설치해준다.

 

하단에 불필요한 요소를 지우라는 문구도 확인된다.

 

$ sudo apt-get install net-tools $$ sudo apt-get install curl $$ sudo apt-get install apache2

 

net-tools, curl, apache2 설치

 

불필요한 요소를 제거해준다.

 

$ sudo apt-get autoremove && sudo apt-get clean

 

불필요한 요소 제거

 

elasticsearch나 kibana는 설치가 된 항목이므로 logstach와 filebeat를 설치해준다.

 

$ sudo apt-get install logstash && sudo apt-get install filebeat

 

logstash, filebeat 설치

 

 AWS 페이지로 돌아와 패킷이 들어올 수 있도록 인바운드 규칙을 추가해준다.

 

왼쪽 하단에 [보안 그룹]을 클릭하고 사용 중인 보안 그룹을 선택한다.

 

우측 상단에 [작업] 버튼을 클릭하고 [인바운드 규칙 편집]을 클릭한다.

 

인바운드 설정

 

인바운드 규칙을 설정하는 화면이다.

 

좌측 하단에 [규칙 추가] 버튼을 누르고 5601 포트 번호와 9200 ~ 9300 포트번호를 추가해준다.

 

소스 항목은 "위치 무관"으로 선택해준다.

 

인바운드 규칙 편집

 

인바운드 규칙 편집을 완료했다면 elasticsearch, kibana, logstash, filebeat를 실행한다.

 

$ sudo service elasticsearch start && sudo service kibana start && sudo service kibana start && sudo service filebeat start

 

elasticsearch, kibana, logstash, filebeat 실행

 

curl 명령어를 이용해 9200번 포트로 접근해 정보를 가져온다.

 

정보가 정상적으로 나온다면 포트개방이 정상적으로 되어 있고 통신이 가능하다는 것을 확인할 수 있다.

 

$ curl -XGET 'localhost:9200'

 

 

kibana 설정을 위해 kibana.yml 파일을 편집기를 통해 연다.

 

$ sudo vi /etc/kibana/kibana.yml

 

 

5601번 포트를 열어주고 다른 곳에서 서버와 통신을 허용하기 위해 server_port와 server_host 부분의 주석을 제거한 후 server_host에서 "localhost"을 "0.0.0.0"으로 바꿔준다.

 

kibana 설정

 

다음은 filebeat 설정파일이다.

 

마찬가지로 filebeat.yml 파일을 vi 편집기를 통해 열어준다.

 

$ sudo vi /etc/filebeat/filebeat.yml

 

 

 

filebeat에서 수집할 경로에 syslog와 apache 로그를 추가해준다.

 

/var/log/syslog

/var/log/apache/*.log

추가

 

filebeat 설정

 

apache와 elasticsearch, kibana, filebeat 서비스를 재시작한다.

 

$ sudo service apache2 restart && sudo service elasticsearch restart && sudo service kibana restart && sudo service filebeat restart

 

서비스 재시작

 

다시 9200번 포트로 접근해보면 통신이 정상적으로 이뤄지고 있음을 확인할 수 있다.

 

localhost 통신 확인

 

127.0.0.1 아이피를 9200번 포트로 접속해보면 접속이 안되는데 방화벽 문제일 가능성이 크다.

 

여기서 127.0.0.1 아이피는 loopback 아이피로 자신의 아이피를 가리킨다.

 

$ sudo vi /etc/elasticsearch/elasticsearch.yml

 

elasticsearch 설정 파일을 열고 주석처리된 network.host, http.port, discovery.seed_hosts, cluster.initial_master_nodes 부분의 주석을 해제한다.

 

network.host 항목은 0.0.0.0으로

discovery.seed_hosts 항목은 ["0.0.0.0"]으로 변경해준다.

 

elasticsearch 설정

 

elasticsearch와 kibana 서비스를 재시작해준다.

 

$ sudo service elasticsearch restart && sudo service kibana restart

 

서비스 재시작

 

[EC2 아이피주소]:9200 으로 접속해보면 정상적으로 통신되는 것이 확인가능하다.

 

통신 확인

 

kibana 포트에 해당하는 5601포트에 대해 방화벽을 허용해주고 kibana 서비스를 재시작한다.

 

방화벽 허용

 

EC2 아이피주소를 5601번 포트로 연결하면 정상적으로 elastic을 이용할 수 있음을 알 수 있다.