FLUME第三方jar的使用,解析事件里的时间,监控目录下的文件,连接elasticsearch 2.2。分别为一个拦截器、一个source和一个sink。
1.1 flume_EventTimeSamp.jar
用途:因为FLUME本身对时间戳的解析比较弱,该jar用于将事件中的时间提取解析成时间戳格式。
用法:配合flume自带的的正则解析器共同使用,通过正则匹配出来的时间字段转换成时间戳。
配置参数:
名称 |
配置 |
说明 |
type |
org.apache.flume.interceptor.EventTimestampInterceptor$Builder |
默认使用的类 |
preserveExisting |
false |
是否已有时间戳 |
dateFormatField |
time |
默认字段为time |
dateFormat |
MMM dd HH:mm:ss |
指定时间格式 |
agent.sources.tail.interceptors=i1 i2
agent.sources.tail.interceptors.i1.type=regex_extractor
agent.sources.tail.interceptors.i1.regex = (\\w+\\s+\\w+\\s+\\d+\\\:\\d+\\\:\\d+)\\s+
agent.sources.tail.interceptors.i1.serializers = s1
agent.sources.tail.interceptors.i1.serializers.s1.name= time
agent.sources.tail.interceptors.i2.type =org.apache.flume.interceptor.EventTimestampInterceptor$Builder
agent.sources.tail.interceptors.i2.preserveExisting =false
agent.sources.tail.interceptors.i2.dateFormatField =time
agent.sources.tail.interceptors.i2.dateFormat = MMM ddHH:mm:ss
1.2 DirectoryMonitorSource.jar
用途:作用如spooldir,
spooldir的缺点为:
1、 此source在部署是,是一种侵入式,必须对已有应用的日志切分(rotate strategy)进行修改,比如修改为每5分钟切换一次;
2、 需要一个外部进程(或者命令),将应用切分后,完整的一个日志片段mv到spooldir下(应用不能直接向spooldir中写数据,否则导致程序死掉);
3、 传输做不到实时,因为我们不可能让应用每五秒、十秒就进行日志切换;
4、 不支持断点续传,比如agent挂掉后,如果某个文件已经传输一半,则可能出现重复传输已经传输过的数据(同时意味着后续对其运维的起停过程难以实现);
配置参数:
名称 |
配置 |
说明 |
type |
com.fusionskye.simpleExcelSource.DirectoryMonitorSource |
必须写成FQCN这种形式; |
monitor_dir |
监控目录 |
注:不支持目录嵌套递归监控,会自动跳过目录下的子目录; |
meta_store_dir |
meta存储目录 |
支持断点续传,需要记录meta信息;轻量级信息,每个文件大约100个字节的meta信息; |
file_name_include_pattern |
目录下文件名的白名单正则表达式;默认为“.*”,表示所有文件(隐藏文件除外),均包含; |
比如:app.log.* |
file_name_exclude_pattern |
目录下文件名的黑名单正则表达式; 默认:“^[.].*” 以’.’开头的文件加入黑名单 |
|
first_line_pattern |
一个record的第一行的正则表达式 默认:无 |
注:这两个参数,必须至少设定一个,否则没有办法去区分record的边界; 如果两个参数均不制定,责默认文 件每一行数据为一个record; |
last_line_pattern |
一个record的最后一行的正则表达式 默认:无 |
|
file_content_include_pattern |
一个record(可能是多行数据)的白名单正则表达式 默认:”[\\s\\S]*” |
注:由于我们日志文件中存在\t,\n等字符,通常的正则表达式”.*”是不能匹配这些字符的,因此白名单中,如果是所有内容都接受,必须写成如下的正则表达式: “[\\s\\S]*” 正则表达式的具体语法请google 之。 |
file_content_exclude_pattern |
一个record(可能是多行数 据)的黑名单正则表达式 默认:无 |
|
file_check_interval_sec |
多长时间对目录下 默认:5秒 |
|
file_send_interval_sec |
多长时间发送一次数据 默认:3秒 |
|
#配置source的详情
agent.sources.excel.type= com.fusionskye.simpleExcelSource.DirectoryMonitorSource
agent.sources.excel.monitor_dir= /root/zhongxin/data
agent.sources.excel.batchSize= 10
agent.sources.excel.interceptors=i1
agent.sources.excel.interceptors.i1.type =org.apache.flume.interceptor.EventTimestampInterceptor$Builderagent.sources.tail.interceptors
1.3 elasticsearch-sink2-1.0.jar elasticsearch-sink2-assembly-1.0.jar
用途:用于flume 1.6连接elasticsearch 2.2版本的sink。
用法:将elasticsearch-sink2-1.0.jar和elasticsearch-sink2-assembly-1.0.jar导入服务器中。
[root@laiym ~]# cd /usr/local/flume/lib/
[root@laiym lib]# rm -rf guava-*.jarjackson-core-*.jar
[root@laiym lib]# mv /root/elasticsearch-sink2* .
备注:因为删除了jackson-core-*包,对原有的spooldir导入方式会出现错误,推荐使用 1.2 DirectoryMonitorSource.jar第三方插件监控目录。
#配置sink的详情
agent.sinks.elasticsearch.type=com.frontier45.flume.sink.elasticsearch2.ElasticSearchSink
agent.sinks.elasticsearch.batchSize=100
agent.sinks.elasticsearch.hostNames=192.168.1.159:9300
agent.sinks.elasticsearch.indexName=linux_secure
agent.sinks.elasticsearch.indexType=message
agent.sinks.elasticsearch.clusterName=es
agent.sinks.elasticsearch.serializer=com.frontier45.flume.sink.elasticsearch2.ElasticSearchDynamicSerializer
agent.sinks.elasticsearch.indexNameBuilder=com.frontier45.flume.sink.elasticsearch2.TimeBasedIndexNameBuilder