[ELK] 1. Elastic Stack
- 필자는 파이썬(python, numpy, pandas, matplotlib, plotly)을 활용한 데이터 전처리, 피처 엔지니어링, 모델링을 진행한 경험이 다수 있지만, 서비스 단계에서 사용하는 데이터 파이프라인은 경험해보지 못했다. 그리고 최근 사용자 로그 데이터에 호기심이 생겨서 그 처리에 대한 고민도 있었다.
- 그래서, 데이터 파이프라인을 경험하기 위해서 여러 가지 프레임워크 중 ELK Stack을 사용하기로 결정했다.
- 가이드라인은 elastic 공식문서와 elastic Senior Developer Advocate인 김종민 님의 유튜브 영상을 참고할 것이다. https://www.youtube.com/watch?v=Ks0P49B4OsA&list=PLhFRZgJc2afp0gaUnQf68kJHPXLG16YCf&index=1
Elastic Stack
Elastic Stack이란 Elasticsearch, LogStash, Kibana의 앞글자를 따서 ELK Stack이라고 불리던 기존의 아키텍처에서 Beats 제품군이 추가된 Elastic의 제품군들이다.
보통의 데이터 관련 작업을 수행하게 되면 일반적으로 수집 - 저장/처리 - 분석/시각화 등의 단계를 거치게 된다. Elastic Stack의 그림을 보면 Beats/Logstash - Elasticsearch - Kibana의 순서대로 아래서 위로 올라가게 되는데 Beats/Logstash는 데이터 수집 단계, Elasticsearch는 저장/처리 단계, Kibana는 분석/시각화 단계를 담당하는 제품이다.
Elasticsearch
Elasticsearch는 루씬 기반의 검색 및 분석 엔지이고, RESTful API를 이용해서 주로 처리한다.
수평적인 확장성과 우수한 안전성, 간편한 관리를 지원하는 JSON 문서 기반의 분산형 검색 및 분석 엔진이다. 그리고, 역 색인 구조와 샤드라는 작은 단위로 나뉘어 제공하는 분산 환경을 제공한다. 여기서 역 색인과 샤드는 후에 자세히 다룰 것이다.
Logstash
Logstash는 데이터 수집과 가공 기능을 제공하는 ETL 툴이다. Logstash는 위 그림에서 보듯이 다양한 데이터 소스로부터 데이터를 수집하여 필요에 따라서 변환 작업을 거친 후 다양한 곳으로 데이터를 적재할 수가 있다.
input plugin에서 데이터를 수집할 수 있으며 beats, elasticsearch, s3, jdbc, file 등등 굉장히 많은 plugin을 제공하고 있다.
Filter plugin에서는 csv, json kv처리를 비롯하여 grok pattern 등을 지원하며 왠만한 plugin으로 처리가 될 것이지만 혹시라도 그렇지 못할 경우 ruby plugin을 사용하여 직접 ruby 언어로 코딩할 수가 있다.
Output plugin에는 elasticsearch, kafka, s3, csv 등등 역시 다양한 plugin을 제공하고 있다.
Kibana
Kibana는 Elastic Stack의 UI를 담당한다.
Kibana는 dev-tools라는 console을 제공하여 마음껏 쿼리를 날리면서 테스트해볼 수 있다. 또한 분석 및 시각화 툴답게 여러 그래프를 통해 대시보드를 그릴 수 있다. [위 그림]
Beats
Beats는 단일 목적의 경량 데이터 수집기이다. 위 그림에서 볼 수 있듯이 Beats는 목적에 따라 크게 Auditbeat, Metricbeat, Filebeat, Packetbeat, Heartbeat, Winlogbeat 등이 있으며 이 외에도 여러 종류의 Beat가 있다.
Beats는 Logstash와는 달리 실제 서비스가 동작하는 호스트에 설치를 해야하는 Agent 방식으로 동작하기 때문에 비교적 가볍다고 평가받는 Go 언어로 개발되었다. 또한 Logstash와는 달리 위 그림처럼 Beats는 Elasticsearch에 직접 데이터를 보내거나 Logstash로 데이터를 보낸다. 가벼운 대신 기능은 Logstash보다 부족할 수 있으나 목적에 따라 Beats를 더 파워풀하게 사용할 수도 있다.
마무리
이번 포스팅은 가볍게 ELK가 무엇이고, 어떻게 구성되어 있고, 구성요소에 대한 간단한 설명을 할 것이다. 각각 제품을 제대로 다룰려면 포스팅 한두 개로는 모자랄 것이다.
해당 내용들은 필자가 미리 학습을 한 것이고, 블로그 포스팅은 복습용으로 하는 것이다.
전체적인 ELK 포스팅의 주제는 다음과 같다.
1. ELK stack은 무엇인가
2. elasticsearch document CRUD, Bulk, Search
3. elasticsearch query DSL
4. elasticsearch 데이터 색인과 텍스트 분석
5. 노리 한글 형태소 분석기
6. elasticsearch 인덱스 매핑과 데이터 타입
7. logstash filter
8. beats(filebeat - logstash - elasticsearch)
9. elasticsearch 인덱스 재색인
10. elasticsearch 샤드
11. kibana 시각화