본문 바로가기

리눅스 인프라/ElasticStack

ELK 개념과 특징

관련 내용

ELK를 사용해서 여러 Spring server 로그 모으기

개요와 목적

관련 내용 블로그 글에서, ELK를 사용하여, 여러 스프링 서버에서 오는 로그를 모으는 방법에 대해서 알아봤다. 이번 글에서는 ELK의 정의와 특징, 그리고 왜 ELK가 인기가 있는 지 알아보겠다.

ELK란 무엇인가

많이 들 불리는 ELK Stack은 Logstash, Elasticsearch, Kibana, 이 세 오픈 소스를 프로젝트를 의미한다.

Logstash는 여러 장치에서 데이터를 수집하여 원하는 모양으로 변환한 후 Elasticsearch로 전송하는 데이터 처리 파이프라인이다.

  • 데이터 파이프라인이란, 데이터 수집-데이터 변환-데이터저장하는 방법

Elasticsearch는 검색 및 분석 엔진이고, kibana는 ElasticSearch에 있는 데이터를 차트와 그래프로 시각화해주는 프로젝트이다.

그렇다면, Elastic Stack은 무엇인가

ELK Stack이 아닌, Elastic Stack으로도 사람들은 많이 부른다. 어떤 차이가 있을까?

Elastic Stack은 ELK에 Beat가 추가된 프로젝트를 뜻하는 이름이다.

Beat란, 가벼운 데이터 수집기이다. 다양한 기기(사물인터넷, 핸드폰)에서 데이터를 수집 전송할 수 있게 한다. 또한 (Filebeat → 로그와 파일을 전달 / Metricbeat → CPU부터 메모리, NGINX 까지 다양한 시스템 서비스 통계 전달 / Winlogbeat → Windows 이벤트 로그 스트리밍 전달 / Packetbeat → 데이터에 실시간으로 접근해 내용 분석 전달) 이런 데이터들을 Logstash나 Elasticsearch에 전달한다.

ELK의 특이한 Inverted Index(역 인덱스) 구조 RDBMS의 LIKE 검색 보다 빠른 Elastic Search의 키워드 검색

결과부터 말하면, 역 인덱스 구조를 통해 기본적인 인덱스 구조보다 빠르게 키워드가 해당하는 데이터를 빠르게 찾을 수 있다.

왜 역이란 단어를 쓰는지, 기본적인 RDBMS의 인덱스 구조에 대해서 알아보자.

일반적으로 id 와 그에 해당하는 데이터를 저장하는 인덱스 구조를 사용한다.

반면에 ELK는 아래 그림과 같은 역 인덱스 구조를 사용한다.

역 인덱스 구조란 각 데이터에 있는 키워드를 축출하여 Term으로 사용하고, 해당 Term을 가지고 있는 docs들을 id로 저장한다.

RDBMS의 LIKE 검색 보다 빠른 Elastic Search의 키워드 검색

happy라는 단어가 들어간 모든 문장을 찾는다고 했을 때, RDBMS는 모든 row를 탐색하면서 like검색을 통해서 문장을 찾아야 한다. 그래서 문장 목록이 많을 수록 시간이 오래걸린다.

반면에, Elastic은 happy라는 Term에 있는 문장 목록을 바로 찾을 수 있다, 문장 데이터가 아무리 늘어나고 해당 키워드를 찾는 시간이 굉장히 빨라진다.

ELK가 인기 있는 이유

가장 큰 이유는, 위에서 설명한, 빠른 역 인덱스 방식을 통해서 빠른 검색을 할 수 있는 것이다.

그리고 NoSQL처럼 사용이 가능하다.

  • NoSQL DB란, 비관계형 데이터베이스이다. 관계형 데이터는 일정한 패턴의 스키마에 맞춰서 데이터 관리하여 안정성이 높다. 반면에, NoSQL은 다양한 형식의 데이터를 저장할 수 있고, 확장성이 좋다. 반면에 정해진 형식으로 안정성과 DB가 대신 일을 처리해주는 역할이 좀 부족하다.

RESTAPI 형식을 사용하여, Json의 도큐먼트 형식으로 데이터를 저장 관리할 수 있다.


Reference

https://www.elastic.co/kr/what-is/elk-stack

https://esbook.kimjmin.net/06-text-analysis/6.1-indexing-data

https://github.com/ksundong/backend-interview-question

https://velog.io/@yukina1418/검색엔진-Elasticsearch에-대하여