flume使用之exec source收集各端数据汇总到另外一台服务器

转载:http://blog.csdn.net/liuxiao723846/article/details/78133375

一、场景一描述:

线上api接口服务通过log4j往本地磁盘上打印日志,在接口服务器上安装flume,通过exec source收集日志,然后通过avro sink发送到汇总服务器上的flume;汇总服务器上的flume通过avro source接收日志,然后通过file_roll sink写到本地磁盘。

假设:api接口服务器两台 10.153.140.250和10.153.140.251,汇总日志的服务器一台 10.153.137.211

1、api接口服务器上flume配置:

1)在api接口服务器上下载、解压、安装flume:

[html] view plain copy

  1. cd /usr/local/
  2. wget http://mirror.bit.edu.cn/apache/flume/1.7.0/apache-flume-1.7.0-bin.tar.gz
  3. tar -xvzf apache-flume-1.7.9-bin.tar.gz
  4. vim /etc/profile
  5. export PS1="[\[email protected]`/sbin/ifconfig eth0|grep ‘inet ‘|awk -F‘[: ]+‘ ‘{print $4}‘` \W]"‘$ ‘
  6. export FLUME_HOME=/usr/local/apache-flume-1.6.0-bin
  7. export PATH=$PATH:$FLUME_HOME/bin

2)修改flume-env.sh 配置文件:

cd /usr/local/flume/conf

vim flume-env.sh

里面指定java_home,同时在conf目录添加log4j.properties文件;

3)flume配置文件:

agent1.sources = ngrinder

agent1.channels = mc1

agent1.sinks = avro-sink

agent1.sources.ngrinder.type = exec

agent1.sources.ngrinder.command = tail -F /data/logs/ttbrain/ttbrain-recommend-api.log

agent1.sources.ngrinder.channels = mc1

agent1.channels.mc1.type = memory

agent1.channels.mc1.capacity = 1000

agent1.channels.mc1.keep-alive = 60

agent1.sinks.avro-sink.type = avro

agent1.sinks.avro-sink.channel = mc1

agent1.sinks.avro-sink.hostname = 10.153.137.211

agent1.sinks.avro-sink.port = 4545

注意:这里的sink使用了avro,接口服务器的flume会通过rpc的方式将日志数据发给汇总日志的服务器;

4)启动:

nohup flume-ng agent -c /usr/local/apache-flume-1.7.0-bin/conf -f /usr/local/apache-flume-1.7.0-bin/conf/test-tomcat-log.conf  -n agent1 >/dev/null 2>&1 &

2、在汇总日志服务器上flume配置:

1)安装、解压、配置flume:

2)flume配置文件:

collector1.sources = AvroIn

collector1.channels = mc1

collector1.sinks = LocalOut

collector1.sources.AvroIn.type = avro

collector1.sources.AvroIn.bind = 10.153.137.211

collector1.sources.AvroIn.port = 4545

collector1.sources.AvroIn.channels = mc1

collector1.channels.mc1.type = memory

collector1.channels.mc1.capacity = 100

collector1.channels.mc1.transactionCapacity = 100

collector1.sinks.LocalOut.type = file_roll

collector1.sinks.LocalOut.sink.directory = /data/tomcat_log_bak

collector1.sinks.LocalOut.sink.rollInterval = 0

collector1.sinks.LocalOut.channel = mc1

说明:

A、这里的source使用的是avro,和api接口的flume进行对接;

B、这里使用file_roll的sink,将日志数据保存到本地磁盘;

注:bind只能写本机ip或者机器名,不能写localhost等。

3)启动:

nohup flume-ng agent -c /usr/local/apache-flume-1.7.0-bin/conf -f /usr/local/apache-flume-1.7.0-bin/conf/tomcat_collection.conf -n collector1 -Dflume.root.logger=INFO,console >/dev/null 2>&1 &

这是,我们会发现/data/tomcat_log_bak 目录下会生成从两台接口服务器上收集回来的日志。

二、场景二描述:

线上api接口服务通过log4j往本地磁盘上打印日志,在接口服务器上安装flume,通过exec source收集日志,然后通过avro sink将日志发送到汇总服务器上的flume;在汇总服务器上的flume,通过avro source接收到日志,然后通过hdfs sink备份到hdfs上。

假设有api接口服务器两台 10.153.140.250和10.153.140.251,汇总日志的服务器一台 10.153.137.211

1、api接口服务器上flume配置:

同上;

2、汇总服务器上flume配置:

1)安装、解压flume:

2)flume配置文件:

agent1.channels = ch1

agent1.sources = s1

agent1.sinks = log-sink1

agent1.sources.s1.type = avro

agent1.sources.s1.bind = 10.153.135.113

agent1.sources.s1.port = 41414

agent1.sources.s1.threads = 5

agent1.sources.s1.channels = ch1

agent1.channels.ch1.type = memory

agent1.channels.ch1.capacity = 100000

agent1.channels.ch1.transactionCapacity = 100000

agent1.channels.ch1.keep-alive = 30

agent1.sinks.log-sink1.type = hdfs

agent1.sinks.log-sink1.hdfs.path = hdfs://hadoop-jy-namenode/data/qytt/flume

agent1.sinks.log-sink1.hdfs.writeFormat = Text

agent1.sinks.log-sink1.hdfs.fileType = DataStream

agent1.sinks.log-sink1.hdfs.rollInterval = 0

agent1.sinks.log-sink1.hdfs.rollSize = 60554432

agent1.sinks.log-sink1.hdfs.rollCount = 0

agent1.sinks.log-sink1.hdfs.batchSize = 1000

agent1.sinks.log-sink1.hdfs.txnEventMax = 1000

agent1.sinks.log-sink1.hdfs.callTimeout = 60000

agent1.sinks.log-sink1.hdfs.appendTimeout = 60000

agent1.sinks.log-sink1.channel = ch1

说明:

A、这里的source使用的是avro,和api接口的flume进行对接;

B、这里的sink使用的是hdfs,可以将数据写入到hdfs上,这里需要指定hadoop集群的namenode地址。(hdfs://hadoop-jy-namenode/)

3)启动:

nohup flume-ng agent -c /usr/local/apache-flume-1.7.0-bin/conf -f /usr/local/apache-flume-1.7.0-bin/conf/hdfs.conf  -n agent1 >/dev/null 2>&1 &

这时,我们会在hdfs的/data/qytt/flume目录下生成从两台接口服务器上收集回来的日志。

假设有api接口服务器两台 10.153.140.250和10.153.140.251,我们可以在接口服务器上部署flume ,将

汇总日志的服务器一台 10.153.137.211

原文地址:https://www.cnblogs.com/zxf330301/p/8317467.html

时间: 2024-08-29 12:46:53

flume使用之exec source收集各端数据汇总到另外一台服务器的相关文章

flume的案列测试之收集socket端数据,并显示到logger端

步骤: 1.在Linux下安装netcat工具,用户开启socket客户端: a.切换至root下 $>su root b.执行安装命令 $>yum install -y nc c.切换至Alex_lei用户下,模拟聊天室: $>nc 开启服务端 $>nc -l 55555 开启客户端 $>nc localhost 55555 2.创建Agent 编写agent配置信息,在{FLUME_HOME/conf}目录下,新建example.conf,添加以下代码: a1.sourc

Flume内置channel,source,sink汇总

由于经常会使用到Flume的一些channel,source,sink,于是为了方便将这些channel,source,sink汇总出来,也共大家访问. Component Interface Type Alias Implementation Class *.Channel memory *.channel.MemoryChannel *.Channel jdbc *.channel.jdbc.JdbcChannel *.Channel file *.channel.file.FileChan

fork exec source的区别

参考:http://www.cnblogs.com/bkygg/p/5023072.html 1:fork  运行的时候开一个sub_shell 执行调用的脚本,sub_shell执行的时候,parent_shell还在.sub_shell执行完毕后返回parent_shell.sub_shell从parent_shell继承环境变量.但是sub_shell中的变量不会带回parent_shell.在子命令执行完后再执行父命令,子级的环境变量不会影响到父级 2:exec 执行子级的命令后,不再执

在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)——转载

原文链接:http://blog.chinaunix.net/uid-22548820-id-3181798.html fork ( /directory/script.sh) :如果shell中包含执行命令,那么子命令并不影响父级的命令.在子命令执行完后再执行父级命令,子级的环境变量不会影响到父级. fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本.运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候,

在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)

一.fork  ( /directory/script.sh) :如果shell中包含执行命令,那么子命令并不影响父级的命令,在子命令执行完后再执行父级命令.子级的环境变量不会影响到父级. fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本. 运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候, parent-shell还在. sub-shell执行完毕后返回parent-shell. sub-shell

shell中sh, exec, source, fork, ./的区别

https://www.cnblogs.com/cord/p/9226498.html shell中sh, exec, source, fork, ./的区别 1,sh sh test.sh ? sh是通过创建子进程(subshell)去执行脚本,父进程无法使用子进程中的变量,而子进程对环境变量的修改也不会影响到父进程.父进程中的局部变量子进程也无法使用,子进程会继承父进程的环境变量; ? 脚本不需要执行权限 2,exec exec + command ./test.sh exec ? 使用ex

shell调用另一个脚本的三种方式fork/exec/source

exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. bash shell的命令分为两类:外部命令和内部命令.外部命令是通过系统调用或独立的程序实现的,如sed.awk等等.内部命令是由特殊的文件格式(.def)所实现,如cd.history.exec等等. 在说明exe和source的区别之前,先说明一下fork的概念. fork是linux的系统调用,用来创建子进程(child

JJEvent 一个可靠的Android端数据埋点SDK

本文是原理介绍 这里是如何使用传送门 这里是源码地址 V1.0.0功能列表 是否支持 接口自定义 支持 缓存策略 支持 外部cookie注入 支持 推送周期设定 支持 强制推送 支持 自定义埋点事件 支持 独立运行 支持 多线程写入 支持 后台线程服务 支持 注:代码已经经过线上项目验证, 横向Google统计对比,统计数据无丢失,性能稳定. 项目背景 统计数据 是BI做大数据,智能推荐,千人千面,机器学习的 数据源和依据.在这个app都是千人千面,智能推荐,ab流量测试的时代, 一个可以根据B

数据库端数据转移

工作中遇到需要实现不同版本的数据库间,数据同步.当然了前提数据表接口相同.有了2个多小时时间写了一个支持批量多张数据表进行有条件的数据转移.不受标识列的限制.如有不周之处还请大家积极批评指正. ----------*************************************************************************************** if exists (select * from dbo.sysobjects where id = obje