前置条件

安装了Flume
安装 netcat 工具: netcat安装试玩博客

Demo

概述

Flume监控端口的内容 - 图1

定义agent文件

在/apache-flume-1.7.0/conf/目录下新建个job目录,在job目录下面新建个flume-netcat-logger.conf配置文件

注:配置文件来源于官方手册
http://flume.apache.org/FlumeUserGuide.html

  1. #a1是agent的名称,a1中定义了一个叫r1的source,如果有多个,使用空格间隔
  2. # r1 表示是a1的source的名字
  3. a1.sources = r1
  4. # k1表示是a1的sink的名字
  5. a1.sinks = k1
  6. # c1表示是a1的channel的名字
  7. a1.channels = c1
  8. #组名名.属性名=属性值
  9. # 表示a1的输入源类型为netcat端口类型
  10. a1.sources.r1.type = netcat
  11. # 表示a1监听的主机的ip
  12. # 如果是别的机器推送的话,不要写localhost,写监听的机器的ip,可以写自己的机器,
  13. # 如果你写了localhost的话,别的机器无法连接上
  14. a1.sources.r1.bind = 172.16.10.101
  15. # a1监听的端口
  16. a1.sources.r1.port = 4444
  17. #定义sink,表示输出目的地是控制台logger类型的
  18. a1.sinks.k1.type = logger
  19. #定义chanel
  20. # 表示a1的channel c1类型是memory类型的
  21. a1.channels.c1.type = memory
  22. # 表示c1 这个channel的总容量是10000个event
  23. a1.channels.c1.capacity = 10000
  24. # 表示c1 的channel传输时收集到1000条event后再提交事务
  25. a1.channels.c1.transactionCapacity = 1000
  26. #同一个source可以对接多个channel,但是一个sink只能从一个channel里面拿数据
  27. # 表示将r1和c1连接起来
  28. # r1的sources想对接对c1的channels
  29. a1.sources.r1.channels = c1
  30. # 表示将k1和c1连接起来
  31. # k1 sinks想从哪里拿数据?从c1里面拿就配置c1
  32. a1.sinks.k1.channel = c1

[这步骤可以不做]修改logSink日志配置文件

如果不想改的话, 你也可以在启动agent的时候 用 -D 命令指定参数,也可以覆盖这个配置信息.

logSink需要 log配置文件,默认用的是flume/conf/log4j.properties配置文件.如果你想自定义日志的输出啥的,就可以修改这个properties配置文件.

目录: /apache-flume-1.7.0/conf/log4j.properties

flume.root.logger 属性改成DEBUG,console, 或者是 INFO,console 都可以, 主要是console ,这是打印控制台的.

  1. flume.root.logger=DEBUG,console
  2. # flume.root.logger=INFO,LOGFILE
  3. flume.log.dir=./logs
  4. flume.log.file=flume.log

启动agent

启动命令,然后发现开始打印一堆日志,注意日志如果有error 说明哪里配置错了,或者其它原因导致agent没启动成功,

  1. # 启动命令
  2. [root@zjj101 job]# flume-ng agent -c conf/ -n a1 -f /root/soft/apache-flume-1.7.0/conf/job/flume-netcat-logger.conf -Dflume.root.logger=DEBUG,console
  3. # .............省略了一堆没用的日志信息不粘贴在这里了
  4. # flume监听了 4444端口
  5. 20/10/23 09:24:07 INFO source.NetcatSource: Created serverSocket:sun.nio.ch.ServerSocketChannelImpl[/172.16.10.101:4444]

启动命令参数说明

  1. --conf/-c:表示配置文件存储在conf/目录
  2. --name/-n:表示给agent起名为a1,这个取值要和配置文件里面定义的agent名字要一致.
  3. --conf-file/-fflume本次启动读取的配置文件是在job文件夹下的flume-telnet.conf文件,这个路径可以写绝对路径也可以写相对路径
  4. -Dflume.root.logger=INFO,console :-D表示flume运行时动态修改flume.root.logger参数属性值,并将控制台日志打印级别设置为INFO级别。日志级别包括:loginfowarnerror

测试

打开另外一台机器连接4444端口

  1. # 连接zjj101(配置了host映射)机器的4444端口
  2. [root@zjj102 ~]# nc zjj101 4444
  3. 我是张俊杰
  4. OK
  5. 11111
  6. OK
  7. public static void main
  8. OK

输入完了一些内容之后

再看看启动agent机器
控制台打印三条,说明接收到了三条内容,至于为什么中文没显示,是因为我配置了压缩.

  1. 20/10/23 09:26:32 INFO sink.LoggerSink: Event: { headers:{} body: E6 88 91 E6 98 AF E5 BC A0 E4 BF 8A E6 9D B0 ............... }
  2. 20/10/23 09:26:48 INFO sink.LoggerSink: Event: { headers:{} body: 31 31 31 31 31 11111 }
  3. 20/10/23 09:27:10 INFO sink.LoggerSink: Event: { headers:{} body: 70 75 62 6C 69 63 20 73 74 61 74 69 63 20 76 6F public static vo }