1. ELK stack이란
ELK 스택은 Elasticsearch, Logstash, Kibana의 로그 수집 및 시각화를 위한 세 가지 오픈소스 프로젝트를 의미하는 약어입니다. 이미 수년 전부터 사용자 시스템 및 애플리케이션 로그 분석에 있어 꾸준한 인기를 이어왔으며, 실시간 데이터 분석과 분산형 검색 구조를 갖춰 초기 빅데이터 플랫폼 구축에 많이 활용되었습니다.
위의 세 가지 애플리케이션은 Elastic이라는 동일한 회사에서 개발되어 실제로는 독립된 모듈로서 사용하거나, 또는 다른 오픈소스 프로젝트(ex., Kafka)와 연동해도 무방합니다. 물론 Elasticsearch, Logstash, Kibana를 합쳤을 때야말로 플랫폼 구축과 운영이 용이해지며, 여기에 새로 추가된 Beats라는 경령화된 데이터 수집 모듈과 함께 시너지를 발휘하고 있습니다. ELK 스택의 요소를 세부적으로 정리하면 아래와 같습니다.
E : Elasticsearch
Elasticsearch는 Java 기반의 분산 데이터 저장 및 검색 엔진입니다. Elasticsearch는 스키마가 없는 NoSQL 데이터베이스 계열에 속하며, JSON 문서로 로그 데이터 저장 및 분석이 가능합니다. 수집된 로그 데이터는 Elasticsearch의 내부 기준에 의해 유사한 특성을 갖는 자료들끼리 묶여서 보관되며, Elasticsearch 엔진은 이들은 여러 물리적인 공간으로 나눠 관리하는 분산 메커니즘을 갖추고 있습니다.
L : Logstash
Logstash의 역할은 로그 수집입니다. 다양한 데이터 소스와 연결된 파이프라인을 구축하여 ElasticSearch와 같은 데이터 저장소에 데이터를 전송합니다. 이 때, 원본 데이터를 필터링하고 가공하는 작업 또한 해당 모듈이 담당하고 있습니다.
K: Kibana
Kibana는 수집 데이터 시각화를 위한 대화형 차트와 여러 통계 다이어그램을 제공합니다. 막대그래프, 지도, 트리맵, 그래프와 같은 차트 도구 외에도 쿼리를 직접 수행할 수 있는 인터페이스가 존재하여 순위표, 추세와 같은 다양한 차트를 생성할 수 있습니다. 여기에 더해 실시간 데이터 분석이 가능하다는 것도 Kibana의 강점 중 하나입니다.
2. ELK stack의 이점
- 쉽고 빠른 시스템 운영: RESTful API 기반으로 동작하여, 모든 데이터 검색, 입력, 삭제 등의 작업을 HTTP 인터페이스를 통해 수행할 수 있습니다. 또한, 접근성이 높은 대시보드를 제공하여 상세한 분석 레포트를 도출할 수 있습니다.
- 병렬 처리 시스템:
Elasticsearch은 대용량의 데이터를 병렬로 처리하여 쿼리에 일치하는 항목을 신속하게 조회할 수 있습니다. 그 덕분에, 애플리케이션 모니터링 및 이상 탐지와 같은 실시간 서비스에 용이합니다. - 다채로운 데이터 수집:
Logstash/Beats, 그리고 이와 연동 가능한 여러 데이터 수집 플러그인으로 각종 시스템 로그, 웹 사이트 로그, 애플리케이션 서버 로그 등의 원천 데이터를 손쉽게 얻을 수 있습니다. - 대화형 차트:
Kibana의 반응형 인터페이스는 클릭과 마우스 동작 몇번 만으로 원하는 시각화 기능을 활성화시킬 수 있습니다. - 다양한 도구 지원: ELK stack은 언어 지원 폭도 넓지만, 기타 여러 플러그인을 제공하여 (심지어 Hadoop HDFS와도 연계가 됩니다) 플랫폼에 풍부한 기능을 추가할 수 있습니다.
3. ELK stack은 실제로 어디서 쓰이나요?
- Netflix: Netflix는 서비스 과정에서 발생하는 사용자 로그 및 보안 데이터의 모니터링과 안전한 관리를 목적으로 ELK stack을 도입한 것으로 알려져 있습니다.
- SoundCloud: 웹/모바일 음악 스트리밍 사이트인 SoundCloud는 사용자의 실시간 음악 검색과 서비스 분석을 위해 ElasticSearch 엔진을 사용하고 있습니다.
- Github: 전 세계 개발자들의 코드가 모여있는 플랫폼으로, Github는 ElasticSearch 엔진으로 800만 개 이상의 repo들을 관리하고 있습니다.
- Tripwire: 보안 전문 업체 Tripwire는 네트워크 패킷 로그 분석을 위해 ELK stack을 이용해왔습니다. 패킷 데이터는 밀리초(ms) 수준으로 순식간에 방대한 양이 발생하기에 고성능 데이터 처리가 필요한 대상 중 하나입니다.