将A服务器上的日志实时采集到B服务器


跨节点进行传输一般采用avro sink
技术选型:
服务器A: exec source+memory channel + avro sink
服务器B: avro source+memory channel+logger sink

在这里插入图片描述

(1)新建服务器A的flume conf配置文件exec-memory-avro.conf

exec-memory-avro.sources = exec-source
exec-memory-avro.sinks = avro-sink
exec-memory-avro.channels = memory-channel

exec-memory-avro.sources.exec-source.type = exec
exec-memory-avro.sources.exec-source.command = tail -F /home/hadoop/data/data.log
exec-memory-avro.sources.exec-source.shell = /bin/sh -c

exec-memory-avro.sinks.avro-sink.type = avro
exec-memory-avro.sinks.avro-sink.hostname = hadoop000
exec-memory-avro.sinks.avro-sink.port = 44444

exec-memory-avro.channels.memory-channel.type = memory

exec-memory-avro.sources.exec-source.channels = memory-chann

(2)新建服务器B的flume conf配置文件avro-memory-logger.conf

avro-memory-logger.sources = avro-source
avro-memory-logger.sinks = logger-sink
avro-memory-logger.channels = memory-channel

avro-memory-logger.sources.avro-source.type = avro
avro-memory-logger.sources.avro-source.bind = hadoop000
avro-memory-logger.sources.avro-source.port = 44444

avro-memory-logger.sinks.logger-sink.type = logger

avro-memory-logger.channels.memory-channel.type = memory

avro-memory-logger.sources.avro-source.channels = memory-channel
avro-memory-logger.sinks.logger-sink.channel = memory-channel

(3)先启动服务器B的flume agent avro-memory-logger

flume-ng agent \
--name avro-memory-logger \
--conf $FLUME_HOME/conf   \
--conf-file $FLUME_HOME/conf/avro-memory-logger.conf \
-Dflume.root.logger=INFO,console

在这里插入图片描述

(4)在启动服务器A的flume agent exec-memory-avro

flume-ng agent \
--name exec-memory-avro \
--conf $FLUME_HOME/conf   \
--conf-file $FLUME_HOME/conf/exec-memory-avro.conf \
-Dflume.root.logger=INFO,console

在这里插入图片描述

(5)测试

服务器A追加日志信息到监控文件中
在这里插入图片描述
服务器A中没有打印日志信息到控制台上,
在这里插入图片描述
服务器B将日志信息打印到控制台上(Logger sink)
在这里插入图片描述
问题:
可以看到日志内容出现了丢失
在这里插入图片描述
在这里插入图片描述
解决:
可以看到Logger Sink中属性maxBytesToLog要记录的事件体的最大字节数默认为16

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐