Logstash插件开发介绍 本次文档一共分为3部分,分别为下面3个部分,并且会附上不同的参考文档 - Logstash输入插件介绍 - Filter插件开发详解 - 开发过程遇到一些问题总结 ##logstash介绍 >Logstash 是一款强大的数据处理工具,它可以实现数据传输,格式处理,格式化输出,还有强大的插件功能,常用于日志处理。其工作流程如下:
它处理数据有3个阶段
- Input
- Filter
- Output
- input 数据输入端,可以接收来自任何地方的源数据
- Filter 数据中转层,主要进行格式处理,数据类型转换、数据过滤、字段添加,修改等,常用的过滤器如下
- output 是logstash工作的最后一个阶段,负责将数据输出到指定位置,兼容大多数应用
安装下载参考文档:
注意:在window中,用bin/logstash.agent -f logstash 命令来启动logstash
Logstash插件介绍
###FileInput插件介绍
FileInput插件是经常用到的输入插件,主要从文本中提取数据,然后经过一系列的Filter插件过滤和处理后,把数据再传递到Output插件,然后对数据进行输出,这主要介绍FilterInput插件的配置参数,可以参照官网。
配置参数 | 示例 | 详解 |
path | path => ["/var/log/nginx/access.log"],path => “/var/log/nginx/*.log” | 文件源,可以检测若干文件,String或者数组类型 |
codec | codec=>plain{charset=>“UTF-8”} | codec插件,默认是plain,可以设置编码格式 |
discover_interval | discover_interval=>20 | 检查一次被监听的path下是否有新文件,默认值是15秒 |
exclude | exclude=>“Message.log”,exclude=>[1.log,*.txt] | 排除不需要监测的文件,string或者数组类型 |
sincedb_path | sincedb_path=>"/home/hadoop/1.txt" | 记录处理文件的位置,默认为$HOME/.sincedb,如果设置为:/dev/null,则代表忽略检测位置 |
stat_interval | stat_interval=>10 | 隔多久检查一次被监听文件状态,默认1秒 |
start_position | start_position=>“beginning”,start_position=>“end” | logstash从什么位置开始读取文件数据,配置为[beginning,end]中的一个,默认是结束位置 |
tags | tags=>“logstash” | 标记,一个字段 |
close_order | close_order=>3600 | 文件输入会关闭上一次读取指定时间间隔的文件。 这取决于文件是否被拖尾或读取,具有不同的含义。 如果拖尾,并且输入数据中存在大的时间间隔,则可以关闭文件(允许打开其他文件),但在检测到新数据时将排队等待重新打开。 如果读取,文件将在从最后一个字节读取后的closed_older秒后关闭。 默认值为1小时 |
delimiter | delimiter=>"\n" | 读取事件的分割,默认是’\n’,也就是以一行为一个事件 |
sincedb_write_interval | sincedb_write_interval=>10 | 多久写一次读取位置的文件,就是是sincedb_path,默认15秒 |
这个是FileInput插件读取的详细参数
下面来介绍几个常用到的Filter插件
###KV插件
KV插件设置一定的格式,来读取字段中的键值对
其中有两个比较重要的参数,如下:
- field_split - value_split
field_split为两个键值对间的分隔符,而value_split则是两个key,value之间的分隔符
>若要切割的字段如下: >message="messagid=123&name=logstash" >kv的配置如下: >kv{ source=>"message" field_split =>"&" value_split =>"=" } >则message会把切割成 messageid="123" name="logstash"
###multiline插件
mutile插件的主要作用是根据正则表达式,把多条事件合并或者切割成一条,详细了解请点击:mutiline插件详解: ###mutate插件
mutate插件可以把一些字符串替换成别的字符串,通过gsub来实现。或者通过split来切割不同的字符串
mutate {
gsub=>[“message”, “\n”, “$”]
split=>[“message”,“keyword”]
}这样配置,message会把message字段中的\n替换成$,并且根据keyword把messageqi切割字符串,通过[message][0],[message][1]来获取字段。
###Output插件WebHDFS介绍
webhdfs插件主要是把日志上传到HDFS文件系统中,其格式为:
webhdfs{
host => “127.0.0.1”
port => 50070
user => “hadoop”
path => “/logstash/data”
codec => plain
{
charset=>“UTF-8”
format=>"%{message}"
}
}