Skip to content

Latest commit

 

History

History
197 lines (129 loc) · 19.8 KB

chapter01.md

File metadata and controls

197 lines (129 loc) · 19.8 KB

01. 엘라스틱 스택이란

1.1. 엘라스틱서치의 탄생

엘라스틱서치(Elasticsearch)는 전문 검색 기능을 제공하는 강력한 소프트웨어의 필요성에 의해 등장하게 되었습니다.

엘라스틱서치가 탄생하게 된 과정은 다음과 같습니다.

  1. 1999년 더그 커팅(Doug Cutting)에 의해 루씬(Lucene) 탄생
  2. 2001년 아파치 자카르타(Jakarta)에 루씬 합류
  3. 2005년 2월 루씬은 독자적인 아파치 프로젝트로 분리됨
  4. 2004년 CNET 네트워크에서 웹사이트 검색을 위한 검색 엔진 개발
  5. 2006년 CNET 네트워크에서 검색 엔진 소스 코드를 아파치 재단에 기부하여 솔라(Solr) 탄생
  6. 2010년 샤이 배넌(Shy Banon)에 의해 루씬 기반의 엘라스틱서치 탄생
    • 처음부터 분산 환경을 위한 솔루션, HTTP상에서 JSON으로 인터페이스를 지원하는 솔루션, 자바 이외에도 다양한 프로그래밍 언어를 지원하는 솔루션 표방
  7. 2010년 3월 루씬과 솔라 통합
    • 2021년 2월 솔라는 루씬에서 분리되어 완전히 독립된 아파치 최상위 프로젝트로 자리 잡음

1.2. 엘라스틱 스택으로 발전

전문 검색은 대량의 데이터를 저장해서 처리하는 한 가지 방법에 불과하며, 다양한 사용 사례를 유연하게 지원하지 못합니다. 유연성을 확보하려면 데이터를 수집, 가공, 저장, 분석, 시각화하는 일련의 파이프라인 구성이 필요했고, 이를 위해 다양한 오픈소스 소프트웨어를 조합해야하는 불편함이 발생했습니다. 이러한 불편함을 개선하기 위해 샤이 배넌은 2012년 로그스태시(Logstash)를 개발하고 있던 요르단 시셀(Jordan Sissel)과 키바나(Kibana)를 개발하고 있던 라시드 칸(Rashid Khan)과 함께 팀을 결성하여 ELK 스택(Stack) 을 개발했습니다. 그리고 2015년 패킷비트(Packetbeat)라는 회사와 연합하여 경량 데이터 수집기인 비츠(Beat)가 탄생하게 되고, 여러 오픈소스 소프트웨어가 합쳐진 결과 다음과 같은 엘라스틱 스택(Elastic Stack) 이 완성되었습니다.

image

초창기에는 느슨한 형태로 개발되어 버전 번호가 제각각 붙어 호환성을 유지하기가 어려웠으나, 2015년 10월 버전을 동일하게 맞춘 제품을 동시에 출시해서 안정적인 기반을 확보하게 되었습니다.

1.3. 엘라스틱 스택의 구성요소

엘라스틱 스택의 구성 요소에 대해 간략하게 설명하면 다음과 같습니다.

  • 비츠, 로그스태시 : 데이터를 수집하고 가공하는 역할
  • 엘라스틱서치 : 데이터를 저장하고 분석하는 역할
  • 키바나 : 엘라스틱서치에 저장된 데이터를 시각화하고 모니터링하는 역할

1.3.1. 엘라스틱서치 : 분산 검색 엔진

검색 엔진이란 내부적으로 각 도큐먼트를 인덱싱하고 빠르게 검색하는 데 사용하는 기술을 의미하며, 이러한 검색 엔진을 활용해 검색 시스템을 구축할 수 있습니다. 엘라스틱서치는 검색 엔진이자 일종의 NoSQL로 보며, 다음과 같은 특징을 가집니다. 어떠한 점에서 NoSQL인지 궁금하다면 공식 블로그 내용을 참고해주시길 바랍니다.

  • 모든 레코드를 JSON 도큐먼트 형태로 입력 및 관리
  • 쿼리한 결과에 대해 일치하는 원본 도큐먼트 반환
  • 텍스트, 숫자, 날짜, IP 주소, 지리 정보 등 다양한 데이터 타입 지원
  • 최적화된 자료구조를 바탕으로 병렬 처리 및 분산 처리 가능
    • 텍스트나 도큐먼트 : 인덱싱 시점 분석 → 용어 단위로 분해 → 역인덱스 사전 구축
    • 숫자나 키워드 : 집계에 최적화된 컬럼 기반 자료구조를 저장
  • 스코어링(scoring, 연관도) 에 따른 정렬
    • 검색어에 대한 유사도 스코어를 기반으로 한 정렬
    • 다양한 스코어링 방법을 포함해 사용자가 정렬 방식을 다양하게 정의 가능
  • 노드 간 복제 기능으로 인해 일부 노드가 다운되더라도 정상적으로 서비스 지속 가능
  • 모든 통신을 REST API 이용
    • 프로그래밍 언어와 무관하게 사용자가 쉽게 접근 가능 ⇒ 활용도↑
  • 저장 공간이 크게 압축되지 않고 시스템 리소스를 많이 사용
  • 반정규화를 기본으로 모델링해야 함
    • DSL(Domain Specific Language) 쿼리를 채용하여 JOIN 쿼리 사용이 사실상 어려움
  • 인덱스가 불변의 자료구조이기 때문에 도큐먼트 수정/삭제 비용이 저렴하지 않음

엘라스틱서치 클러스터는 아래 그림과 유사하게 분산 시스템으로 구성합니다. 복수의 루씬 인스턴스를 병렬로 배치하고 분산 처리하기 때문에 검색 속도를 무한히 확장할 수 있습니다. 이론적으로는 충분한 크기의 엘라스틱서치 클러스터가 구성되어 있다면, 데이터 양에 무관하게 1초 이내의 응답 속도를 기대할 수 있습니다.

image

1.3.2. 키바나 : 시각화와 엘라스틱서치 관리 도구

키바나는 엘라스틱 스택의 UI를 담당하며, 아래 기능을 포함한 여러 기능을 제공합니다.

  • 엘라스틱서치에 대한 대부분의 관리 기능, API를 실행할 수 있는 콘솔, 솔루션 페이지들
  • 스택의 각 구성요소들을 위한 모니터링 페이지

키바나는 엘라스틱서치 기반의 시각화 도구로서, 가장 중요한 기능은 시각화대시보드 입니다. 라인 차트, 파이 차트 등 여러 차트와 테이블, 지도 등 다양한 시각화 요소들을 제공하며, 이러한 시각화 요소들을 한 화면에 마음대로 배치하고 실시간으로 업데이트할 수 있는 기능이 대시보드입니다. 대시보드에서는 실시간 모니터링이나 데이터 분석도 가능합니다.


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

1.3.3. 로그스태시 : 이벤트 수집과 정제를 위한 도구

로그스태시는 다음과 같은 방식으로 동작하며, 다양한 소스로부터 로그를 수집하고, 다양한 플랫폼으로 데이터를 전송합니다. 이렇듯 로그스태시는 형식에 무관하게 데이터를 동적으로 수집, 변환, 전송하는 구조로 되어 있습니다. 그렇기에 비구조적인 데이터에서 구조를 도출할 수 있습니다.

image

로그스태시는 다음과 같은 특징을 가집니다.

  • 데이터 수집과 가공 기능 제공
  • 다양한 소스로부터 로그 수집 가능
  • 필터 기능을 통해 데이터를 분석하기 쉬운 형태로 정제
  • 다양한 플랫폼으로 정제된 데이터 전송
  • 200개 이상의 플러그인을 통해 별도의 코딩 없이 설정만으로 로그 가공 가능
  • 엘라스틱서치의 인덱싱 성능을 최적화하기 위한 배치 처리 및 병렬 처리 가능
  • 영속적인 큐를 사용해 현재 처리 중인 이벤트의 최소 1회 전송 보장
  • 수집 중인 데이터양이 급증하는 부하 상황에서도 안정성 보장

이러한 특징 덕분에 로그스태시는 커스텀 애플리케이션으로 로그 수집을 하는 것보다 관리나 안정성 측면에서 많은 장점을 가집니다. 그러나 다양한 필터와 설정을 지원하는 만큼 무겁기 때문에 수집을 하는 용도로 사용하기에는 활용도가 떨어질 수 있습니다. 단순히 수집을 하는 것이 목적이라면 로그스태시를 사용하는 것보다 비츠를 추천드립니다.

1.3.4. 비츠 : 엣지단에서 동작하는 경량 수집 도구

비츠는 로그 수집, 시스템 지표 수집 등 특정 목적에 최적화된 경량 에이전트이며, 가볍기로 유명한 Go 프로그래밍 언어로 작성되었습니다. 로그스태시 수준의 복잡한 이벤트 가공은 지원하지 않지만, 대신 가벼워서 비교적 호스트에 부담없이 설치할 수 있습니다. 특정 비츠는 모듈을 제공하여, 별도의 설정 없이도 손쉽게 이벤트를 수집할 수 있습니다.

흔히 비츠에서는 다음과 같이 각 서비스 호스트의 정보를 수집하고, 로그스태시에서 이를 취합 및 가공하여 엘라스틱서치로 전송하는 형태의 아키텍처가 많이 사용됩니다.

image
출처 : https://www.elastic.co/guide/en/beats/libbeat/7.10/beats-reference.html

1.3.5. 기타 솔루션

이 외에도 엘라스틱 스택에는 APM, SIEM, 인프라 모니터링 등의 솔루션이 포함되어 있습니다.

  • APM : 애플리케이션 성능 모니터링 솔루션
  • SIEM : 보안 이벤트 분석 솔루션
  • 인프라 모니터링 : 컨테이너나 다수의 서비스를 쉽게 모니터링하기 위한 솔루션

1.4. 엘라스틱 스택의 용도

1.4.1. 전문 검색 엔진

"전문"은 단순한 문장부터 뉴스 기사나 논문 등 다양한 글의 전체 내용을 의미합니다. 이러한 전문을 빠르고 정확하게 검색하려면, 전문을 용어(terms) 단위로 분석해 인덱싱해두고 이를 기반으로 검색을 수행하는 역인데싱 기법이 많이 활용됩니다. 직접 구현할 수도 있지만, 엘라스틱서치 같은 검색 엔진을 활용하는 것을 추천합니다.

엘라스틱 스택에는 용어 분석을 위한 다양한 언어별 분석기가 준비되어 있고, 유사도 스코어링을 위한 다양한 방법을 제공합니다. 그리고 도큐먼트 수집 단계에서부터 로그스태시를 통해 도움을 주며, 키바나를 이용해 별도의 UI를 구현하지 않아도 검색 동작을 테스트해 볼 수 있습니다.

검색 엔진 용도로 엘라스틱서치를 활용할 때는, 일반적으로 다른 용도에 비해 도큐먼트 양이 많지 않아 상대적으로 적은 클러스터로도 충분합니다. 그리고 동일 인덱스에 대한 검색 성능을 높이고 싶다면, 클러스터가 아닌 레플리카 수를 늘리면 됩니다. 여기서 레플리카는 "엘라스틱서치 인덱스 도큐먼트를 분산해서 저장하는 저장소의 복제본"이며, 더 자세한 정보가 궁금하시다면 책의 13. 클러스터와 노드 구성을 확인하시길 바랍니다.

1.4.2. 로그 통합 분석

엘라스틱 스택은 여러 장비와 서비스에서 발생하는 로그의 통합 및 검색에 최적화된 솔루션입니다. 다양한 환경에서 생성되는 로그를 별도의 복잡한 구성 없이 바로 수집 가능합니다.

파일 비트를 사용하면 내장된 모듈을 이용해 별도의 설정 없이도 빠르게 수집할 수 있으며, 적은 리소스를 사용합니다. 로그스태시는 다양한 필터 기능이나 엘라스틱서치의 수집 파이프라인 기능으로 수집된 로그를 일원화된 형태로 가공할 수 있습니다. 그리고 엘라스틱서치는 대용량 로그에 대한 빠른 인덱싱과 텍스트 검색을 제공하며, 여러 서비스 로그에 대한 연관 분석이나 교차 분석을 가능하게 합니다. 마지막으로, 키바나에서 로그 UI나 대시보드를 통해 시계열로 발생하는 로그들을 직관적으로 모니터링할 수 있습니다.

참고로, 비츠의 모듈을 사용할 경우, 엘라스틱스택에서 제공하는 ECS(Elastic Common Schema) 구조에 맞춰 로그를 인덱싱합니다. 이 기능을 통해 다른 서비스들을 같은 스키마에 매핑함으로써 연관 분석을 용이하게 해줍니다. 커스텀 애플리케이션의 로그를 수집하더라도 ECS 포맷에 맞춘다면 엘라스틱 스택의 각종 기능들과 손쉬운 연계를 할 수 있습니다. ECS에 대한 자세한 내용은 공식문서를 참고하시길 바랍니다.

1.4.3. 보안 이벤트 분석

SIEM이나 ESM 등의 솔루션은 조직 내에 속한 다양한 장비들로부터 보안 이벤트를 수집하고 분석할 수 있게 하려는 목적으로 만들어졌습니다. 실시간으로 이벤트들을 수집하며, 엔드 포인트 활동, 인증 로그, DNS 트래ㅣ픽, 이상 징후, 불법적인 로그인 시도, 사용자 접근 패턴 등의 문제를 빠르게 찾아내며, 고유한 탐지 규칙 관리 또한 가능합니다.

1.4.4. 애플리케이션 성능 분석

엘라스틱에서는 엘라스틱 APM이라고 하는 성능 모니터링을 제공합니다. 이러한 엘라스틱 APM은 다음과 같은 특징을 가집니다.

  • 서비스 지도를 통한 서비스 연결 관계 파악
  • 트랜잭션 분산 추적
  • 정보 기능을 사용한 즉각적인 대응
  • 자바, 노드, PHP, 닷넷과 같은 다양한 프로그래밍 언어 지원
  • 머신러닝을 사용한 비정상적인 응답 시간 탐지

엘라스틱 APM에서 모니터링한 내용은 키바나에서 제공되는 UI를 통해 분석할 수 있습니다. 엘라스틱 APM이 전문 솔루션에 비해 부족할수도 있지만, 커스터마이징을 통한 자신의 비즈니스 로직에 최적화된 모니터링 솔루션을 구축할 수 있게 해줍니다.

1.4.5. 머신러닝

유료 라이선스를 구매할 경우 사용할 수 있는 기능 중 하나이며, 여기서는 자세한 내용에 대해 생략하도록 하겠습니다.

1.5. 빅데이터 플랫폼의 일부로 동작하는 엘라스틱 스택

1.5.1 엔터프라이즈 데이터 버스인 카프카와 연동

아파치 카프카는 분산 데이터 스트리밍 플랫폼으로, 대량의 데이터를 실시간으로 배포하는데 최적화되어 있습니다. 카프카를 사용하면, 엘라스틱서치의 인덱싱 성능이 순간적으로 충분하지 않거나 로그스태시나 엘라스틱서치의 불안정으로 정상적인 인덱싱이 불가능할 때도 데이터 유실이 방지되며, 타 시스템과 데이터 연계가 손쉬워진다는 장점이 있습니다. 주로, 아래와 같은 구조로 많이 사용합니다.

image

1.5.2. 하둡 생태계와 연동

es-hadoop 모듈을 사용하면 스파크에서 엘라스틱서치 API를 사용해 도큐먼트를 읽어 들이고, 반대로 인덱싱하는 등 서로 상호작용을 수행할 수 있습니다.

1.6. 유사 제품과 비교

1.6.1. 엘라스틱서치의 유사 제품군

이전에도 말했듯 엘라스틱서치는 검색 엔진이자 NoSQL 데이터베이스로도 볼 수 있습니다. 다른 데이터베이스와 어떠한 차이가 있는지 표를 통해 살펴봅시다.

엘라스틱서치 몽고디비 MySQL
분류 검색 엔진 도규먼트 저장소 관계형 데이터베이스
최초 릴리스 2010년 2009년 1995년
스키마 자동 생성 자유 필요
인터페이스 REST API 전용 프로토콜 JDBC/ODBC
분산 저장 샤딩 샤딩 별도 제품으로 지원
트랜잭션 미지원 부분 지원 지원
JOIN 미지원 최근 도큐먼트 단위로 지원 시작 지원
특징 다양한 데이터 유형에 대한 빠른 검색/집계 높은 활용성/범용성 뛰어난 데이터 무결성

이번에는 엘라스틱서치를 전문 검색 엔진인 솔라와 비교해보겠습니다. 솔라도 엘라스틱서치와 마찬가지로 루씬 기반으로 만들어졌기에 상당히 유사합니다. 그러나 엘라스틱서치는 로그 분석, 위치 기반 데이터 분석, 시각화에 적합하고, 솔라는 정적 데이터를 처리하기에 적합합니다. 또한, 엘라스틱서치는 솔라보다 월등히 많은 데이터 소스와 쿼리 DSL은 물론, 다양한 쿼리 파서를 지원하고 있습니다.

1.6.2. 로그스태시/비츠의 유사 제품군

로그스태시와 비츠의 조합과 유사한 제품으로는 플루언트디(Fluentd)가 있습니다. 플루언트디는 로그스태시와 설정의 형태만 다를 뿐 기능상으론 거의 동일한 역할을 수행할 수 있으며, CNCF스택으로 쿠버네티스나 오픈트레이싱을 사용하는 경우 사실상 필수 구성요소입니다. 그러나 엘라스틱 스택에서는 엘라스틱서치나 키바나와 연계하여 사용하는 데 한계가 있으므로 로그스태시와 비츠의 조합을 사용하길 권장합니다.

1.6.3 키바나의 유사 제품군

키바나와 유사한 시각화 도구에 대해서는 표로 살펴보겠습니다.

키바나 그라파나 태블로
실행 환경 웹 서비스 웹 서비스 설치/웹 서비스 모두 제공
데이터 소스 엘라스틱서치 엘라스틱서치, 그라파이트, 몽고디비, 프로메테우스 등 관계형 데이터베이스, 엑셀 파일, JSON 파일, 드롭박스 등
특징 실시간 대시보드 외에도 캔버스, 지도, 비츠/로그스태시와 연계되어 제공되는 솔루션 등 엘라스틱서치의 기능을 활용한 다양한 시각화 세트 제공 라인, 바, 차트 등 기본적이지만 인프라 모니터링에 부족함 없는 시각화 요소들을 포함한 실시간 대시보드 제공하며 시계열 데이터베이스를 활용할 수 있음 실시간보다는 다양한 시각화 도구를 이용한 분석에 특화되어 있음. 다양한 데이터 소스를 활용한 시각화 가능
기타 기능 지원 스택 관리, 모니터링 등 엘라스틱 스택 특화 기능을 지원하며, 알림이나 머신러닝 등 유로 기능도 존재 알림 기능 지원

본 게시글은 엘라스틱 스택 개발부터 운영까지 도서를 참고하여 작성되었습니다.

상세한 내용이 궁금하시다면 책을 읽어보실 것을 추천해 드립니다.

추가로 참고한 내용