2、Logstash 篇之插件详解
文章目录
- input插件详解及glob讲解
- codec插件详解
- filter插件简介及date插件讲解
- Filter Plugin - date
- filter插件之grok简介(上)
- filter插件之grok简介(下)
- filter插件之dissect讲解
- filter插件之mutate 讲解
- Filter Plugin – mutate
- Filter Plugin – mutate convert
- Filter Plugin – mutate gsub
- Filter Plugin – mutate split
- Filter Plugin – mutate join
- Filter Plugin – mutate merge
- Filter Plugin – mutate rename
- Filter Plugin – mutate update/replace
- Filter Plugin – mutate remove
- filter插件之 json讲解
- filter 插件之geoip和ruby 讲解
- output插件简介
input插件详解及glob讲解
input Plugin
.input插件指定数据输入源,一个pipeline可以有多个input插件,我们主要讲解下面的几个input插件
- stdin
- file
- kafka
Input Plugin – stdin
·最简单的输入,从标准输入读取数据,通用配置为:
- codec类型为codec-type类型为string ,自定义该事件的类型,可用于后续判断
- tags类型为array ,自定义该事件的tag ,可用于后续判断
- add_field类型为hash ,为该事件添加字段
input{
stdin{
codec=>"plain"
tags=>["test"]
type=>"std"
add_field=>{"key"=>"value"}
}
}
output{
stdout{
codec=>"rubydebug"
}
}
Input Plugin-file
·从文件读取数据,如常见的日志文件。文件读取通常要解决几个问题:
- 文件内容如何只被读取一次?即重启L时,从上次读取的位置继续
- sincedb
- 如何即时读取到文件的新内容?
- 定时检查文件是否有更新
- 如何发现新文件并进行读取?
- 可以,定时检查新文件
- 如果文件发生了归档(rotation)操作,是否影响当前的内容读取?
- 不影响,被归档的文件内容可以继续被读取
理论实现源码:
-
path类型为数组,指明读取的文件路径,基于glob匹配语法
path => ["/var/log/*/*log", “/var/log/message”] -
exclue类型为数组排除不想监听的文件规则,基于glob匹配语法
exclude => “*.gz” -
sincedb-path类型为字符串,记录sincedb文件路径
-
start-postion类型为字符串, beginning or end ,是否从头读取文件
-
stat interval类型为数值,单位秒,定时检查文件是否有更新,默认1秒
-
discover interval类型为数值,单位秒,定时检查是否有新文件待读取,默认15秒
-
ignore-older类型为数值,单位秒,扫描文件列表时,如果该文件上次更改时间 1 超过设定的时长,则不做处理,但依然会监控是否有新内容,默认关闭
-
close older类型为数值,单位秒,如果监听的文件在超过该设定时间内没有新内容,会被关闭文件句柄,释放资源,但依然会监控是否有新内容,默认3600秒,即1个小时
Input Plugin – glob匹配语法
实际生产中不会从头读取
建议调试中设置sincedb_path;每次都会从头读取
Input Plugin - kafka
codec插件详解
Codec Plugin
Codec Plugin作用于input和output plugin ,负责将数据在原始与LogstashEvent之间转换,常见的codec有:
- plain读取原始内容
- dots将内容简化为点进行输出
- rubydebug将Logstash Events按照ruby格式输出,方便调试
- line处理带有换行符的内容
- json处理json格式的内容
- multiline处理多行数据的内容
错误输入
正确输入
Codec Plugin – multiline
·当一个Event的message由多行组成时,需要使用该codec ,常见的情况是堆栈日志信息的处理,如下所示:
主要设置参数如下:
- pattern设置行匹配的正则表达式,可以使用grok
- what previouslnext ,如果匹配成功,那么匹配行是归属上一个事件还是下一个事件
- negate true or false是否对pattern的结果取反
previous意思是空格开头的信息和上一行组成一行
next意思是\结尾的行和下一行组成一行
filter插件简介及date插件讲解
Filter Plugin
Filter是Logstash功能强大的主要原因,它可以对Logstash Event进行丰富的处理,比如解析数据、删除字段、类型转换等等,常见的有如下几个:
- date日期解析
- grok正则匹配解析
- dissect分割符解析
- mutate对字段作处理,比如重命名、删除、替换等
- json按照json解析字段内容到指定字段中
- geoip增加地理位置数据
- ruby利用ruby代码来动态修改Logstash Event
Filter Plugin - date
match
- 类型为数组,用于指定日期匹配的格式,可以一次指定多种日期格式
- match => [ “logdate”, “MMM dd yyyy HH:mm:ss”,“MMM d yyyyHH:mm:ss”, “ISO8601”]
target
- 类型为字符串,用于指定赋值的字段名,默认是@timestamp
timezone
- 类型为字符串,用于指定时区
filter插件之grok简介(上)
Filter Plugin – grok
比正则表达式解析要简单可维护的多
Grok内置的正则表达式
https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns
Grok语法如下:
- %(SYNTAX:SEMANTIC)
- SYNTAX为grok pattern的名称, SEMANTIC为赋值字段名称
- %(NUMBER:duration}可以匹配数值类型,但是grok匹配出的内容都是字符串类型,可以通过在最后指定为int或者float来强制转换类型。%(NUMBER:duration:float)
熟悉常见的一些Pattern利于编写匹配规则
https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns
后面加了一个-r 开启热加载;就是改过配置文件logstash会进行重新加载
这个demo可以借助Insomnia这个http调试工具也可以借助postman。
重新请求
基于正则自定义匹配规则 (?< service_name >[0-9a-z]{ 10 - 11)
不符合自定义长度不是10;就会匹配失败
filter插件之grok简介(下)
自定义grok pattern
- pattern_definitions参数,以键值对的方式定义pattern名称和内容
- pattern_dir参数,以文件的形式被读取
这种方式可以重复的利用自定义表达式
match匹配多种样式
overwrite
匹配失败会出现以下字段
Filter Plugin – grok调试建议
正则表达式:
https://www.debuggex.com/
http://www.regexr.com/
grok调试
http://grokdebug.herokuapp.com/
http://grok.elasticsearch.cn/
x-pack grok debugger
filter插件之dissect讲解
Filter Plugin – dissect
基于分割符原理解析数据,解决grok解析时消耗过多cpu资源的问题
Pipeline Throughput
dissect的应用有一定的局限性:
- 主要适用于每行格式相似且分隔符明确简单的场景 .
.dissect语法比较简单,有一系列字段(field)和分隔符(delimiter)组成 - %{}字段
- %{}之间是分隔符
dissect可以自动处理空的匹配值
dissect分割后的字段值都是字符串,可以使用convert_datatype属性进行类型转换
filter插件之mutate 讲解
Filter Plugin – mutate
使用最频繁的操作,可以对字段进行各种操作,比如重命名、删除、替换、更新等,主要操作如下:
- convert类型转换
- gsub字符串替换
- split/join/merge字符串切割、数组合并为字符串、数组合并为数组-rename字段重命名
- update/replace字段内容更新或替换
- remove field删除字段
Filter Plugin – mutate convert
·实现字段类型的转换,类型为hash ,仅支持转换为integer, float, string和boolean
Filter Plugin – mutate gsub
对字段内容进行替换,类型为数组,每3项为一个替换配置
Filter Plugin – mutate split
将字符串切割位数组
Filter Plugin – mutate join
将数组拼接为字符串
Filter Plugin – mutate merge
将两个数组合并为1个数组,字符串会被转为1个元素的数组进行操作
Filter Plugin – mutate rename
将字段重命名
Filter Plugin – mutate update/replace
·更新字段内容,区别在于update只在字段存在时生效,而replace在字段不存在时会执行新增字段的操作
Filter Plugin – mutate remove
删除字段
filter插件之 json讲解
Filter Plugin – json
将字段内容为json格式得数据进行解析
filter 插件之geoip和ruby 讲解
Filter Plugin – geoip
·常用的插件,根据ip地址提供对应的地域信息,比如经纬度、城市名等,方便进行地理数据分析
Filter Plugin – ruby
最灵活的插件,可以以ruby语言来随心所欲的修改Logstash Event对象
output插件简介
Output Plugin
·负责将Logstash事件输出,常见的插件如下-stdout-file,-elasticsearch
Output Plugin – stdout
输出到标准输出,多用于调试
Output Plugin – file
·输出到文件,实现将分散在多地的文件统一到一处的需求,比如将所有web机器的web日志收集到1个文件中,从而方便查阅信息
Output Plugin – elasticsearch
输出到elasticsearch ,是最常用的插件,基于http协议实现