오늘은 Flume에 대해서 알아보도록 하겠다. Flume은 대용량의 로그를 수집하고 비동기로 분산처리할 수 있는 스트리밍 로그 수집기이다. 1.1.0 버전 이후부터 Flume-NG라고 불리면서 좀 더 다루기가 쉬워졌다고 한다. 이번 포스트에서는 1.9.0 버전을 기준으로 진행하려고 한다.
1. Flume이란?
1-1. 대용량의 로그를 수집하고 비동기로 분산처리할 수 있는 스트리밍 로그 수집기.
1-2. 각 Component가 커스터마이징을 커스터마이징 할 수 있기때문에 확장성이 우수함.
1-3. Data Flow.
- 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 ] 실행.
- [ telnet ] 실행.
1
|
telnet localhost 44444
|
cs |
3-4. 테스트 발송.
- Telnet에서 아무 메시지나 입력하면 아래와 같이 'Event: { ..., body: 데이터, ... }'로그가 출력됨.
4. 마치며.
- 이번 시간에는 Flume에 대해서 간략하게 알아보고 간단하게 실행까지 해보았다. 복잡한 과정없이 설정 파일만 작성해주면 쉽게 실행할 수 있을 것이다.
- 예제는 Source에서 받은 데이터를 1개의 Channel과 1개의 Sink를 이용해 사용하였는데, 다음 포스트에서는 2개의 Channel과 Channel당 3개의 Sink로 구성하여 보도록 하겠다.
'BIG-DATA > FLUME' 카테고리의 다른 글
[FLUME] 무작정 시작하기 (3) - Kafka Source (0) | 2019.12.03 |
---|---|
[FLUME] 무작정 시작하기 (2) - Channel & Sink 의 분산처리 (0) | 2019.12.02 |
댓글