Elastic Search, Log Stash, Kibana (ELK Stack) 기초

2020. 4. 5. 00:34Computer Science/Backend

Elastic Search, Log Stash, Kibana 기초


드디어 ELK 형제를 우리 집에 데리고 왔다. 이 삼형제는 (순서대로)데이터를 저장하고, 데이터를 필터링 및 변환 해주고, 다양하게 시각화 해 주는 녀석들이다. 모두 오픈소스다. 요즘 개발자들은 오픈소스를 적재적소에 활용할 줄 아는 능력이 정말 중요해졌다.

 

출처 https://www.elastic.co/kr/

 

보통 ELK라고 해서 Elastic Search -> Log Stash -> Kibana 순서대로 설명하지만, 나는 L -> E -> K 순서로 설명해보겠다. 데이터 흐름 순서가 그렇기 때문이다. 수집 로그들이 log stash를 거쳐 ES에 저장 되고, 그것을 기반으로 Kibana에서 보여주는 방식이다. 

 

Log Stash

다양한 소스에서 데이터를 동시에 수집해 변환하고, 저장소로 전달하는 역할을 한다. 소스의 종류, 사이즈, 형태에 관계 없이 수집한다. 데이터가 로그 스태시를 거칠 때 필터링이 발생하는데, 각 이벤트를 구문 분석하고 명명된 필드를 식별하여 구조를 구축하며, 이를 공통 형식으로 변환 통합해주는 똑똑한 필터를 가지고 있다. 

 

 

또한 로그스태시는 기본적으로 파이프라인 단계마다 이벤트를 버퍼에 담기 위해 인메모리 바운드 큐를 사용하는데, 로그스태시가 비정상 종료된다면 인메모리에 저장된 이벤트는 손실된다. 하지만 똑똑한 로그 스태시는 손실 방지를 위하여 영구큐를 사용한다. 영구큐를 활용하면 비정상 종료후 재시작되어도 데이터의 손실이 없기 때문에 안정성이 보장된다.

 

요약하자면 제한 없는 데이터 수집, 똑똑한 필터링, 원하는 레파지토리로 데이터 전송(ES, HDFS 등)이 로그 스태시가 하는 일이다.

 

Elastic Search

일종의 데이터 저장소다. 줄여서 ES라고 부른다. 로그 스태시로부터 받은 데이터를 검색 및 집계하는 역할을 한다. 아파치 루씬을 기반으로 구축 되었다. 또한 JSON 형식으로 데이터를 저장한다. ES의 실체는 분산형 RestAPI다! 앞서, 일종의 데이터 저장소라고 언급했는데, 일반적인 데이터베이스와 비교해보자면 다음과 같다.

 

RDB Elastic Search
Database Index
Table Type
Column Field
Row Document
파티션 (Partition) 샤드 (Shard)
스키마 (Schema) 매핑 (Mapping)
SQL Query DSL

 

굳이 비교하자면 그렇다는 것이다. 공부하던 와중에 샤드가 무엇인지 모르겠어서 찾아봤다. 샤드(Shard)란, ES에 저장 된 문서를 말한다. 샤드는 여러 다른 컨테이너에 걸쳐 분산되며, 이 샤드는 복제되어 하드웨어 장애 시에 중복되는 데이터 사본을 제공하기 때문에 안정성이 보장된다. 이런 것을 '샤딩'이라고도 한다. 샤딩은 ES가 본질적으로 '분산적'인 성격을 가졌다는 의미로 봐도 좋다는 뜻이다. 샤드와 복제본에 관한 내용은 지금 새벽이라 너무 졸리니까 추후에 추가해 보는 걸로..!

 

 

Kibana

키바나는 ES에 쿼리를 던져서 나온 결과물을 가지고 다양하게 시각화해서 보여준다. ES만의 쿼리 형식이 있는데, 해당 형식에 맞게 쿼리를 던지면 단순 JSON 파일처럼 결과물을 보여주는 것이 기본이다. 키바나의 진가는 대시보드에서 볼 수 있는데, 대시보드를 통해 데이터를 그래프, Word Cloud, Count, 차트, 테이블, 맵 등으로 시각화해서 보여준다. 


ELK에 대해서 요정도 알았으면 60%는 이해했다고 보면 된다. 더 깊은 부분에 대해서는 시간이 나면 다뤄보도록 하겠다. 참고로 회사에서 이런 저런 이유로, 키바나를 대체할 대시보드를 개발해볼까 한다. 다음 포스팅 주제는 스프링이 되는건가.. :)

 

 

+) 오타, 가짜뉴스(ㅋㅋ) 지적은 언제든 환영입니다.