본문 바로가기
BIG-DATA/FLUME

[FLUME] 무작정 시작하기 (1) - 설치 및 실행

by 허도치 2019. 11. 29.

  오늘은 Flume에 대해서 알아보도록 하겠다. Flume은 대용량의 로그를 수집하고 비동기로 분산처리할 수 있는 스트리밍 로그 수집기이다. 1.1.0 버전 이후부터 Flume-NG라고 불리면서 좀 더 다루기가 쉬워졌다고 한다. 이번 포스트에서는 1.9.0 버전을 기준으로 진행하려고 한다.

 

 

 

1. Flume이란?

   1-1. 대용량의 로그를 수집하고 비동기로 분산처리할 수 있는 스트리밍 로그 수집기.

   1-2. 각 Component가 커스터마이징을 커스터마이징 할 수 있기때문에 확장성이 우수함.

   1-3. Data Flow.

출처: https://flume.apache.org/FlumeUserGuide.html

         - Source는 로그를 수집하는 역할이며, Avro, Kafka, Syslog 등을 제공.

         - Channel은 수집한 로그를 담아두는 저장소이며, Kakfa, Memory, File 등을 제공.

           * 1개의 Source에 N개의 Channel을 사용할 수 있음.

         - Sink는 수집한 로그를 분산처리(Multi Threading)하여 내보내는 역할, Kafka, Elasticsearch, HDFS 등을 제공.

           * 1개의 Channel에 M개의 Sink를 사용할 수 있음.

         - 1개의 Source로 구성되며 N개의 Channel에 연결할 수 있고 Channel은 다시 M개의 Sink를 연결할 수 있음.

           * 결과적으로 [ Source : Channel : Sink = 1 : N : N*M ]의 구조를 갖음.

 

 

2. 설치.

   2-1. Flume 설치.

         -  apache-flume-1.9.0-bin.tar.gz 다운로드

         - [ C:\work\apache-flume-1.9.0-bin ]에 압축해제.

 

   2-2. JDK 설치.

         - Flume은 JAVA 1.8버전 이상부터 지원함.

         - 설치버전 보다는 JDK를 사용하는 것을 선호하므로 JDK를 설치.

         - jdk-11.0.5_windows-x64_bin.zip 다운로드

         - [ C:\work\apache-flume-1.9.0-bin\java ]에 압축해제.

 

 

3. 설정 및 실행.

   - 작업 폴더 경로: [ C:\work\apache-flume-1.9.0-bin ]

 

   3-1. [ ./conf/agent_dochi.conf ] 작성.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# agent_dochi.conf
 
# Component 이름 지정
agent_dochi.sources = telnet_src
agent_dochi.channels = mem_chnl
agent_dochi.sinks = logger_sink
 
# Source 설정
agent_dochi.sources.telnet_src.channels = mem_chnl
agent_dochi.sources.telnet_src.type = netcat
agent_dochi.sources.telnet_src.bind = localhost
agent_dochi.sources.telnet_src.port = 44444
 
# Channel 설정
agent_dochi.channels.mem_chnl.type = memory
agent_dochi.channels.mem_chnl.capacity = 1000
agent_dochi.channels.mem_chnl.transactionCapacity = 100
 
# Sink 설정
agent_dochi.sinks.logger_sink.channel = mem_chnl
agent_dochi.sinks.logger_sink.type = logger
agent_dochi.sinks.logger_sink.maxBytesToLog = 16
cs

        - [*Agent명].[Component타입].[Component명].[옵션명]

          *Agent명은 Flume 실행시 지정함.

        - 4~7 ln: 각 Component의 이름은 지정, Channel, Sink는 콤마(,)로 구분하여 여러개 입력 가능.

        - 9 ln: Source에 Channel을 연결, 다수의 Channel을 사용하는 경우 추가 작성.

        - 10~12 ln: Netcat Source 옵션 설정, Netcat툴(Telent)으로 전송받은 데이터를 수집.

        - 15~17 ln: *Memory Channel 옵션 설정, 저장소로 Buffer Memory를 사용.

          *Memory Channel은 속도가 빠르지만 작업 도중 중단되면 데이터가 유실될 수 있음.

         - 20 ln: Channel에 Sink를 연결, 다수의 Sink를 사용하는 경우 추가 작성.

         - 21 ln: Logger Sink 설정.

 

   3-2. [ ./flume_start.bat ] 작성.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
rem flume_start.bat
 
@echo off
 
pushd %~dp0
set FLUME_HOME=%cd%
popd
 
set JAVA_HOME=%FLUME_HOME%\java\jdk-11.0.5
set FLUME_PROPS=
set FLUME_PROPS=%FLUME_PROPS%;flume.root.logger=INFO,LOGFILE,console
set FLUME_PROPS=%FLUME_PROPS%;flume.log.dir=%FLUME_HOME%\logs
set FLUME_PROPS=%FLUME_PROPS%;flume.log.file=agent_dochi.log
 
%FLUME_HOME%\bin\flume-ng agent -name agent_dochi -conf %FLUME_HOME%\conf -conf-file %FLUME_HOME%\conf\agent_dochi.conf -property %FLUME_PROPS%
cs

         - 10~13 ln: Flume Java 실행 옵션 설정.

         - 15 ln: Flume 실행

         - [ agent ]: Flume Agent 실행.

         - [ -name ]: Agent 이름 지정.

         - [ -conf ]: Java 환경 설정 파일 폴더 지정, [ *flume-env.sh, *log4j.properties ]

           *flume-env.sh은 JVM 및 Java 실행 옵션 설정 파일. Windows는 확장자 'ps1'

           *log4.properties는 Logging 옵션 설정 파일.

         - [ property ]: Java 실행 옵션 지정, [ -D ]옵션.

 

   3-3. Flume 실행.

         - [ ./flume_start.bat ] 실행.

flume_start.bat 실행 결과

         - [ telnet ] 실행.

1
telnet localhost 44444
cs
     

 

   3-4. 테스트 발송.

         - Telnet에서 아무 메시지나 입력하면 아래와 같이 'Event: { ..., body: 데이터, ... }'로그가 출력됨.

flume 실행 로그

 

 

4. 마치며.

   - 이번 시간에는 Flume에 대해서 간략하게 알아보고 간단하게 실행까지 해보았다. 복잡한 과정없이 설정 파일만 작성해주면 쉽게 실행할 수 있을 것이다.

   - 예제는 Source에서 받은 데이터를 1개의 Channel과 1개의 Sink를 이용해 사용하였는데, 다음 포스트에서는 2개의 Channel과 Channel당 3개의 Sink로 구성하여 보도록 하겠다.

 

댓글