EFK 스택을 활용한 Kubernetes환경에서의 통합로깅체계 구축 및 로깅 중앙화

EFK 스택을 활용한 Kubernetes환경에서의 통합로깅체계 구축 및 로깅 중앙화

 – Pod가 삭제 되어도 삭제된 Pod 내의 컨테이너 로그를 남길 수 있음

– 로그를 중앙 집중적으로 저장하고 분석해 MSA 환경에서의 로그 관리의 어려움을 해결

– 고가용성을 제공하고 많은 양의 데이터를 저장할 수 있고 실시간으로 검색, 분석, 저장 가능

– 저장된 로그를 웹으로 시각화 해서 차트나 그래프로 볼 수 있음

 

EFK는 Elasticsearch + Fluentd + Kibana의 첫 글자의 합성입니다. 로그 데이터들을 수집하고 분석하여 시각화 해주는 것을 의미하며 모두 오픈소스 기반입니다. Kubernetes 환경에서 Pod가 삭제되면 컨테이너가 남긴 로그가 같이 삭제가 되게 되는데 EFK를 통해서 이 문제를 해결할 수 있습니다. Kubernetes 환경에서는 Daemonset 방식으로 동작하고 있는Fluentd가 Pod나 컨테이너에서 발생한 로그들을 수집하고 Elasticsearch에 수집한 로그들을 저장합니다. 그리고 Elasticsearch에 저장된 로그를 보기 쉽게 Kibana로 시각화하는 방식으로 동작합니다.

Elasticsearch는 Apache Lucene기반의 확장성이 좋은 JAVA 오픈소스 분산 검색엔진입니다. 많은 양의 데이터를 보관하고 실시간으로 저장(JSON 형식), 검색, 분석을 할 수 있게 해줍니다. 쿼리 속도가 매우 빠르며 확장성이 뛰어나고, 에러에 대한 높은 탄성을 가지고 있고 데이터 타입에 유연하다는 장점이 있습니다.

Fluentd는 로그를 수집하거나 다양한 데이터 소스(HTTP, TCP)로부터 데이터를 받아올 수 있는 오픈소스 데이터 수집기 입니다. Fluentd로 전달된 데이터는 tag, time, record(JSON) 로 구성된 이벤트로 처리되며, 원하는 형태로 가공되어 다양한 목적지(ElasticSearch, S3 등)로 전달될 수 있으며 장애 극복을 위한 HA(High Availability) 구성이 가능합니다.

Kibana는 Elasticsearch에서 색인된 데이터를 검색하고 시각화하는 오픈소스 도구입니다. Elasticsearch의 데이터(로그)를 차트와 그래프 등을 활용하여 대시보드 형태로 시각화 할 수 있습니다. 총 발생한 로그 수를 볼 수 있고, namespace별로 발생한 로그를 차트나 그래프로 볼 수 있는 등 다양한 형태와 방법으로 모니터링 할 수 있습니다.

EFK와 ELK(Elasticsearch + Logstash + Kibana)스택이 비교가 많이 되고 있습니다. EFK 스택과 로그 수집기(Logstash vs Fluentd)만 다르며 같은 Elastic 사 제품인 Logstash가 공식적인 Elastic스택의 일부이므로 지원이 더 낫다는 장점이 있습니다. 하지만 Fluentd는 Kubernetes와 같은 CNCF 스택이기 때문에 마이크로 서비스의 로깅에 더 적합하고, Ruby언어로 작성되어 있어 Logstash에 비해 메모리를 적게 사용하고 메시지 손실이 없다고 알려져 있습니다.