본문 바로가기
개발자 전향 프로젝트

[Windows] Kafka란? Kafka + Filebeat 설치 및 ELK 연동까지

by 샘오리 2023. 6. 14.

KAFKA란?

링크드인에서 만든 메세지 큐로 크게 4가지 장점이 있어 ELK Stack에서도 많이 사용된다.

1. 비동기(Asynchronous)

메세지를 큐에 넣어두기 때문에 나중에 처리할 수 있어 효율적.

동기화 방식은 많은 메시지를 전송할 경우 병목 현상이 생길 수도 있다.

2. 낮은 결합도(Decoupling)

생산자 서비스와 소비자 서비스가 독립적으로 행하면서 서비스간 결합도가 낮아진다.

Kafka가 ELK로 메세지를 전송하는 것이 아니라 ELK가 Kafka를 구독하는 방식이기 때문에

파일비트도, ELK도 서로를 모른채 중간단계인 Kafka만 알면 된다.

3. 탄력성(Resilience)

서비스가 다운되더라도 어플리케이션은 다운되지 않으며

메시지는 메시지 큐에 남아있기 때문에 서비스 재시작 시 추가설정 없이 메시지 처리가 재개된다.

4. 보장성(Guarantees)

큐에 보관하는 모든 메시지가 결국 소비자에게 전달된다는 일반적인 보장을 제공하며

주로 비교되는 RabbitMq와도 대용량 처리에 있어서 성능우위를 가지고 있다.


KAFKA 설치

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

다운로드 받고 C 드라이브 바로 밑에 폴더 하나 만들고 압축 해제


FILEBEAT 설치

 

https://www.elastic.co/kr/beats/filebeat

 

Filebeat: 경량 로그 분석과 Elasticsearch

로그 파일 데이터를 Logstash와 Elasticsearch로 간편하게 전송하고 데이터를 실시간으로 분석하세요....

www.elastic.co

 

 

 

OS에 맞는 설치파일을 받고 설치한다.

 

필자의 경우 윈도우 OS이기 때문에 위와 같은 .msi 설치파일을 받았으며

설치가 완료되고 아래 체크박스를 체크하고 끄게되면 자동으로 파일비트가 설치된 경로가 열린다.

 

 

 

설치는 끝났으며 여기서  설정파일을 수정하고 실행하면 된다.

위 경로의 파일들을 보면 filebeat.example 이라고 되어있는 yml 유형의 파일을 볼 수 있는데

이는 샘플로 제공된 파일비트 설정파일이고 여기서 원하는 설정을 한 뒤 이름을 원하는대로 수정해주면 된다.

 

여러가지 목적을 위해 필요한 거라면 각 용도에 맞게 filebeat.logstash, filebeat.elasticsearch, filebeat.kafka 등등 사용해도 되고 필자의 경우 테스트를 위해 그냥 filebeat로 하겠다.

 

 

FILEBEAT 설정

Filebeat INPUT

filebeat.yml 의 input 부분

 

아래 샘플의 경우 타입은 로그로 설정했으며 경로는 임의의 폴더로 설정했다. 경로 밑에 *을 달아둠으로써

설정된 경로 아래있는 모든 파일을 긁어오도록 설정했다.

#=========================== Filebeat inputs =============================

filebeat.inputs:
- type: log
  # Change to true to enable this input configuration.
  enabled: true
  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - c:/logs/*

 

Filebeat OUTPUT

filebeat.yml 의 output 부분

*Kafka로 내보낼 것이기에 Elasticsearch output과 같이 다른 Output은 주석처리 필요

#----------------------------- Kafka output --------------------------------
output.kafka:
  hosts: ["127.0.0.1:9092"]
  topic: "아까 생성한 토픽 이름"
  partition.round_robin:
    reachable_only: false

 

*partition 설정에 reachable_only를 false로 둔 이유는 아래와 같다.

  • true: 주 partition이 사용불가인 경우 output이 제한된다.
  • false: 주 partition이 사용불가임에도 output은 제한되지 않는다.

 

FILEBEAT 실행 (지정된 경로에서 로그 수집 해서 KAFKA로 쏘기)

WINDOWS POWERSHELL (RUN AS ADMIN)

cd C:\Filebeat
powershell.exe -ExecutionPolicy UnRestricted -File .\install-service-filebeat.ps1
.\filebeat.exe setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["포트포워딩된 호스트 IP:9200"]'
.\filebeat.exe -e test config
.\filebeat.exe -c filebeat.yml -e -d "*" (포그라운드 실행 + 로그확인)

OR

Start-Service filebeat (백그라운드 실행)
7) Stop-Service filebeat (중지)

 

 

elastic search template 문제가 생긴다면 이전글 참조

https://samori.tistory.com/75

 

[Windows] Filebeat에서 Logstash로 로그 수집 및 전송

샘오리_개발노트 [Windows] Filebeat에서 Logstash로 로그 수집 및 전송 본문 개발자 전향 프로젝트 [Windows] Filebeat에서 Logstash로 로그 수집 및 전송 샘오리 2023. 6. 5. 16:47

samori.tistory.com


KAFKA 무턱대고 실행해보기

 

KAFKA 설정

 

압축 푼 폴더에 config 폴더 -> server.properties 파일에 advertised.listeners 설정을 해준다.

이 설정은 KAFKA의 Output과 비슷한 맥락이다. 

필자의 경우 호스트 PC에 Filebeat와 Kafka를 설치하고 가상환경에 ELK를 뒀기 때문에

KAFKA가 설치된 호스트 PC의 IPv4 주소를 미리 포트포워딩해놓고 

 

 

호스트 PC의 IPv4 주소를 아래에 적어주었다.

 

ZOOKEEPER, KAFKA 켜보기

Kafka를 킨다고 했는데 갑자기 Zookeeper 가 나온다고 해서 설명이 필요할 것 같다. 

https://soobysu.tistory.com/96

 

[Kafka] Zookeeper 란?

Zookeeper 분산 코디네이션 서비스를 제공하는 오픈소스 프로젝트로 직접 어플리케이션 작업을 조율하는 것을 쉽게 개발할 수 있도록 도와주는 도구이다. API를 이용해 동기화나 마스터 선출 등의

soobysu.tistory.com

 

kafka가 설치된(압축해제된) 폴더에 가서

 

이 Zookeeper를 먼저 킨다. 

# zookeeper 실행 명령어
bin\windows\zookeeper-server-start.bat config\zookeeper.properties
# windows에서 2181포트가 실행되었는지 확인
netstat -na | findstr "2181"

 

그 다음 Kafka를 킨다.

# kafka 실행 명령어
bin\windows\kafka-server-start.bat config\server.properties
# windows에서 9092포트가 실행되었는지 확인
netstat -na | findstr "9092"

KAFKA에서 토픽 생성하기

 

토픽 이란? 메세지를 분류 하는 카테고리이다.

예를 들어 사용자가 A라는 로그, B라는 로그, C라는 로그가 있으면 각각 알맞게 다른 토픽 을 생성하면 되는 것이다.

bin\windows\kafka-topics.bat --list --bootstrap-server 127.0.0.1:9092 --topic 토픽이름
# 토픽 생성됐는지 확인 하기
bin\windows\kafka-topics.bat --list --bootstrap-server 127.0.0.1:9092
or 
파일탐색기에서
C:\tmp\kafka-logs 위치에 생성한 토픽이 있는지 확인

 


ELK에서 KAFKA 설정

 

logstash.conf  파일에서 Input을 카프카로 설정해주기

  kafka {
     bootstrap_servers => "Kafka가 설치된 Host PC의 IPv4 주소:9092"
     topics => ["토픽 이름"]
     codec => json
    }

 

이 모든게 설정되었을 때 Filebeat Input에 지정된 경로에 로그를 넣어야한다.