第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

<property resource="properties/config.properties" />

<!-- hadoop目录格式为:/%Y%m%d/%{application}/%{dir} 对应application配置节和additionalAvroHeaders中的dir,其中dir可以为不配置 -->
	<appender name="flume" class="com.gilt.logback.flume.FlumeLogstashV1Appender">
		<!-- 此项是连接flume节点的ip和端口 -->
		<flumeAgents>${flume.agents}</flumeAgents>
		<flumeProperties>connect-timeout=4000;request-timeout=8000</flumeProperties>
		<batchSize>100</batchSize>
		<reportingWindow>1000</reportingWindow>
		<!-- 此项配置avro头部信息,dir标识目录 -->
		<additionalAvroHeaders>dir=logs</additionalAvroHeaders>
		<!-- 此项配置当前应用 -->
		<application>${domain}</application>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>TRACE</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>

	</appender>

<logger name="com.dzmsoft.framework.log.service.impl.LogServiceImpl"  level="TRACE" >     
		<appender-ref ref="flume" />
	</logger>

这里直接将日志写入到hadoop中,可以在控制台中看到对应的文件
1
下载后,可以看到里面的数据,里面只会记录,我们需要的数据。
2
去掉了

		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%message%n%ex</pattern>
		</layout>

因为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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

warrah

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值