개인 블로그 이전하였습니다! https://mobilog.me 아무데나 클릭하면 닫힙니다.
AWS EC2에 엘라스틱 서치 설치하기 (apt)

 

우테캠 프로젝트 중에서 엘라스틱 서치를 사용하게 되었는데 

그 설치과정이 오래걸리기도해서 기록차 남겨둘려고 한다. :)

 

중간에 ec2의 메모리용량 오류 관련해서도 추가해두었다.

 

우선 설치할 목록

Elastic Stack
sudo apt-get install openjdk-8-jdk
sudo apt-get install elasticsearch
sudo apt-get install kibana
sudo apt-get install logstash
sudo apt-get install filebeat

부가적인 설치파일 (해도되고 안해도된다.)
sudo apt-get install apt-transport-https
sudo apt-get install net-tools
sudo apt-get install curl

Elastic Stack

엘라스틱 서치를 사용하기 위한 기본적으로 까는 툴킷 모음 이라 생각하면 된다. 최근에는 사용량이 많아져 beat라는 것이 추가되었는데 이후 ELK라는 명칭에서 Elastic Stack으로 명칭이 변경되었다.
느낌상으로는 Mysql 깔면 보통 워크벤치 같은 것들로 연동해서 사용하는데 여기서는 ElasticSearch가 Mysql 역할을 담당하고 Kibana가 워크벤치 역할을 하고있다는 생각이다.

Kibana

어딘가의 챔피언 이름 같다..

Elastic Stack을 들여다보는 창
Kibana는 Elasticsearch 데이터를 시각화하고 Elastic Stack을 탐색하게 해주는 무료 오픈 소스 인터페이스입니다. 쿼리 작업량 추적부터 앱을 통한 요청 흐름 방식에 대한 이해에 이르기까지 무엇이든 해보세요.

엘라스틱 서치용 GUI이다. 보니까 없으면 엘라스틱 서치 사용하기 버거울듯 하다.

로그 스태시

Logstash 소개

Logstash는 실시간 파이프라인 기능을 가진 오픈소스 데이터 수집 엔진입니다. Logstash는 서로 다른 소스의 데이터를 탄력적으로 통합하고 사용자가 선택한 목적지로 데이터를 정규화할 수 있습니다. 다양한 고급 다운스트림 분석 및 시각화 활용 사례를 위해 모든 데이터를 정리하고 대중화(democratization)합니다.

Logstash는 근본적으로 로그 수집의 혁신을 주도해 왔으며 그 기능은 이러한 활용 사례 이외의 영역으로 확장되고 있습니다. 어떤 유형의 이벤트도 다양한 입력, 필터, 출력 플러그인을 통해 강화하고 전환할 수 있으며 기본 제공되는 여러 코덱으로 수집(ingestion) 프로세스를 한층 더 간소화할 수 있습니다. Logstash로 더 방대하고 다양한 데이터를 활용함으로써 더 신속하게 인사이트를 개발할 수 있습니다.

Logstash의 강점

Elasticsearch 등을 위한 강력한 수집 기능

뛰어난 Elasticsearch 및 Kibana 시너지 효과를 발휘하는, 수평 확장이 가능한 데이터 처리 파이프라인

플러그형 파이프라인 아키텍처

다양한 입력, 필터, 출력을 믹스매치하고 조정하면서 파이프라인에서 조화롭게 운용

커뮤니티에서 확장 가능하고 개발자에게 편리한 플러그인 에코시스템

200여 개 플러그인 사용 가능, 또한 직접 플러그인을 만들어 제공할 수 있는 유연성

여기서는 Mysql 데이터 동기화를 위해서 사용하게 될 예정이다.

FileBeat

량 로그 수집기

보안 장치, 클라우드, 컨테이너, 호스트 또는 OT에서 수집하든 상관없이, Filebeat는 로그와 파일을 경량화된 방식으로 전달하고 중앙 집중화하여 작업을 보다 간편하게 만들어 주는 역할을 합니다.

Filebeat를 시작한 후 로그 UI를 열어서 파일이 Kibana 내에서 tail되는 것을 보세요. 검색 바를 사용해 서비스, 앱, 호스트, 데이터 센터 또는 다른 기준별로 필터링하여 집계 로그 전체에 걸쳐 이상한 동작을 추적합니다.

경량 로그 수집기다. (제대로 사용하지는 않았다..)

본격적인 설치

엘라스틱 서치는 자바가 필요하다
자바를 설치하자

sudo apt-get install openjdk-8-jdk
$ java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-8u292-b10-0ubuntu1~20.04-b10)
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)
$ javac -version
javac 1.8.0_292

엘라스틱 서치 설치

sudo apt-get install elasticsearch

어림도 없지 절대 안된다.
첫술에 배부를수가 없지

How to Install Elasticsearch on Ubuntu 18.04

다음 wget을 사용하여 리포지토리의 GPG 가져오기

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

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

sudo sh -c 'echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" > /etc/apt/sources.list.d/elastic-7.x.list'

드디어 엘라스틱 서치 설치를 맛볼차례이다

sudo apt-get update
sudo apt-get install elasticsearch

엘라스틱 서치를 Gui 형태로 볼수있게 해주는 키바나 설치.

sudo apt-get install kibana

웃긴건 키바나는 엘라스틱 설치할때와 같이 wget으로 안가져와도 된다는점...
아니면 elastic GPG를 가져올때 같이 가져오는 것일 수도??

추가 설치 파일 logstash, filebeat.

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

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

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

설치시 중간에 불필요한 요소가 있다고 중간 문구가 나타나기도 한다
다음과 같은 명령어를 통해 불필요한 요소를 제거해준다. (무지성으로 그냥 해도 된다.)

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

자이제 실행 !!

sudo service elasticsearch start && sudo service logstash start && sudo service kibana start && sudo service filebeat start

자 !! 실행이 되었을까??
여전히 어림도 없다

Job for elasticsearch.service failed because a fatal signal was delivered to the control process.

아무리 찾아봐도 잘 안나오길래 다시 설치도 몇번해보고 별 오만 삽질을 했으나
결국 로그에서 힌트를 얻었다...

시스템 : 야 이거 실행 끌꺼야.  
왜 ??   
시스템 : 니가 해결해.  
뭐땜에 끄는데 ?   
시스템 : ''   
????????????

처음 문구를 봤을 때 요런 느낌이었는데 한두시간 정도 지나고 보니 '시스템이 서비스를 강제로 끌만한 이유가 뭐가 있지'라는 생각을 해보니 답이 대충 나오더라...

메모리 문제였다...;;
이런 오류가 있다면 서버 용량 확인하고.

  1. 스왑메모리를 추가하거나
  2. 메모리 용량을 늘리면 된다.

이제 진짜 시작 !

sudo service elasticsearch start && sudo service logstash start && sudo service kibana start && sudo service filebeat start

짜잔! 여기에는 보이지는 않지만 나는 아무런 문제없이 전부 실행이 잘 되었다.
그럼 설치 끝 !

config 수정

mysql이나 다른 db나 여러가지 설치시 빠질수 없는 것이 바로 config 수정이다. 다른 개발언어들도 설치하면 일반적으로 config 수정하기도 하고...
물론 이것도 빠질수가 없다. 더군다나 ELK Stack으로 4개나 설치해버렸으니.... 4개나 !!! 해주면 된다. :)

EC2 인바운드 규칙 수정

먼저 규칙 추가가 필요하다. 무려 2개나 !!

  1. 엘라스틱 서치 DB 접근용 포트 (Mysql에서 3306포트를 자동 지정한것 처럼 엘라스틱 서치도 있다.)
    • 9200 또는 9300인데 어느 곳은 9200 - 9300으로 설정하기도 한다
  2. Kibana용 포트
    • 5601번 포트로 기본적으로 설정되어 있다.
    • 왜 얘도 포트를 잡아먹냐?? 한다면 워크벤치가 서버에 같이 있다고 생각하면 될듯 하다

스크린샷 2021-08-16 오후 7 54 33

개방포트는 다열어주면 안되긴하는데... 정아니다 싶으면 팀 또는 내 아이피만 열어두자
(귀찮아서 안했다...)

완료가 되었다면.
curl 명령어를 이용해 9200번 포트로 접근해 정보를 가져온다.
정보가 정상적으로 나온다면 포트개방이 정상적으로 되어 있고 통신이 가능하다는 것을 확인할 수 있다

$ curl -XGET 'localhost:9200'

아래와 같은 문구가 나오면 성공쓰

{
  "name" : "ip-172-31-11-199",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "5b8xR2LQTkSZ-cnX_sCCHQ",
  "version" : {
    "number" : "7.14.0",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "dd5a0a2acaa2045ff9624f3729fc8a6f40835aa1",
    "build_date" : "2021-07-29T20:49:32.864135063Z",
    "build_snapshot" : false,
    "lucene_version" : "8.9.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

Kibana 설정

일반적으로 설정파일은 다음과 같은 경로에 있다 열어서 수정해주자

sudo vi /etc/kibana/kibana.yml

스크린샷 2021-08-16 오후 6 59 41

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

filebeat 설정

다음은 filebeat 설정파일이다. 여기서는 로그 수집경로를 추가하기 위함이다.
키바나와 마찬가지로 경로는 일반적으로 다음과 같다.
열어서 수정해주자

sudo vi /etc/filebeat/filebeat.yml
paths:
 - /var/log/*.log
 - /var/log/syslog
 - /var/log/(nginx 또는 apache2)/*.log //웹서버가 있다면 추가

단순 로그 수집용으로 검색엔진을 만드려고 했던 프로젝트와 잘 맞지않았고 불필요했기 때문에
설치만 하고 사용하지는 않았다.

그리고 filebeat.yml 파일이 안보여서 안했다.;;;

설정 완료 재시작 !

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

아니다 사실 안끝났다...;;;

엘라스틱 서치 설정

일반적으로 아래와 같은 경로에 있다.

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"]으로 변경해준다.

위 내용은 전체개방이므로 보안상 위험하니
추후에 특정 호스트만 추가하는 방식으로 하면 더 좋을 것 같다.

스크린샷 2021-08-16 오후 7 03 59

진짜 설정 끝

sudo service elasticsearch restart && sudo service kibana restart

서버 주소로 9200 포트와 5601 포트를 접속해보면
각각 엘라스틱서치 데이터 페이지, 키바나 페이지가 나타날것이다 !

스크린샷 2021-08-16 오후 8 22 26

참고내용

엘라스틱서치 설치하기
how-to-install-elasticsearch-on-ubuntu-18-04