시스템 규모가 커지면서 서버도 많아지고. ......
또한 각각서버는 응가하듯 각자의 머신에 로그를 쌓는다.
그러다가 장애가 발생하면 어느서버인지 확신하지못하면서 전로그를 뒤져보게 된다.
서버가 많으면 이걸 일일히 볼수가 없어서 한곳에 몰아 넣는작업을 했다.
이미 빅데이터 프로젝트를 진행하고 있는지라. 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
'OpenSource(Bigdata&distribution&Network) > Flume' 카테고리의 다른 글
[Flume]kafka를 Sink로 이용 & OS 변수 받아 오기 (0) | 2018.05.29 |
---|