从不同的源收集,聚合日志,传输到存储系统。
source用来读取数据,可以是各种客户端,或者来自另一个agent,存入channel,sink来消费,整个过程是异步的。
event只有在被成功存入下一个agent的channel里(多个agent)或最终目的地(单个agent)时才删除,确保可靠性。
Channel 有文件和内存两种。
多个实例要指定 <conf-dir>,包含flume_env.sh和log4j文件配置。
使用第三方插件的jar包要加入 flume-env.sh中的FLUME_CLASSPATH 变量。
flume启动时加载 $FLUME_HOME/plugins.d
插件目录结构:
lib - the plugin’sjar(s)
libext - the plugin’sdependency jar(s)
native - any requirednative libraries, such as .so files
数据源类型:
rpc:
内置avro客户端可以发送给flumesource文件:bin/flume-ngavro-client -H localhost -p 41414 -F /usr/logs/log.10
exec:
执行命令,结果传入flume。例如,封装tail 命令。
网络流:
Avro
Thrift
Syslog
Netcat
多个agent时,之间使用avro rpc来连接,前面agent的sink和后面agent的source类型都是avro。
经典场景:
特殊场景:
不规则流:
复制:数据发送到每个channel
选择分发:根据条件选择一个或多个channel发送
agent_foo.sources.avro-AppSrv-source1.selector.optional.CA= mem-channel-1 file-channel-2
Selector 先发送必须的,失败会重发,全部发完后会尝试发送optional ,失败不重发。
有require先发required,再发default,再发optional。
问题:
1、default失败会重发吗?
2、如果一个channel同时是required和optional会重复发送吗?
AvroSource:可配置拦截器,是否压缩,ssl,ip过滤,
ipFilter.rules=allow:ip:127.*,allow:name:localhost,deny:ip:*
过滤除本机外的其他客户端ip
Thrift Source:
ExecSource:没有安全保证,建议用sdk提供的source。
JMSSource:接收队列或主题。默认可以转换Bytes, Text, Object 消息为 FlumeEvents。
Spooling DirectorySource:(比较有用)
监测新文件并读取,成功发送到channel后重命名或删除,可配置。
每个文件名要唯一(在过去,现在,将来)
type spooldir.
spoolDir 要监测的目录
fileSuffix .COMPLETED 文件读完后加后缀
deletePolicy never 文件读完后删除策略,neveror immediate
fileHeader false 文件绝对路径名加入文件头
fileHeaderKey file
basenameHeader false 文件名加入文件头
basenameHeaderKey basename
ignorePattern ^$ 要忽略的文件样式
trackerDir .flumespool 保存正在处理的文件的元数据的文件,如果是相对路径,则相对于spooldir
consumeOrder oldest 文件读取顺序oldest, youngest and random. 如果是 oldest 或youngest, 比较文件最后修 改时间.一样的话按词典序消费.
maxBackoff 4000 channel写满后最大等待时间。
batchSize 100
inputCharset UTF-8
decodeErrorPolicy FAIL 遇到不能解码的字符如何处理.FAIL: 直接抛异常. REPLACE: 替换成别的. IGNORE: 忽略。
deserializer LINE 序列化配置实现EventDeserializer.Builder. 内置有BlobDeserializer,AVRO,LINE
deserializer.*
bufferMaxLines – (Obselete)This option is now ignored.
bufferMaxLineLength 5000 (Deprecated)Maximum length of a line in the commit buffer. Use deserializer.maxLineLengthinstead.
selector.type replicating replicatingor multiplexing
selector.* Depends on the selector.typevalue
interceptors – Space-separatedlist of interceptors
interceptors.*
Twitter1% firehose Source (开发试验中),看名字就知道可以忽略。
NetCatSource:类似nc,监听一个端口
SequenceGenerator Source:0,1,2,3,4.。。
Syslog Sources:
SyslogTCP Source:按行读
MultiportSyslog TCP Source:空格隔开端口
SyslogUDP Source:读整个消息
HTTPSource:接收post请求数据。通过handler插件转换成flumeevents,一次请求的所有数据转换成的events在一次事务中。自己写要实现HTTPSourceHandler 接口。内置handler有JSONHandler,blobhandler。
LegacySources:接收低版本flume agent的数据。Avro和 Thrift 。
Custom Source:自定义
Scribe Source:
HDFSSink:目前支持text和序列化格式及他们的压缩。根据时间周期或文件大小创建多个文件。可以根据时间戳或来源机器分区分桶。输出目录支持多种转义序列。正在写的文件后缀.tmp.
LoggerSink:测试,debug用
Avro Sink
Thrift Sink
IRC Sink:
File Roll Sink(比较有用)
HBaseSink:默认实现了两个Serializer,一个直接put,增加column(可选),另一个通过正则解析后插到不同的列。
AsyncHBaseSink:
MorphlineSolrSink:写到solrserver
ElasticSearchSink:
Memory Channel
JDBCChannel:目前支持Derby
File Channel
环境配置:
1、下载,解压,配置环境变量。
2、修改配置文件conf/flume-conf.properties
启动agent:flume-ng agent--conf conf --conf-fileconf/flume-conf.properties --name producer-Dflume.root.logger=INFO,console