Notice
Recent Posts
Recent Comments
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

SYDev

Elasticsearch 기본 개념 + ELK stack 본문

GDGoC KHU 1th

Elasticsearch 기본 개념 + ELK stack

시데브 2025. 4. 12. 23:05

Elasticsearch

  • Elasticsearch: Apache Lucene 라이브러리를 기반으로 하는 오픈 소스 검색 및 분석 엔진
    • 주로 대량의 데이터를 실시간으로 검색하고 분석하는 데에 사용 -> log, metric, full text ...

장점

  • 검색 엔진: 단순한 텍스트 매칭 검색이 아닌 전문 검색이 가능, 다양한 종류의 검색 쿼리를 지원
  • 분산 처리: 데이터를 여러 노드에 분산 저장하여 검색이나 집계 작업 등을 수행할 때도 분산 처리 지원
  • 고가용성 제공: 클러스터를 구성하고 있는 일부 노드에 장애가 발생해도, 복제본 데이터를 이용해 중단 없이 서비슬르 지속
  • 수평적 확장성: 더 많은 처리가 필요할 때, 새로운 노드에 elasticsearch를 설치하려 클러스터에 참여시키는 것만으로도 확장 가능
  • JSON 기반의 REST API 제공: JSON 형태의 문서를 저장, 색인, 검색하며, 작업 요청을 보낼 때도 JSON 기반의 REST API를 사용
  • 데이터 안정성: 데이터 색인 요청 후 200 OK를 받았다면 데이터는 확실히 Disk에 기록
  • 다양한 플러그인을 통한 기능 확장 지원
  • 준실시간 검색: 최대 1초 정도의 시간이 걸림

단점

  • 트랜잭션 지원 X
  • 조인 연산 지원 X

Apache Lucene?

  • Java로 작성된 무료 오픈 소스 검색 엔진 라이브러리
    -> 검색 기능을 가지고 있는 application을 개발할 때 사용 가능한 라이브러리 (자체 수집 기능 제공 X)

- 동작 방식

1) 검색 대상 분석

  1. 검색 대상 텍스트 확보
    - 내부적으로 수집 기능 제공 X
    - 외부에서 대상을 수집해서 전달해줌으로써 검색 대상 텍스트 확보
  2. 루씬 문서 생성
    - document: 루씬에서 사용하는 개별 단위
    - lucene document는 여러 개의 field로 구성됨
  3. document 텍스트 분석
    - 텍스트 분석기를 사용하여 텍스트를 token이라 불리는 단위로 분리
  4. index에 document 추가
    - indexing 과정이 끝난 해당 document를 index에 추가

2) 검색 과정

  1. 검색 화면 인터페이스를 통해 검색어 전달 받음
  2. 검색 질의 생성
    - 전달받은 검색어를 검색 엔진에서 인식하는 query 객체로 변
  3. query를 통해 검색
    - query 객체에 해당하는 결과를 받아옴
    - 순수 불리언 모델: 지정된 질의에 문서가 해당하는지 여부 확인, 점수 계산 X
    - 벡터 공간 모델: 질의와 문서 모두 고차원 공간의 벡터로 표현, 거리를 계산하여 문서와 질의 사시의 연관도나 유사도 확인
    - 두 모델을 필요에 따라 선택

 

apache lucene 검색 과정

 

ELK Stack

  • 엘라스틱 서치는 단독으로 검색을 위해 사용하거나, ELK stack을 기반으로 사용
  • ELK stack: Elasticsearch + Logstash + Kibana + Beat
    • Filebeat: 서버에서 생성하는 log를 수집하여 logstash 서버로 log를 전송
    • Logstash: 로그 및 트랜잭션 데이터를 수집하여 집계 및 파싱(정제 및 전처리)을 하고 ES로 전달
    • Elasticsearch: logstash로부터 전달받은 데이터를 저장하고, 검색 및 집계 등의 기능 제공
    • Kibana: 저장된 로그를 Elasticsearch의 빠른 검색을 통해 가져와 시각화 및 모니터링 기능 제공

 

Elasticsearch 기본 구조

https://www.youtube.com/watch?v=B1Aq2GQ4E78&ab_channel=MinsukHeo%ED%97%88%EB%AF%BC%EC%84%9D

-> 각 document들을 미리 indexing하여 key, value 형태로 mapping

-> 따라서 기존 rdbms보다 빠를 수 밖에 없음

 

일반적으로 사용하는 아키텍처

https://sudarlife.tistory.com/entry/Elasticsearch-%EA%B0%84%EB%8B%A8-%EA%B0%9C%EB%85%90-%EC%9E%A5%EB%8B%A8

  • 특정 서버에서 생성되는 데이터(일반적으로 log)를 RDBMS or Non-RDBMS에 저장하고, 검색 혹은 분석이 필요한 부분만을 데이터 추출하여 ES에 자동 저장
  • 이때 DB에서 필요한 데이터를 추출하여 자동적으로 ES에 데이터를 전송하는 부분을 담당하는 것이 Logstash
  • MongoDB에 ES를 연결하는 task에 특화된 Monstache도 존재

https://sudarlife.tistory.com/entry/MongoDB-ElasticSearch-Monstache-%EB%8F%84%EC%BB%A4-%EA%B8%B0%EB%B3%B8-%EC%85%8B%ED%8C%85%EC%9D%84-%ED%95%B4%EB%B3%B4%EC%9E%90

 

[ MongoDB + ElasticSearch + Monstache ] 도커 기본 셋팅을 해보자

회사 내부에서 검색엔진을 적용하게 되면서 구글링을 해보니 생각보다 많은 정보가 없었다. 내가 추구하는 개발 환경은 Docker로 구축하는 것이었다. 국내 자료가 많이 없고 , 외국 자료 역시 그

sudarlife.tistory.com

 

MongoDB와 ES를 동기화하는 이유

https://velog.io/@emily2307/MongoDB-Elasticsearch-%EB%8F%99%EA%B8%B0%ED%99%94-using-Monstache

 

MongoDB - Elasticsearch 동기화 (using Monstache)

.

velog.io

  • ES는 transactionACID 속성 보장 X
  • ES의 강점은 실시간에 가까운 검색이 가능하다는 것 -> 인덱싱 비용이 높기 때문에 데이터 입력이 많으면, 빠른 검색 기능 제대로 활용 불가능
  • 따라서, 메인 저장소로 MongoDB를 따로 두고, 검색과 분석에 필요한 필드만 커스텀 매핑으로 ES에 동기화
  • 대부분의 기업은 ES를 Main DB 보조하는 search engine으로 사용

참고자료

 

Elasticsearch란 무엇인가요? | IBM

Elasticsearch는 애플리케이션을 강화하고 개발 및 관리 작업을 간소화하는 등 다양한 작업을 수행할 수 있는 오픈 소스 검색 및 분석 엔진입니다.

www.ibm.com

 

[Elasticsearch] 검색 엔진 : Elasticsearch 설치하기(+ELK)

Elasticsearch🔎 자바로 만들어진 루씬 기반의 오픈 소스 검색 엔진이다. 다량의 데이터를 저장한다는 측면에서는 DB와 비슷해보이지만, 전혀 다르다. 주로 대량의 데이터를 실시간으로 검색하고

steady-record.tistory.com

 

[루씬 인 액션] 1. 루씬(Lucene)의 개념 및 구조

루씬이란? → 루씬은 자바로 만들어진 고성능 정보 검색(IR : information retrieval) 라이브러리입니다 (IR : 문서를 검색하거나, 문서의 내용을 검색하거나, 문서와 연관된 메타 정보를 검색하는 과정

jackjeong.tistory.com

 

[ES] 1. Elasticsearch 와 루씬

루씬(Lucene) 기반의 Java 오픈소스 분산 검색 엔진

velog.io

 

Elasticsearch 기본 개념 및 특징 정리

What is Elasticsearch?

velog.io