기타/인프라 구축과정

[Infra] 7. ELK Stack & Kafka 흐름 - HelloWorld Project

배발자 2023. 6. 1.
반응형

 

 

 

Elastic Stack(ELK + Beats) Kafka를 추가하여 구현하였다.

Kafka 를 도입하는 많은 이유 중 하나는 트래픽이 몰리면 Logstash, Elasticsearch 만으로는 부하를 견디기 힘들다고한다. 일반적으로 분산 메시징 시스템으로서, 로그 또는 이벤트 데이터를 수집하고 처리하는 중간 계층 역할을 한다. 이 아키텍처의 큰 장점 중 하나는 Kafka가 로그 데이터의 흐름을 안정화시키고 시스템이 부하에 대응할 수 있도록 해준다.

 

Kafka

 

Kafka는 Pub-Sub 모델을 가지는 분산 메시징 플랫폼이다. 기존 메시징 시스템처럼 Broker 가 Consumer 에게 직접 메시지를 전송하는 방식이 아니라, Consumer가 Broker 로부터 직접 메시지를 가져가는 방식이다.

 

  • Producer - 메시지 발행 ex) filebeat
  • Consumer - 메시지 구독 ex) logstash
  • Broker - Kafka 서버
  • Topic - 저장되는 데이터를 구분하는 용도 ex) DB 테이블
  • Zookeeper - Kafka 서버 관리

 

기존 아키텍처에서는 Filebeat 3개에서 Logstash로 데이터를 직접 전송했지만 Kafka를 추가함으로써, filebeat들은 kafka로 전송하고 Logstash에서 kafka에 있는 데이터를 가져오게 된다.

 

더 자세한 내용은 아래 링크에 정리해두었다. 

 

 

카프카의 도입 이유와 ELK-Stack과 결합한 시스템 설계

프로젝트를 진행하면서 서비스의 API 기능을 구현하는 것뿐만이 아니라 '성능 개선', '트래픽 처리'를 주제로 어떤 기술을 도입을 할지 고민을 하는 시점이 있었다. 그때 당시 ELK-Stack을 활용한 로

baebalja.tistory.com

 

[기술적 선택] 카프카의 고가용성과 리플리케이션 & 스프링 부트 테스트

프로젝트를 진행하면서 ELK-Stack을 활용하여 로그 수집을 진행하였고 추가적으로 kafka를 도입하면서 안정화된 시스템을 구축하였다. 하지만, 프로젝트의 제한된 날짜 때문에 카프카의 큰 장점을

baebalja.tistory.com

 


 

현재 EC2 서버 2개가 존재한다. A서버는 메인 서버, B 서버는 서브 서버

 

[A서버]

 

Spring MVC 컨테이너 : 기본적인 RestApi 비지니스 로직으로 구성 (MariaDB 데이터 활용)

Spring WebFlux 컨테이너 : 기본적인 알림 비지니스 로직으로 구성 (MongoDB 데이터활용)

Spring Story 컨테이너 : 기본적인 스토리 관련 비지니스 로직으로 구성 (MongoDB 데이터활용)

 

이 3개의 컨테이너에서 파일비트를 심어서 Kafka로 보내준다.

 

[B서버]

 

ELK 컨테이너 : Elasticsearch, Logstash, Kibana 컨테이너 활용

 

A 서버의 kafka는 파일비트들에서 보내준 로그들을 받고 B서버의 로그스태시가 ‘logs’라는 토픽을 구독한 상태이다. 이때 kafka에 ‘logs’토픽으로 데이터가 들어오면 컨슈머인 로그스태쉬가 해당 데이터를 받아오게된다.

 

수집된 데이터는 Logstash에 의해 처리되며, 이 과정에서 데이터 정제, 필터링, 변환 작업이 이루어진다. 처리된 데이터는 Elasticsearch에 저장되는데 데이터를 분산, 검색 가능한 형태로 저장하며, 이를 위해 역 인덱싱과 같은 방식을 사용한다. Elasticsearch는 사용자가 데이터를 검색하고, 질의를 수행할 수 있도록 한다. 복잡한 검색 쿼리를 사용하여 특정 데이터를 찾거나, 데이터 내에서 패턴을 탐색하는 것이 가능하다. Kibana는 Elasticsearch에서 저장된 데이터를 시각화하고 대시보드를 제공하여, 사용자가 데이터를 쉽게 이해하고 분석할 수 있도록 돕는다. 

 

[ELK Stack + Kafka 아키텍처 전체 데이터 흐름]

 

  1. 데이터 수집: A서버의 3개의 Filebeat 인스턴스가 각 서버에서 로그 파일을 모니터링하고 읽는다. 이들은 구성된 대로 특정 파일 또는 디렉토리를 지속적으로 모니터링하며, 새로운 로그 이벤트가 발생하면 이를 즉시 수집한다.
  2. 데이터 전송: 수집된 로그 이벤트는 Filebeat에 의해 Kafka로 전송된다. Kafka의 토픽(topic)에 따라 이벤트가 분류되고 저장된다. 로그 토픽은 ‘logs’라는 이름으로 정했다.
  3. 메시지 큐잉: 수집된 메시지는 안정적으로 저장되며, Logstash나 다른 컨슈머가 필요에 따라 이를 가져갈 수 있다.
  4. 데이터 처리: Logstash는 Kafka에서 메시지를 가져와 필터링, 변환 등의 처리를 수행한 후 Elasticsearch로 전송한다. Logstash의 Kafka input 플러그인과 Elasticsearch output 플러그인이 이 과정을 담당한다.
  5. 데이터 저장: 처리된 데이터는 Elasticsearch에 저장되며, 이후 Kibana 등을 통해 검색 및 시각화가 가능하다.

 

* kafka에 대한 동작원리를 이해하는 것도 중요하니 최근에 정리한 글을 읽어보시면 좋을거같습니다.

 

'개발 일지/Kafka' 카테고리의 글 목록

 

baebalja.tistory.com

 

반응형

댓글