Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

올빼미공방

ElasticSearch로 웹 서비스 로그 분석 시스템 만들기 [1] - Concept, 설치하기 본문

개발/ElasticSearch

ElasticSearch로 웹 서비스 로그 분석 시스템 만들기 [1] - Concept, 설치하기

운좋은올빼미 2019. 7. 24. 10:54

[ElasticSearch 시작하기] - Concept / 설치하기

1. 포스팅을 시작하며

 

안녕하세요! 이번에 T-Workx 인턴으로 Skt Cloud CoE에서 근무를 하게 된 인턴 강덕형입니다.

이번 인턴 기간 중 Elastic Search를 이용한 웹 서비스 로그 분석 시스템 개발을 맡게 되었습니다.

이에 제가 시스템을 개발하면서 학습하였던 내용들을 공유하고자, 아직 미숙하지만 펜을 잡기로 하였습니다.

해당 자료는 Infrean의 ELK 무료 강좌와 Udemy의 ElasticSearch7 and the Elastic Stack을 기반으로 정리한 자료입니다.

많은 피드백 부탁드립니다!  그럼 이제 시작하도록 하겠습니다.

 

2.Concept

2.1. Elastic Search란 무엇인가?

ElasticSearch는 다양한 확장 가능성을 가진 오픈소스 풀텍스트 검색 엔진입니다. ElasticSearch는 방대한 양의 데이터를 신속하게 검색할 수 있습니다. 그렇다면 ElasticSearch의 어떠한 부분이 이를 가능하게 할까요? 바로 ElasticSearch가 데이터를 저장하는 방식입니다.

ElasticSearch는 Inverted Index라는 개념을 이용하여 데이터를 저장합니다.  우선 Document(doc)라는 개념부터 알아보겠습니다. Document는 여러분이 검색을 통해 찾고자 하는 것입니다. 이 Document는 구조화된 Json 입니다.  여러분이 ElasticSearch에 이러한 Document들을 PUT하면, ElasticSearch는 이를 Indexing합니다. 즉  Document 내부의 value와 그 value가 어떠한 Document에 속해 있는가? 라는 매핑을 만드는 것입니다. 위 그림을 보시면 "John"이라는 value에 대응하여 doc1, doc2가 매핑되어 있는 것을 볼 수 있습니다. "John"이라는 값이 doc1, doc2에 속해있기 때문이죠.

이러한 Indexing 결과 만들어진 Table이 Inverted Index입니다. 대응관계를 품고 있는 셈이죠.

 

Inverted Index의 존재로 인하여 우리는 검색 과정을 빠르게 수행할 수 있습니다. 여러분이 "John"이라는 값을 찾고자 한다고 생각해보세요.

RDB의 경우에는 doc1에 들어가 John이 있나 없나 확인하고 있으면 추가하고, doc2에 들어가 있나 없나 확인하고.. 를 반복하여야 합니다. 즉 Document의 개수가 N개일때 O(N) 시간이 걸리는 것입니다.

그러나 ElasticSearch는 해쉬 테이블 방식을 사용하여 "John"을 포함하고 있는 Document를 O(1)시간에 찾을 수 있습니다. 

이처럼 ElasticSearch는 다량의 데이터를 빠르게 검색할 수 있습니다.

2.2 ElasticSearch의 구조

우선 가장 큰 개념은 "Index"입니다. Index는 비슷한 종류의 성질을 가진 Document를 모아둔 것입니다. 이러한 Index는 "Inverted index"와 "mapping"을 포함하고 있습니다. "Inverted index"는 우리가 아까 살펴보았던 "특정 value - 그 value가 어떠한 문서에 속해 있는가?"의 대응관계를 나타내는 Table이고, "Mapping"은 Index에 속해 있는 Document들의 정의된 Schema입니다.

이러한 Index는 여러 개의 Shard로 구성되어 있습니다. 위 사진을 보시죠. Shakespeare가 Index이고 이러한 Index Shakespeare에 속해 있는 Document들은 여러 개의 Shard로 나누어 져서 저장됩니다. Doc1이 Shard 1에 저장되고, Doc 2가 Shard 3에 저장되고.. 이렇게 Document들은 Hash되면서 Shard에 저장되는 것입니다.

이러한 Shard들도 그 역할에 따라 "Primary"와 "Replica"로 나뉩니다. Replica는 Primary의 백업 본입니다. 이렇게 Replica를 둠으로써 ElasticSearch를 구성하고 있는 서버의 특정 노드가 다운되었을 경우에도,  서비스가 지속될 수 있게 하는 것입니다.

Elastic Search에서 Write Request가 발생하였을 경우에는, 새롭게 입력된 값은 Primary에 쓰여집니다. 이후 Replica로 복제됩니다.

Read Request가 발생하였을 경우에는 조금 다릅니다. Primary 와 Replica를 모두 사용해서 읽습니다. 따라서 단순히 Primary 하나만 가지고 있는 것 보다, 더 빠르게 읽을 수 있는 것입니다.

3. 설치하기

3.1 Virtualbox 설치

우리는 Ubuntu Server에 ES를 올리고 개발과 실습을 진행할 것입니다. Ubuntu Server를 설치하기 위하여, VM을 이용합시다.

우선 VirtualBox를 다운로드 받고 설치합니다.

https://www.virtualbox.org/wiki/Downloads

 

[Comment] 설치 과정에서 Mac OS는 설치가 중간에 중단되는 경우가 있을 수 있습니다. 이는 Mac High Sierra 버전부터 발생한 보안 문제로 기인합니다.  환경 설정 > 보안 및 개인정보 보호 > 개발자  'Oracle America, Inc.'의 시스템 소프트웨어가 차단되어 로드할 수 없습니다. 옆의 허용 버튼을 눌러주시면 해결됩니다.

3.2 Ubuntu Server 설치하기

우선 아래 링크에서 Ubuntu Server를 다운받아주세요.

https://ubuntu.com/download/server

두 가지의 버전이 있는데, 우리는 Ubuntu Server 18.04.2 LTS로 진행합니다.

VirtualBox를 실행하신 후, 세팅을 시작합시다. Ram은 2GB이상, 저장 공간은 30GB이상으로 설정합니다. 나머지 부분은 Default로 진행하시면 됩니다. 

Ubuntu Server를 부팅해 볼까요? 

부팅되었습니다.  우선 첫 번째로 마주하는 창은 언어 선택입니다. English로 진행합니다.

계속 Enter를 치시며 Default로 진행합시다.

Configure Proxy 화면에선느 우리는 Proxy를 사용하지 않을 것이기 때문에 Tab을 눌러서 Done으로 이동합니다.이

후 OpenSSH를 만나게 되는데. 우리는 OpenSSH를 원하지 않기 때문에 spacebar를 눌러서 선택하지 않은 상태로 진행합니다.

이후 다양한 소프트웨어를 설치할 것을 권유하는 화면이 등장하나, 우리는 직접 설치할 것이기 때문에 마찬가지로 spacebar를 눌러서 Done으로 갑시다.

Ubuntu Server가 성공적으로 설치되었습니다!

3.3 ElasticSearch 설치하기

 

먼저, Elastic Search를 설치해 봅시다. 아래의 명령어를 순차적으로 입력하시면 됩니다.

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

 

sudo apt-get install apt-transport-https

 

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

 

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

 

[Comment: 이 과정에서 Javajdk 1.8 이상 버전을 요구하는 오류가 발생할 수 있습니다. 오류 내용을 보시면 오류를 해결하기 위한 제안이 있습니다. 이를 그대로 실행하시면 됩니다.]

 

설치되었습니다. 이제 ElasticSearch의 Configuration을 세팅합시다.

 

sudo vi /etc/elasticsearch/elasticsearch.yml

이동하였습니다.

 

우선 node-name을 위와 같이 변경하여 줍니다.

이후 network host도 위와 같이 0.0.0.0로 변경하여줍니다.

 

discovery.seed.hosts 란과 cluster.initialmaster_nodes 란을 위와 같이 변경하여줍니다. 끝났습니다! 

wq를 입력하여 vi를 저장하고 나가줍시다.

 

마지막입니다. 아래의 커맨드를 입력하여 주세요.

 

sudo /bin/systemctl daemon-reload

sudo /bin/systemctl enable elasticsearch.service

sudo /bin/systemctl start elasticsearch.service

 

드디어, 완료되었습니다! 2편에서는 ElasticSearch로 데이터를 다루는 방법을 알아보겠습니다.

Comments