

EFK스택이란 지속적으로 유입되는 로그 데이터를 수신하고 이 데이터를 차트와 그래프로 시각화 하는 시스템이다. 위의 세가지 오픈소스들을 활용하는데 오픈소스들의 첫 글자를 따서 EFK 스택이라 부른다.
데이터가 서버에 지속적으로 유입이 되어 데이터의 양이 늘어나면 서버는 데이터양을 감당하지 못할것이다. 규모가 커질수록 분석속도가 느려지고 서버의 리소스가 감당하지 못할 것인데 이러한 데이터를 어떻게 감당할 수 있느냐? 이 문제에 대한 솔루션이 바로 EFK 스택이다.

Apache 루씬 기반의 Java 오픈소스 분산 검색엔진이다. 많은 양의 데이터를 보관하고 실시간으로 저장, 검색, 분석할 수 있게 해준다.
다음은 ElasticSearch의 몇 가지 특징들이다.
Elasticsearch는 하나 이상의 노드로 구성이 되고 각 노드는 1개 이상의 데이터 원본과 복사본을 서로 다른위치에 나누어 저장을하여 고가용성을 제공한다.
기본적으로 모든 필드를 색인 후에 JSON 형식으로 저장한다. JSON 구조로 인해 모든 레벨의 필드에 접근이 쉽고, 빠른 속도로 검색이 가능해진다.
Elasticsearch의 하나의 클러스터는 마스터노드와 데이터노드로 구성된다.
마스터 전용 노드와 데이터 전용 노드를 분리하는 것이 좋다.클러스터의 명을 동일하게 유지하고 프로세스만 실행하게 되면 시스템의 확장이 가능해진다.
마스터 노드는 전체 클러스터의 상태에 대한 메타정보를 관리하는 노드이다.
node.master 속성을 false로 하면 마스터 노드에서 제외된다.색인된 데이터를 실제로 저장하는 노드이다.
node.data 속성을 false로 하면 해당 노드는 데이터를 저장하지 않는다.
Fluentd는 로그 데이터를 수집, 변환 후 Elasticsearch의 백엔드로 전송해주는 역할을 하는 오픈소스 데이터 수집기이다.

Kibana는 그래프, 차트를 제공해주는 Elasicsearch용 데이터 시각화 관리도구이다. Kibana를 사용하여 Elasticsearch 색인에 저장된 데이터를 검색할 수 있다.
Kibana를 사용하여 웹 사이트 방문자를 표시할 수도 있고 트래픽을 실시간으로 볼 수도 있다.

각 파드의 Fluentd에서 로그를 수집하고 수집된 로그를 Elasticsearch 백엔드로 변환되어 전송한다. Elasticsearch에서 데이터가 분석되고 분석된 데이터는 Kibana로 시각화하여 볼 수 있다.
이제 EFK스택을 구성하는 각각의 서비스에 대해 간략하게 알아보았으니 상세 구축과정을 살펴보자.