ElasticSearch 개념

JB·2022년 1월 24일
1

ElasticSearch

목록 보기
1/3

Elasticsearch에 대해 빠르게 알아보자

Elasticserarch


Elasticsearch는 Apache Lucene 기반의 Full-text 검색엔진입니다.
Near Real-time 인덱싱ELK 스택과의 연동성 이 주요 특징인 오픈소스 검색엔진.
DB-Engines(매달 각종 DBMS 사용량 순위를 발표하는 사이트)에 따르면 2016년도 이후부터 줄곧 검색엔진 인기도 1위를 차지

  • 질의어 자동 완성(auto completion)
  • 오타 수정(correcting typos)
  • 일치 항목 강조 표시(highlighting matches)
  • 동의어 처리(handling synoms)
  • Relevance 조정(adjusting relevance)
  • 데이터 집계 및 분석(aggregate & analyze data)

주로 위와 같은 기능들을 위해 ES를 사용합니다.
ES의 주된 사용 예로는

  • 데이터 집합 분석(aggregation analysis) 및 ML 기술을 이용한 데이터 예측(forecast)
  • 이상치 파악(anomality detection)을 통한 실시간 모니터링 및 알림

등이 있습니다.

RDB와 ES 비교

RDB와 ES는 기본적으로 데이터를 저장, 검색하는 목적을 가졌기 때문에, 비슷한 개념을 이용하고 있다. 다만 사용되는 용어가 조금 다르다.

Relational DBElasticSearch
TableIndex
RowDocument
ColumnField

아래는 인덱스에 저장된 다큐먼트 정보를 불러온 내용이다.
자세한 내용은 추후에 확인하고, _source 하위가 저장된 document 내용임을 확인하자

{
  "_index" : "my_index",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "hello",
    "message" : "world!"
  }
}

기본적으로 동일한 기능을 하는 RDB를 놔두고 ES를 사용하는 이유는 뭘까?
그 이유는 아래와 같다.

  • 뛰어난 Full-text search 기능
    • 최근 RDB에서도 n-gram 기반의 텍스트 검색을 지원하기는 하지만, 기능이 미비
    • 특히 한국어의 경우 지원이 잘 되지 않는 경우가 많음
  • 텍스트 변형(유의어, 동의어)를 통한 검색 가능
  • 비정형 데이터 분석, 처리 가능
  • 형태소 분석을 통한 자연어 처리 가능
  • Inverted list를 이용한 빠른 검색 기능

ES 사용 형태

JSON을 활용한 REST API 형태로 Elasticsearch를 조작하기 때문에, 쉽게 누구나 조작할 수 있다.

Elastic Stack

ELK Stack
ElasticSearch를 개발한 Elastic BV 사에서는 ElasticSearch와 함께 사용할 수 있는 다양한 서비스들을 함께 개발하여 오픈소스로 배포 중이다.
이 중에서 유용하게 사용할 수 있는 서비스들에 대해 몇 가지 알아보자.

Kibana

키바나는 데이터 분석, 시각화 플랫폼이다. 앞서 언급한 이상치 탐지, 데이터 예측과 같은 작업을 수행할 수 있는 ElasticSearch의 웹 인터페이스라고 생각하면 된다.
Kibana는 ES의 쿼리를 쉽게 작성할 수 있도록 도와준다.
이러한 대시보드를 직접 구현할 필요 없이, 키바나를 사용하면 쉽게 구현체를 이용할 수 있다.

Logstash

Logstash는 원래 애플리케이션의 로그를 ES에 보내는 역할을 한다. 그러나 최근에는 데이터 프로세싱 파이프라인으로 이용된다. Logstash는

  • input : file, HTTP, RDB row, Kafka queue
  • filter : 어떻게 데이터를 처리하는지 (look up IP, resolve geometrical location, look up RDB)
  • output : ES, Kafka queue, Mail... etc.

세 가지로 이루어진다. 좌측에는 예를 적어두었다.
각각의 구성요소는 plugin을 활용해 좌측처럼 이용할 수 있다.
Logstash의 파이프라인은 JSON과 비슷한 형태의 자체 마크업 언어로 표현된다. Elastic 공식문서

input {
  file {
    path => "/path/to/apache_access.log"
  }
}

filter {
  if [request] in ["/robots.txt", "/favicon.ico"] {
    drop {}
  }
}

output {
  file {
    path => "%{type}_%{+yyyy_MM_dd}.log"
  }
}

X-Pack

ES와 Kibana에 추가적인 기능을 제공해주는 패키지

Security

authentication(인증)과 authorization(권한 부여, 권한 관리) 기능을 제공

Monitoring

ElasticStack의 다양한 리소스 성능을 추적.
CPU, Memory 사용량과 알림 기능

Alerting

특정 조건이 만족되었을 경우, 이메일, 슬랙과 같은 알림 기능 제공

Reporting

키바나 대시보드를 PDF 형태의 레포트로 주기적 또는 조건에 맞춰 사용자에게 제공

Machine Learning

앞서 언급한 데이터 예측과 같은 부분의 기능은 X-Pack의 ML 기능으로 제공하고, 인터페이스는 키바나를 통해 제공

Graph

사용자가 보고 있는 상품, 듣고 있는 노래와 관련되어 있는 상품 또는 제품 추천을 위해 사용하는 패키지.
상품 또는 제품간의 Relevance와 Popularity를 구분할 수 있는 고도의 기술이 필요하다. 따라서 이에 특화된 ES에서 해당 기능 제공.

Query

ES에서는 자체적인 질의어인 Query DSL을 이용하는데, 이에 익숙하지 않은 사용자들을 위해 SQL을 Query DSL로 변환하는 Query X-Pack 패키지를 제공한다. 이를 이용하면 SQL과 동일한 문법으로 ES를 이용할 수 있다.

Beats

Beats는 데이터 수집자라고 생각하면 된다. 특정 조건에 일치하는 내용들을 지속적으로 수집하여, 목적지(주로 ES)에 전달한다.

FileBeat

로그 파일을 수집한다. (MySQL, NGINX 로그 파일과 같은)

MetricBeat

주로 성능 지표를 수집한다. (CPU, Memory Usage, etc..)

profile
평범한 월급쟁이 개발자

0개의 댓글