본문 바로가기

OpenSource(Bigdata&distribution&Network)/Flume

log파일 flume으로 hdfs에 저장하기

시스템 규모가 커지면서 서버도 많아지고. ......

또한 각각서버는 응가하듯 각자의 머신에 로그를 쌓는다.

그러다가 장애가 발생하면 어느서버인지 확신하지못하면서 전로그를 뒤져보게 된다.


서버가 많으면 이걸 일일히 볼수가 없어서 한곳에 몰아 넣는작업을 했다.


이미 빅데이터 프로젝트를 진행하고 있는지라. Hadoop 이 있어서 아래처럼 구성했다.


아래는 회사에 적용한 로그 취합 구조이다. 



우리는 서버가 2대가 있는데 이 두대에서 나오는 로그를 쌓고 HDFS에다가 넣어버렸다.



flume conf 설정


flume 1.6 을 사용했고 


인터넷뒤져보면서 2~3개 짬뽕한거니까. 보다가 똑같아! 라고 한다면 그게 맞다 -_-;;;



WAS쪽에 설정된 flume.conf 

agent02.sources = execGenSrc

agent02.channels = memoryChannel

agent02.sinks = avroSink


# For each one of the sources, the type is defined

agent02.sources.execGenSrc.type = exec

agent02.sources.execGenSrc.command = tail -F Server.log

agent02.sources.execGenSrc.batchSize = 10


# The channel can be defined as follows.

agent02.sources.execGenSrc.channels = memoryChannel


# Each sink's type must be defined

agent02.sinks.avroSink.type = avro

agent02.sinks.avroSink.hostname = 취합할 서버 IP 

agent02.sinks.avroSink.port = 33333

agent02.sinks.avroSink.batch-size = 10


#Specify the channel the sink should use

agent02.sinks.avroSink.channel = memoryChannel


# Each channel's type is defined.

agent02.channels.memoryChannel.type = memory


# Other config values specific to each type of channel(sink or source)

# can be defined as well

# In this case, it specifies the capacity of the memory channel

agent02.channels.memoryChannel.capacity = 100000

agent02.channels.memoryChannel.transactionCapacity = 10000


실행은 아래와 같이

$flume-ng agent --conf-file /usr/local/flume/conf/flume.conf --name agent02 &




전송된 로그를 받아서 취합하는쪽 flume.conf

(서버의 여유가 없어서 그냥 Hadoop Master에다가 올렸는데 사용량이 늘면 이것도 분리해야 할 대상)

* 아래보면 알겠지만 년/월/일 디렉토리로 구분

agent01.sources = avroGenSrc

agent01.channels = memoryChannel

agent01.sinks = HDFS


# For each one of the sources, the type is defined

agent01.sources.avroGenSrc.type = avro

agent01.sources.avroGenSrc.bind = 취합할 서버 IP

agent01.sources.avroGenSrc.port = 33333


# The channel can be defined as follows.

agent01.sources.avroGenSrc.channels = memoryChannel


agent01.sinks.HDFS.type = HDFS

agent01.sinks.HDFS.hdfs.path = hdfs://하둡마스터:port/log/%Y/%m/%d 

agent01.sinks.HDFS.hdfs.fileType = DataStream

agent01.sinks.HDFS.hdfs.writeFormat = text

agent01.sinks.HDFS.hdfs.batchSize = 1000

agent01.sinks.HDFS.hdfs.rollSize = 0

agent01.sinks.HDFS.hdfs.rollCount = 10000

agent01.sinks.HDFS.hdfs.rollInterval = 600

agent01.sinks.HDFS.hdfs.useLocalTimeStamp = true


#Specify the channel the sink should use

agent01.sinks.HDFS.channel = memoryChannel


# Each channel's type is defined.

agent01.channels.memoryChannel.type = memory


# Other config values specific to each type of channel(sink or source)

# can be defined as well

# In this case, it specifies the capacity of the memory channel

agent01.channels.memoryChannel.capacity = 100000


실행은 아래와 같이

flume-ng agent --conf-file /usr/local/flume/conf/flume.conf --name agent01




실행하고 몇분 정도있으면 쌓인다 버퍼가 좀있으니 ㅋ 이걸 설정한 오늘날짜 디렉토리를 보면 아래처럼 리스트가 주욱 쌓인다.
( 별다를건없고 저거 걍 받아서 열면 로그가 그대로 잘 보여진다.)
[]$ hadoop fs -ls /log/2015/10/02
날짜 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 14 items
-rw-r--r--   2 hadoop supergroup       7886 System Date 10:32 /log/2015/10/02/FlumeData.1443749496016
-rw-r--r--   2 hadoop supergroup      84770 System Date 10:54 /log/2015/10/02/FlumeData.1443750268279
-rw-r--r--   2 hadoop supergroup      76584 System Date 11:04 /log/2015/10/02/FlumeData.1443750882785
-rw-r--r--   2 hadoop supergroup      80806 System Date 11:14 /log/2015/10/02/FlumeData.1443751485776
-rw-r--r--   2 hadoop supergroup      82399 System Date 11:24 /log/2015/10/02/FlumeData.1443752087823
-rw-r--r--   2 hadoop supergroup      93033 System Date 11:34 /log/2015/10/02/FlumeData.1443752688829
-rw-r--r--   2 hadoop supergroup      97378 System Date 11:45 /log/2015/10/02/FlumeData.1443753300847
-rw-r--r--   2 hadoop supergroup      62234 System Date 11:55 /log/2015/10/02/FlumeData.1443753907868
-rw-r--r--   2 hadoop supergroup      62485 System Date 12:05 /log/2015/10/02/FlumeData.1443754510881
-rw-r--r--   2 hadoop supergroup      62473 System Date 12:15 /log/2015/10/02/FlumeData.1443755148898
-rw-r--r--   2 hadoop supergroup      82722 System Date 12:25 /log/2015/10/02/FlumeData.1443755759911
-rw-r--r--   2 hadoop supergroup      67439 System Date 12:36 /log/2015/10/02/FlumeData.1443756361919
-rw-r--r--   2 hadoop supergroup       2087 System Date 12:49 /log/2015/10/02/FlumeData.1443757141933
-rw-r--r--   2 hadoop supergroup        172 System Date 12:51 /log/2015/10/02/FlumeData.1443757865435.tmp