만쥬의 개발일기
article thumbnail

엘라스틱 서치

엘라스틱 서치(Elastic Search, 통칭 ES)는 Full-text search engine으로 처음 개발되었지만, 검색엔진을 넘어 보안, 로그분석, 전문(Full-text)분석 등 다양한 영역에서 중요한 역할을 하고 있다.

Kibana, Logstash, Beats들과 함께 Elastic Stack이라 불린다.

 

ES가 타 NoSQL 제품보다 월등히 빠르고 어려운 검색, 집계 성능을 보이는 이유?

➡️검색 엔진인 동시에 데이터베이스이기 때문

  • 충분한 크기의 클러스터가 구성되어 있다면 1초 이내의 응답 속도 보인다.

 

ES의 또 하나의 특징은 바로 스코어링, 연관도에 따른 정렬이다.

타 데이터베이스도 제공하는 필드값 기준 정렬이 아닌, 유사도 스코어 정렬로 인해 복잡한 문자열 콘텐츠 검색에서 큰 효과를 보인다.

 

엘라스틱 서치의 분산 시스템 구성은 다음과 같다.

그리고 다음 특징을 가진다.

  • 분산 시스템으로서 복수의 루씬 인스턴스를 병렬 배치후 분산 처리해 검색 속도를 무한히 확장한다.
  • 노드 간 복제 기능을 통해 일부 노드가 다운되더라도 정상적으로 서비스를 지속한다.
  • 모든 통신을 REST API를 이용해 프로그래밍 언어와 무관하게 사용자가 쉽게 접근할 수 있는 활용성을 높인다.

 

단점은 다음과 같다.

  • 저장공간이 크게 압축되지 않고 시스템 리소스를 많이 사용한다.
  • DSL 쿼리를 사용하므로 JOIN 쿼리가 어려워 반정규화를 기본으로 모델링해야한다.
  • 도큐먼트 수정/삭제의 비용이 저렴하지 않다.

 

키바나

키바나는 REST API의 복잡한 요청을 일일이 작성해야 하는 불편을 해소해주고, 다음 기능을 제공한다.

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

 

로그스태시

로그스태시는 대량의 데이터 수집과 가공 기능을 제공한다.

로그, 메트릭, 웹 애플리케이션 등 다양한 소스로부터 로그를 수집할 수 있다.

또한 필터 기능을 통해 비정형, 반정형 데이터를 분석이 쉬운 형태로 정제가 가능하다.

비구조적인 데이터에서 구조를 도출하고, IP 주소에서 위치 정보 좌표를 해독하고, 민감한 필드를 익명화/제외시키는 등의 전반적인 작업을 쉽게 해준다.

하지만 로그스태시의 진면목은 단순 소스 데이터 정제가 아니다.

ES의 인덱싱 성능을 최적화하기 위한 배치 처리와 병렬 처리가 가능하며, 영속적 큐를 사용해 현재 처리 중인 이벤트의 최소 1회 전송을 보장하고, 데이터양이 급증하는 부하 상황에서 안정성을 보장한다.

 

비츠

비츠는 로그스태시의 경량 버전으로, 엣지 디바이스와 연동하는데 최적화되었다.

가볍기로 유명한 Golang으로 작성되었으며, 각 서비스 호스트에 부담 없이 설치 가능하다.

흔히 비츠에서 각 서비스 호스트의 정보를 수집, 로그스태시에서 취합 및 가공 후 엘라스틱서치로 전송하는 아키텍쳐를 많이 사용한다.

 

전문 검색 엔진

엘라스틱 스택의 가장 기본적인 사용처다.

전문(full text)는 단순 문장부터 뉴스 기사, 논문 등 다양한 글의 전체 내용을 의미한다.

전문을 빠르고 정확하게 검색하려면 전문을 용어(terms) 단위로 분석해 인덱싱해두고, 이를 기반으로 검색을 수행하는 역인덱싱 기법을 활용한다.

 

로그 통합 분석

엘라스틱 스택은 애플리케이션의 복수의 서비스와 장비에서 발생하는 로그들을 통합하고 검색하는 데 최적화된 솔루션이다.

시스템과 호스트, 쿠버네티스, 아파치, MySQL, 윈도우 등 복합적인 다양한 환경에서 생성되는 로그들을 별도의 복잡한 구성 없이 수집 가능하다.

 

키바나는 로그 모니터링 UI를 제공하고, 각 서버에서 수집된 로그를 한 페이지에서 실시간 추적할 수 있게 도와준다.

ES는 로그 원문의 빠른 검색 후 하이라이트가 가능하다.

 

또한 인덱스 패턴을 이용해 한 번에 여러 인덱스에서 동시 조회가 가능하다. 각기 다른 서비스의 동시간대 로그를 검색해 공통된 요소를 찾아낼 수도 있다.

 

그리고 비츠의 모듈을 사용하면 엘라스틱에서 제공하는 ECS(Elastic Common Schema) 구조에 맞춰 각기 다른 서비스를 같은 스키마에 매핑하고, 연관 분석을 돕는다.

 

예를 들어 2개의 다른 서비스에서 소스 IP정보를 서로다른 필드명(srcIP, source_IP 등)으로 매핑했다고 가정하자. 일반적으로는 각 로그에 따른 쿼리가 필요하지만 표준 스키마에 맞춘다면 필드명이 동일해 하나의 쿼리로 검색이 가능하다.

 

보안 이벤트 분석

SIEM(Security Information and Event Management)나 ESM(Enterprise Security Management) 등으로 불리는 솔루션은 조직 내 다양한 장비로부터 보안 이벤트를 수집하고 분석하는 목적으로 만들어졌다.

보안 장비, 웹 서버, 애플리케이션, 각 사용자 PC 등에서 실시간으로 발생하는 이벤트들은 실시간 수집과 동시에 실시간 검색, 필터링을 통한 연관 분석과 머신러닝을 이용한 이상 징후 탐지까지 연결돼야 한다.

 

SIEM은 비츠의 모듈을 통해 애플리케이션, 엔드포인트, 인프라스트럭처, 클라우드, 네트워크 등 다양한 소스에서 수집한 이벤트를 기반으로 엔드포인트 활동, 인증 로그, DNS 트래픽, 네트워크 플로우에서 이상 징후와 사용자 접근 패턴 등의 문제를 빠르게 찾아내고, SIEM UI에서 분석을 비롯한 고유한 탐지 규칙 관리 또한 가능하다.

 

애플리케이션 성능 분석

안정적인 서비스 유지를 위해서는 애플리케이션의 상태를 지속적으로 모니터링해야한다.

엘라스틱 스택의 성능 모니터링 도구인 APM은 프로그래밍 언어별 에이전트를 통해 성능 지표 수집을 돕고 분석을 위한 UI를 제공한다.

 

머신러닝

머신러닝은 엘라스틱 스택에서 유료 라이선스를 구매할 경우 사용할 수 있는 강력한 기능이다.

엘라스틱서치에 데이터를 넣은 후 비지도 학습으로 데이터 패턴을 발견할 수 있다. 시계열 모델링을 통해서 시간과 관련된 데이터에서 이상 징후 탐지 후 과거 데이터를 기반으로 동향 예측을 도와주기도 한다.

 

카프카와 연동

아파치 카프카는 분산 데이터 스트리밍 플랫폼이다.

대량의 데이터를 실시간 배포하는 데 최적화되어 있어 많은 빅데이터 플랫폼에서 채택한다.

카프카와 엘라스틱 스택은 데이터 수집 시점에서 많이 연계되어 사용한다.

주로 비츠에서 수집한 각 장비의 이벤트를 카프카로 전송하고, 이를 로그스태시로 다시 읽어들이거나 카프카에 저장된 다른 시스템의 이벤트를 엘라스틱 서치로 읽어 들이는 등의 구성으로 사용한다.

 

카프카를 사용했을 때의 장점

  • ES의 인덱싱 성능이 순간적으로 충분하지 않거나, 로그스태시나 ES의 불안정으로 정상적인 인덱싱이 불가능할 때도 데이터의 유실이 방지되며, 타 시스템과 데이터 연계가 쉬워진다.

 

하둡 생태계와 연동

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

엘라스틱 서치 : 이미 인덱싱 된 결과에 대한 빠른 검색 제공

스파크 : 인덱싱되지 않은 데이터에 대한 빠른 일괄 처리 제공

따라서 ES를 중간 집계 엔진이나 결과 저장 후 재활용하는 용도로 활용 가능하다.

RDB와의 연동

RDB에는 주로 레거시 데이터나 신뢰성이 중요한 데이터가 포함된다.

로그스태시는 RDB와 연계할 수 있는 다양한 방법을 제공한다.

기존의 RDB에 저장된 데이터를 인덱싱하거나 입력받는 이벤트에 정보를 주입하는 등의 여러 용도로 사용한다.

profile

만쥬의 개발일기

@KangManJoo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!