Elastic Stack
Elastic

Elastic Stack

728x90
반응형
Elastic Stack 이란 

:  Elastic의 모든 유형의 Data를 저장하거나, 실시간 검색, 분석 및 시각화할 수 있는 오픈 소스 서비스 

  

  v5.0.0 이전 : ElasticSearch + Logstash + Kibana 로 이루어진 서비스 - 흔히 ELK Stack 으로 명칭

  v5.0.0 이후 - Beats 를 시작으로 X-Pack과 Elastic Cloud 가 포함되어 Elastic Stack으로 불림


엘라스틱이 좋다 좋다 하지만,  정말 뭐가 좋고 내세우는 게 무엇이며, 내가 왜 써야 하는 지를 알아야 한다고 생각했습니다.

Elastic Stack의 장점

(Elastic Search 시스템과 구조상의 장점에서 많이 비롯된다)

  • 유연성 & 호환성 
    • Elasticsearch,Logstash,Kibana는 각각의 역할을 담당하기 때문에, 용도별로 분리해 version Up 및 발전하는 솔루션             - 구조적 안정성까지 보장
  • 스키마가 자유롭다
  • 수평 확장성
    • 클러스터에 노드를 추가함으로써, 수평적으로 확장이 용이하다 
      • 부하 분산 및 안전성 확보 
      • 운영 및 확장성이 용이 
  • 사전에 준비된 다양한 부가기능
    • Kibana 를 통한 UI 및 다양한 부가기능 제공 - 사전의 다른 작업 요구 X
  • ES 버전 별 Bulk 방법 차이 완화
    • Bulk = (RDBMS)의 Insert
    • ES는 버전 별로 벌크 방법의 차이가 존재한다.
    • 하지만 Logstash를 통하여 ES 핸들링으로 벌크 문제를 해결

Elastic Stack 의 구조 


Elasic Stack 구성요소

 1. ElasticSearch

"그러면 루씬을 쓰면 되는거 아니에요? 왜 엘라스틱 서치를 써요?"

물론 루씬은 검색과 색인이 필요한 강력한 API를 제공한다. 

하지만 결국 루씬은 어플리케이션이 아닌 라이브러리 , 따라서 사용자는 원하는 부분과 기능은 다 직접 개발이 필요하다. 

 

반면에, Elasticsearch는 설치와 사용이 용이할뿐더러, 기반이 루씬이므로 루씬의 기능을 모두 제공한다. 

또한 분산 처리를 비롯하여 다양한 기능들을 제공하고 대용량 데이터를 처리하기에도 적합하다(이유는 밑에서 설명)

 

ElasticSearch의 특징 

  1. SchemaLess
  2. 전문검색(Full text Search) with 역색인 구조
  3. NRT(Near Real Time)
  4. RestFul API
  5. 클러스터식 구성 

1. SchemaLess

여기서 스키마리스는 스키마가 없다는 뜻이 아닌, 동적으로 스키마가 생성된다는 의미이다.

기존의 RDBMS는 데이터를 입력하기에 앞서서, 테이블을 생성과 칼럼 정의 등 작업이 필요하다.

 

하지만 ElasticSearch는 데이터를 input하기에 앞서서 데이터의 어떤 필드를 저장할 것인지 사전에 정의가 필요하지 않다.

왜냐하면 elasticsearch는 자동으로 해당 데이터를 분석한 후에, 동적으로 스키마를 생성한다. 

 

2. 전문검색(Full text Search) -  with Inverse Index Structure

역색인 구조를 통하여 찾고자 하는 데이터가 어느 도큐먼트에 있는지 빠르게 검색 가능

(기존의 RDBMS는 where / like - 해당 조건에 맞는 데이터를 일일이 확인) 

<역색인 구조 - 공백을 기준으로 Tokenize>
<나누어진 해당 term(데이터)들이 어느 도큐먼트에 있는지 markup>

  • 불규칙한 구조의 텍스트라도 색인 생성을 통하여 검색
  • 다양한 데이터 타입 제공 (numeric, date , geo , ip ...) 

3. Near Real Time(NRT) 

실시간으로 분석이 가능한 System

- 색인과 검색이 거의 동시에 이루어진다는 특징

기존의 하둡 시스템과 달리 ES cluster가 실행되는 동안에는 꾸준히 데이터가 입력(indexing) 

그와 동시에 1초후 바로 검색 및 집계가 가능

 

4. RestFul API

표준 인터페이스(REST API)를 기본으로 지원, 

Data에 대한 http Method를 통해 CRUD를 수행 

 

5. Cluster 구성

대용량의 데이터 증가에 따른 Scale-Out & 데이터 Integrity(무결성) 유지를 하기 위한 구성

한 클러스터 내부에 하나 이상의 노드가 존재 

- cluster : 여러 대의 컴퓨터 혹은 구성 요소들을 논리적으로 결합하여 하나의 컴퓨터처럼 사용할 수 있도록 하는 기술

  • 여러 노드를 한 클러스터 내에 생성 - 부하 분산
  • 여러 노드 중 한 노드 장애 발생 시, 다른 노드들로 클러스터 재구성 - 안전성 확보
  • 여러 노드에 Data Replica(복제본) 생성 - 안전성 확보 

→ 운영 및 확장성 용이

 


앞서 소개해드린 특징들을 통한 elasticsearch의 장점을 정리하자면 다음과 같습니다.

 


2. Logstash 

두번째로 소개해드릴 구성요소는 Logstash 입니다

다양한 source에서 동시에 데이터를 수집 및 가공 , 전달하는 역할을 수행합니다

  • 파이프라인으로서의 역할이며, 데이터를 수집하여 filter를 통하여 데이터를 변환(가공) 후,  ES 혹은 다른 데이터 저장소로 데이터를 전달합니다. 
  • 다양한 Plug-in이 지원
  • 확장 및 실시간 데이터 파이프라인 구축에 유용 

 

Logstash의 데이터 처리를 위한 과정 

1. Input

- Elastic의 logstash 는 입력 데이터의 다양한 형태와 크기, source등을 지원합니다.

 

2.  Filter

- 데이터의 구문을 분석 및 변환 작업을 수행하며, 데이터의 형식이나 복잡성에 관계 없이 동적으로 변환합니다.

ex) grok filter - 비정형 데이터 구조 도출 / ip 주소 위치 좌표 해석을 하는 필터도 존재합니다. 

 3. Output

- ES를 포함한 다양한 데이터 저장소로 사용자의 요청에 알맞는 출력 형태로 전달합니다. 

 


3. Kibana 

ELK의 K를 맡는 Kibana입니다. 

Kibana는 ElasticSearch의 데이터를 가장 쉽게 시각화할 수 있는 확장형 UI 도구입니다.

이를 통하여 사용자는

  • - 검색 및 집계 기능을 통하여 손쉽게 ES의 데이터 조작 가능
  • - 시각화 도구를 이용하여 DashBoard 및 Canvas 생성 가능
    • 다양한 형태(json, url)로 저장 및 Export 가능 

   


4. Beats

Logstash 는 데이터 수집기로 훌륭하지만,너무 많은 기능을 제공하기 때문에 상황에 따라 너무 무겁다고 판단할 수 있습니다

따라서 Elastic은 가볍게 데이터만 수집하는 Beats를 만들게 됩니다.

Beat는 지정된 위치의 Log file 만 읽고, logstash 혹은 ES로 전달해주는 역할만 수행합니다.

따라서 가공(필터)에 대한 역할을 수행하지 않는 녀석입니다.(가공을 할 수 있긴 합니다)

Logstash    vs     Beats

Logstash

  • 풍부한 기능을 제공합니다(filter 및 변환)
  • Data 가공이 필요한 경우에 사용

Beats

  • resource(CPU & RAM) 적게 소모 
  • Elasticsearch로 직접 전달할 경우에 유용
    • 별도의 분석이 필요 없는 경우
    • Log 자체가 json 형식이고, 가공할 필요가 없을 경우

 


 

 

위에서 설명한 beats는 logstash 혹은 elasticsearch로 log를 전달한다고 언급드렸습니다.

1번의 경우 

Beat는 log 파일을 읽기만 하고 별도의 가공 X

로그 파일의 format이 달라진다면?

- parsing의 역할을 하는 Logstash의 설정을 변경해주면 됩니다. 

따라서 이러한 경우는 beat 와 logstash의 역할을 분명히 나누었다고 볼 수 있습니다.

확장성 / 효율성 면에서 더욱 좋습니다. 


2번의 경우

beat에서 json 형태의 문서로 가공

장점  : 빠르게 ES로 로그 전송 및 수집 가능 
단점 :  log file format이 변경되었을 때, 모든 application 서버의 beat의 설정을 변경해야함

 

Beat의 종류

beat의 종류는 다양합니다. 간단하게만 정리해보았습니다.

  • FileBeat  :  서버에서 log file을 제공할 때 사용
  • PacketBeat : 응용 프로그램 서버간에 교환되는 트랜잭션 정보를 제공하는 네트워크 패킷 분석기 역할
  • MetricBeat : 서버에 실행중인 OS 및 서비스에서 메트릭을 주기적으로 수집하는 모니터링 에이전트
  • WinlogBeat : windows 이벤트 로그 제공
  • Heartbeat : 가동 시간 모니터링을 위한 경량 데이터 수집기로 활성 상태를 감지
  • AuditBeat : Linux 시스템을 감사하는 프레임워크 데이터 수집기 

X- Pack

Elastic Stack에 대하여 여러가지 확장 기능을 제공

Security - 인증기능, 사용자 관리, 노드, http elasticsearch 클라이언트 간의 통신 트래픽 보호등을 하며,

                    field / document 수준까지 데이터를 보호 / Audit Log(감시로그) 제공 

Altering -  데이터 변경사항이 있다면, 사용자에게 알림 제공

 

Monitoring - ELK Stack 의 상태를 지속적으로 체크하는 기능

 

Reporting -  PDF 형식의 주기적인 보고서를 생성할 수 있습니다. 또한 email에도 전송이 가능

 

Graph -  데이터 시각화를 그래프로써 표현

 

Machine Learning -  데이터의 흐름 및 주시성 등을 자동으로 실시간 모니터링하여 문제를 식별하고 이상값 탐지등 근본원인을 분석

 


Elastic Cloud 

Elastic Stack을 AWS, Azure, GCP 등 원하는 가상환경에 맞추어 지원하는 Elastic의 SaaS입니다. 

 


참고 자료 출처 : 

Elastic engineer로서 인턴을 시작하게 되면서 공부한 내용을 다시 정리하고 기록하기 위해 블로그를 작성해보았습니다. 

현재 쓴 글은 많이 부족하고 분명히 틀린 부분도 존재할 것이지만, 나중에 좀 더 성장하게되면 수정하도록 하겠습니다. 

만약 보시는 분이 있다면 참고용으로만 사용하시기를 권장드리며, 틀린 부분을 발견하신다면 댓글로 지적해주시는 것은 언제나 환영입니다

 

728x90
반응형