일하다 보니 부서 내 어디선가 EFK를 쓴다는 말을 들었다.
용어가 AWS의 컴포넌트들이랑 비슷해서 AWS에 있는 하나의 컴포넌트 겠거니 했는데
로그수집 및 모니터링에 유용한 툴 이라고 한다.
쿠버네티스 환경에 MSA로 띄워져 있는 각각의 역할을 하는 서비스들,,, 지금은 10개 내외로 띄워져 있지만 서비스가 확장되고 여러 기능들이 생길때마다 늘어나는 파드들이 생길 것이다. 지금은 기능이 많이 없어서 어떤 서비스에서 장애가 나면 대충 어떤 파드에서 에러가 낫겟거니 유추가 가능하지만 1년뒤에도 내가 이 파드가 어떤 서비스를 제공하고 있는지 다 알지는 못할 것 같다.
임시로 모든파드에 있는 로그들을 마스터서버 디렉토리에 마운트 시켜놓긴 했지만 로그들을 일일이 보려면 여전히 불편하긴 하다.
그래서 EFK란가 뭔가를 구축해보려 한다.
필자는 아직도 저게 다 뭔지 무슨 기능을 하는지는 아직도 모른다. 지금 쓰면서 알아가보자
우선 EFK는 ElasticSearch + Fluentd + Kibana 이 3스택의 앞글자를 따와서 EFK라고 한다.
이 각 스택이 무슨 역할을 하는지 3개를 같이 쓰면 가 좋은지 까지 정리하고 이 포스팅을 마무리 해 보자
이 친구는 검색엔진이라고 한다. 많은 양의 데이터를 보관하고 실시간으로 저장,검색,분석 할 수 있게 해준다고 한다.
ElasticSearch의 특징들을 알아보고 가자
4.테이블과 스키마 대신에 JSON 구조로 인헤 모든 레벨의 필드에 접근이 쉽고, 빠른 속도로 검색이 가능해진다.
필자도 다른 포스트를 참고하고 있다보니 어려운 용어로 쓰고 있는 것 같다. 앞으로 모든 포스트가 써진 후 수정 될거 같다 미안하다.
ElasticSearch의 시스템 구조정도는 알아보고 가야할 것 같다.
ElasticSearch의 하나의 클러스터는 마스터노드와 데이터노드로 구성된다.
마스터 노드는 전체 클러스터의 상태에 대한 메타정보를 관리하느 노드다.
기존의 마스터 노드가 종료되면 새로운 마스터 노드가 선출되고 마스터 노드는 요청을 처리하지 않고 데이터를 보유하지 않으므로 CPU,RAM 및 디스크와 같은 적은 리소스만 사용한다.
node.master 속성을 false하면 마스터 노드에서 제외된다.
데이터 노드는 색인도니 데이터를 실제로 저정하느 노드이다.
데이터 노드는 인덱스 처리 빈도에 따라 Hot Data Node와 Warm Data Node로 나뉘어 진다.
node.data속성을 false로 하면 내당 노드는 데이터를 저장하지 않는다.
이 친구는 로그 데이터를 수집하고 변환 후 ElasticSearch의 백엔드로 전송해주는 역할을 하는 친구라고 한다. 이 친구가 먼저 로그 수집을하고 ElasticSearch로 보내주나 보다.
ElasticSearch를 너무 힘줘서 썻은니 이 친구의 특징은 간단히 설명하고 넘어가겠다
이 친구는 수집된 로그를 그래프, 파트로 제공해주는 ElasticSearch용 데이터 시각화 관리도구라고 한다. Kibana를 사용하여 웹 사이트 방문자를 표시할 수도 있고 트래픽을 실시간으로 볼 수도 있다.
본인도 조금 더 EFK를 알게되면 아키텍처까지 직접 그려서 구축해보겠다.
아키텍처를 조금 설명하자면 각 파드의 Fluentd에서 로그를 수집하고 수집된 로그를 ElasticSearch 백엔드로 변환하여 전송한다. ElasticSearch에서 데이터가 분석되고 분석된 데이터는 Kibana로 시각화하여 볼 수 있다.
참고: Kibana 대시보드를 사용하고 나머지 Fluentd ElasticSearch는 백엔드에서 작동한다.
이제 EFK 스택을 구성하는 각각의 서비스에 대해 간략하게 알아봤으니 상세 구축과정을 살펴보자