Architecture/ELK

Elastic Stack 아주 조금만 알아보자 - Elastic Stack 이란?

KOOCCI 2019. 11. 12. 02:57

Elastic Stack이란?

통계 서버를 구축하면서, Elastic Stack으로 통계/분석을 진행해야할 프로젝트가 생겼다.

이에 따라, 한가지씩 공부하면서 실무에 적용해보고자 한다.

그렇다면 먼저 내가 알아야할 부분을 하나씩 작성해 보도록 하자.

 

Elastic Stack이란 무엇일까?

흔히, Elastic Stack이라 함은, ElasticSearch, Kibana, Beats, Logstash (ELK Stack)을 말한다.

이 중, 나의 경우는 ElasticSearch와 Logstash를 가장 중점적으로 공부할 것이고, Kibana는 고려 사항, Beats는 선택 사항으로 남겨둘 것이다.

 

각각, 개별적인 정의를 적어보면, 다음과 같다.

  • ElasticSearch
    • JSON기반의 분산형 검색 및 분석 엔진
  • Kibana
    • 확장형 사용자 인터페이스로서, 데이터를 구체적으로 시각화
  • Beats
    • 단말 장치의 데이터를 전송하는 경량 데이터 수집기 플랫폼
  • Logstash
    • 확장형 플러그인 에코시스템으로 구성된 동적 데이터 수집 파이프라인

오픈 소스 기반에서 구축된 Elasticsearch와 Kibana는 로깅에서부터 다양한 작업이 가능하도록 도와준다.

즉, ElasticSearch로 특정 작업을 찾거나, 급증하는 요청을 분석하거나, 어떤 기준에 부합하는 내용을 찾는 등 검색기반으로 대규모 데이터를 손쉽게 저장, 검색, 분석할 수 있다.

 

Kibana특징을 표현할 수 있는 차트들로 시각화하여, 데이터를 탐색할 수 있고, 라이브 프레젠테이션 등 대시보드를 작성할 수 있다.

 

위 두 가지 사항이 데이터를 검색하고 시각화한다면, 모든 소스에서 데이터를 수집하고 전송하는 것은 다른 2가지로 진행할 수 있다.

 

데이터를 수집을 해야, ElasticSearch에서 진행이 가능하기 때문에, Beats를 이용해 앱과 인프라에서 메트릭을 수집/전송하고, Logstash 를 이용해 제3의 데이터 저장소에서 데이터를 풀링이 가능해지면서 모든 데이터를 편리하게 한 곳으로 모을 수 있다.

 


ElasticSearch 설치부터 해볼까?

ElasticSearch 를 다시 한 번 정리해보면, 시간이 갈수록 증가하는 문제를 처리하는 분산형 RESTful 검색 및 분석 엔진이다.

Elastic Stack의 핵심이며, 데이터를 중앙에 저장하여 예상 가능한 항목을 탐색하거나 예상치 못한 항목을 밝혀낼 수 있도록 지원한다.

 

그럼 설치를 먼저 진행하고 하나씩 실습형으로 알아가 보도록 하자.

 

작업 환경은 다음과 같다. (내 컴퓨터에 맞는 환경이니, 개인 환경에 맞춘 환경설정이 필요하다) [2019-11-12 기준 작성]

  • Ubuntu18.04 (Window Subsystem for Linux 활용)
  • JDK 1.8 (ElasticSearch는 1.8이상 버전이 필요)
  • ElasticSearch 7.4.2 (다운로드 링크) > DEB파일 설치로 진행
sudo dpkg -i elasticsearch-7.4.2-amd64.deb

위 명령어로 설치가 완료 되면 다음과 같은 형상이 만들어진다.

  • install 위치 : /usr/share/elasticsearch
  • config File 위치 : /etc/elasticsearch
  • init script 위치 : /etc/init.d/elasticsearch

위 3가지는 지금 당장 보지는 않고, 천천히 진행하도록 하자.

이후에, 서버 시작/종료시 자동으로 elasticsearch를 시작/종료 하고 싶다면 다음과 같이 systemctl로 진행할 수 있다.

sudo systemctl enable elasticsearch.service

 

이외 명령어로 진행은 다음과 같이 가능하다.

sudo service elasticsearch start
sudo service elasticsearch stop
curl -XGET 'localhost:9200' # check if elasticsearch run

ElasticSearch start

curl로 확인을 해보면, 정상적으로 실행된 것이 보일 것이다.

 


ElasticSearch 아주 간단히 알아보자.

그럼 ElasticSearch 내에서 Data Flow용어를 몇가지 알아보도록 하자.

먼저 간단히 관계형 데이터베이스와 ElasticSearch 상의 용어를 비교한 테이블을 보도록 하자. (Naver D2 참고)

 

관계형 데이터베이스 ElasticSearch
Database Index
Table Type
Row Document
Column Field
Schema Mapping
Index Everyting is indexed
SQL Query DSL

위 내용이 바로 눈에 들어오지 않겠지만, 자주 보면서 익혀두도록 하자.

 

그럼 하나의 시나리오를 정해 DataFlow를 그려보도록 하겠다. (inflearn 참고)

"대학 교수님들은 강의를 가르친다."
John 교수님은 Database와 algorithm을 가르친다.
Tom 교수님은 Database를 가르친다.

위 시나리오에서 ElasticSearch는 다음과 같이 저장한다.

 

Data Flow

John이라는 text가 Doc1/Doc2 에서 발견되었으며, Database라는 text가 Doc1/Doc3에서 발견되었다.

그럼 위 상황이 RDB와 어떻게 다른지 보도록 하자.

RDB와 비교

왼쪽과 같이 ElasticSearch의 경우, Keyword가 어떤 Document에 있다고 저장하는 반면, RDB는 내부 내용까지 전부 저장하게 된다.

 

즉, 우리가 검색을 진행할 때, John이란 Keyword를 검색하면, ElasticSearch는 Doc1, Doc2에 있다는 것이 바로 검색되지만 RDB의 경우, Doc1에 가서 John이 있는지, Doc2에 가서 John이 있는 지 등 순차적으로 검색을 해야한다.

 

따라서, ElasticSearch는 해시테이블로서,Big OO(1)의 성능이지만, RDB는 O(n)으로 볼 수 있다. > 매우 빠르다

 

위 내용을 토대로, ElasticSearch의 자료구조를 보면 다음과 같다.

Data Structure

가장 큰 개념은 Index
Index는 Type을 갖고 있으며, Type에는 여러 Document를 가진다.
Document는 공통 Property들을 가진다.

 

앞서, ElasticSearch는 RESTful 이라고 정의내렸었는데, 이를 통해 다음과 같이 연결된다.

ElasticSearch RDB
GET Select
PUT Update
POST Insert
DELETE Delete

즉, 우리가 처음 ElasticSearch를 실행했을 때 확인을 위해 요청한 것처럼, REST API를 통한 요청/응답으로 위 내용을 실행할 수 있고, 다음과 같은 예시를 생각해 볼 수 있을 것이다.

curl -XGET localhost:9200/classes/class/1
select * from class where id =1;
curl -XPOST localhost:9200/classes/class/1 -d '{xxx}'
insert into class values {xxx};
curl -XPUT localhost:9200/classes/class/1 -d '{xxx}'
update class set xxx where id = 1;
curl -XDELETE localhost:9200/classes/class/1
delete from class where id = 1;

 

그럼 다음 포스트부터는 실제로 실습으로서, 생성부터 삭제까지 진행해보도록 하자.


※ Inflearn 강의, Naver D2 블로그 등을 참고해 정리한 내용입니다.

 

1편 > 현재 Post

2편 > Elastic Stack 아주 조금만 알아보자 - ElasticSearch 기본 실습

3편 > Elastic Stack 아주 조금만 알아보자 - ElasticSearch Mapping/Search

4편 > Elastic Stack 아주 조금만 알아보자 - ElasticSearch 구조

5편 > Elastic Stack 아주 조금만 알아보자 - Aggregation

6편 > Elastic Stack 아주 조금만 알아보자 - Kibana

7편 > Elastic Stack 아주 조금만 알아보자 - LogStash

8편 > Elastic Stack 아주 조금만 알아보자 - LogStash 실습 1