ELK 스택을 사용해 Log 관리 시스템을 만들때 Kafka가 중간에 메세지 큐로서 주로 사용된다.
여러 app들이 kafka로 log 메세지를 보내는 방법에는 여러가지가 있다.
참조: https://www.elastic.co/kr/blog/just-enough-kafka-for-the-elastic-stack-part1
1. logstash(shipper)
위 그림처럼 Logstash를 사용해서 Kafka로 app에서 생성한 로그파일을 메세지로 전달할 수 있다.
https://www.elastic.co/kr/downloads/logstash 에서 logstash를 다운받아 압축을 푼다.
config파일을 만들어서 logstash를 실행할 수 있다.
input은 파일이고 output은 kafka가 되도록 config파일을 지정해보자.
logstash-kafka.conf
path에서 log파일의 경로를 지정하고 start_position에선 log파일을 어디서부터 읽을 것인지 지정한다.
output으로 kafka를 지정하고 bootstrap_servers로 kafka url를 지정한다. (8.0 이하 버전은 zookeeper로 설정해야 한다)
topic_id에서 토픽 아이디를 지정하고 codec에서 메세지 포멧을 지정한다.
실행은 아래와 같다.
> bin/logstash -f logstash-kafka.conf
2. filebeat
filebeat은 로그파일에 대한 logstash Shipper의 역할을 수행하는 Beats의 한 종류이다.
https://www.elastic.co/kr/downloads/beats 에서 filebeat을 다운로드 받고 압축을 풀고 app이 있는 서버에서 실행하면 되는 구조이다.
filebeat.yml을 다음과 같이 설정한다.
내용은 /Users/jiminsub/Apps/Dev/test/test.log의 로그파일이 변경이 있을때마다 localhost:9092의 test-filebeat 토픽으로 메세지를 보낸다.
filebeat을 실행하는 OS 별 방식이다.
deb:
sudo /etc/init.d/filebeat start
rpm:
sudo /etc/init.d/filebeat start
mac:
sudo ./filebeat -e -c filebeat.yml -d "publish"
win:
PS C:\Program Files\Filebeat> Start-Service filebeat
3. logback에서 직접 메세지 전달
위 두가지 방식은 로그파일을 만들고 파일을 주기적으로 kafka로 전달하는 방식이다.
이번 방법은 application에서 바로 TCP를 통해 kafka로 전달하는 방식이다.
이를 위해 아래 두 dependency가 필요하다
logback-kafka-appender 는 log를 kafka로 전달할 때 사용되고, logstash-logback-encoder는 logstash 레이아웃으로 메세지를 만들 때 사용한다.
다음은 logback.xml이다.
kafkaAppender를 사용할 때 중요한건 topic과 boostrap_server 지정이다. 아래 두 줄이 kafka URL과 토픽을 지정하는 부분이다.
<topic>test-logback</topic>
<producerConfig>bootstrap.servers=localhost:9092</producerConfig>
두가지 레이아웃을 사용할 수 있는데 기본적으로 Logback의 Layout을 사용해 그대로 kafka로 전달할 수 있다.
kafkaAppender가 그 예제이다.
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
위 형태로 메세자기 전달 될 것이다.
두번째 레이아웃은 LogstashLayout 을 이용하는 것이다.
logstashKafkaLayout을 보면 layout에 LogstashLayout으로 지정하면 logstash에서 자동으로 다른 필드들이 지정된다.
아래 두 layout의 메시지 예제이다.
"HOSTNAME": "Minsubsui-MacBook-Pro.local" }
4. Log4j에서 메세지 직접 전달
위 3번째 logback을 사용한 방법과 거의 유사하다.
이를 위한 dependency는 아래와 같다. 그리고 logback에서 사용할 수 있는 logstash layout은 사용할 수 가 없다.
다음은 log4j.xml 이다
logback방식에서도 설명했듯이 kafka url과 토픽을 지정하는 부분이 필수이다. 아래 두줄이 log4j에서 토픽과 서버를 지정하는 방식이다.
<param name="Topic" value="test-log4j" />
<param name="BrokerList" value="localhost:9092" />
5. Log4j2에서 메세지 직접 전달
log4j2는 자체적으로 kafka로 메세지 전달하는 방식을 기본적으로 제공한다.
따라서 부가적인 dependency는 필요없다.
아래 log4j2.xml을 보면 <kafka> 태그가 존재한다. properties로 topic과 boostrap.servers를 지정할 수 있다.
이방식도 마찬가지로 logstash layout을 사용 할 수 없다.
'Big Data > Kafka' 카테고리의 다른 글
Kafka #2 클러스터 구축 & quick start (0) | 2017.03.11 |
---|---|
Kafka #1 소개 (0) | 2017.03.11 |
Logstash(Shipper) 를 사용해 Kafka 메세지를 elasticsearch로 저장 (0) | 2017.01.30 |
kafka #3 Kafka-Manager 설치 (0) | 2017.01.08 |