第4.1.1章 logback与flume集成

1 flume配置
1.1 flume-env.sh

export JAVA_OPTS="-Xms100m -Xmx1000m"
export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=utf-8"

2 logback集成
logback-flume-appender插件
** logback.xml相关配置**
下图中我将trace级别的日志输出到flume中,因为平常项目中,我们经常用的是info、error、debug




	
		
		${flume.agents}
		connect-timeout=4000;request-timeout=8000
		100
		1000
		
		dir=logs
		
		${domain}
		
			TRACE
			ACCEPT
			DENY
		

	

     
		
	

这里直接将日志写入到hadoop中,可以在控制台中看到对应的文件
第4.1.1章 logback与flume集成_第1张图片
下载后,可以看到里面的数据,里面只会记录,我们需要的数据。
2
去掉了

		
			%message%n%ex
		

因为logback-flume-appender数据发送body内容异常
这个问题在单进程写日志的时候不会出现,在2个以上的进程时出现event的body数据异常,导致flume的自定义sink中无法解析数据
原因是body中在正常的数据末尾,出现很多空串或者其他的数据,导致解析失败。
分析日志后,发现header中的message数据正常,但body出现问题。怀疑是layout格式化时出现的问题,去掉logback.xml中的layout节点后,数据不再出现异常。
《Flume构建高可用、可扩展的海量日志采集系统》描述数据一旦写入HDFS就不可改变,HDFS中的文件只支持追加的方式,一旦一个文件被创建并写入数据,该文件可以被追加或删除,但是不能改变该文件中的数据。
而Hbase尽管运行在HDFS上,但是Hbase支持对任何写入数据的更新操作,非常类似传统的数据库系统。
这样的特性,也可以理解hdfs存储日志较为合适,存放业务数据并不合适
如果log写入hdfs增加channel,则需要增加配置

hdfs-agent.sources = hdfs-source
hdfs-agent.channels = hdfs-channel
hdfs-agent.sinks = hdfs-sink

# source
hdfs-agent.sources.hdfs-source.type=avro
hdfs-agent.sources.hdfs-source.bind=0.0.0.0
hdfs-agent.sources.hdfs-source.port=36001

# channel
hdfs-agent.channels.hdfs-channel.flumeBatchSize = 100
hdfs-agent.channels.hdfs-channel.type = org.apache.flume.channel.kafka.KafkaChannel
hdfs-agent.channels.hdfs-channel.kafka.bootstrap.servers = bwsc68:9092,bwsc68:9092,bwsc70:9092
hdfs-agent.channels.hdfs-channel.kafka.topic = hdfs_flume
hdfs-agent.channels.hdfs-channel.kafka.consumer.group.id = hdfs_flume_channel
#hdfs-agent.channels.hdfs-channel.kafka.dcm-workorder-channel.kafka.consumer.auto.offset.reset = latest

# sink
hdfs-agent.sinks.hdfs-sink.type=hdfs
hdfs-agent.sinks.hdfs-sink.hdfs.path=hdfs://bwsc65:9000/flume/%{application}/%{dir}/%Y%m%d
hdfs-agent.sinks.hdfs-sink.hdfs.fileType=DataStream
hdfs-agent.sinks.hdfs-sink.hdfs.writeFormat=Text
hdfs-agent.sinks.hdfs-sink.hdfs.round=true
hdfs-agent.sinks.hdfs-sink.hdfs.rollInterval=0
hdfs-agent.sinks.hdfs-sink.hdfs.rollSize=10240
hdfs-agent.sinks.hdfs-sink.hdfs.rollCount=0

# assemble
hdfs-agent.sources.hdfs-source.channels = hdfs-channel
hdfs-agent.sinks.hdfs-sink.channel = hdfs-channel

通过HDFS管理工具HDFS Explorer,这个工具可以更为容易看到hdfs中的内容,这里可以看到我的文件都是很小的,莫非是我的数据流量本来就不大?
第4.1.1章 logback与flume集成_第2张图片

你可能感兴趣的:(flume,大数据杂烩)