2、Logstash 篇之插件详解

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"
}
}

2、Logstash 篇之插件详解

Input Plugin-file

·从文件读取数据,如常见的日志文件。文件读取通常要解决几个问题:

  • 文件内容如何只被读取一次?即重启L时,从上次读取的位置继续
    • sincedb
  • 如何即时读取到文件的新内容?
    • 定时检查文件是否有更新
  • 如何发现新文件并进行读取?
    • 可以,定时检查新文件
  • 如果文件发生了归档(rotation)操作,是否影响当前的内容读取?
    • 不影响,被归档的文件内容可以继续被读取

理论实现源码:

2、Logstash 篇之插件详解

  • 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匹配语法

2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
实际生产中不会从头读取
2、Logstash 篇之插件详解
建议调试中设置sincedb_path;每次都会从头读取
2、Logstash 篇之插件详解

Input Plugin - kafka

2、Logstash 篇之插件详解

codec插件详解

Codec Plugin

Codec Plugin作用于input和output plugin ,负责将数据在原始与LogstashEvent之间转换,常见的codec有:

  • plain读取原始内容
  • dots将内容简化为点进行输出
  • rubydebug将Logstash Events按照ruby格式输出,方便调试
  • line处理带有换行符的内容
  • json处理json格式的内容
  • multiline处理多行数据的内容

2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
错误输入
2、Logstash 篇之插件详解
正确输入
2、Logstash 篇之插件详解

Codec Plugin – multiline

·当一个Event的message由多行组成时,需要使用该codec ,常见的情况是堆栈日志信息的处理,如下所示:
2、Logstash 篇之插件详解
主要设置参数如下:

  • pattern设置行匹配的正则表达式,可以使用grok
  • what previouslnext ,如果匹配成功,那么匹配行是归属上一个事件还是下一个事件
  • negate true or false是否对pattern的结果取反
    2、Logstash 篇之插件详解
    previous意思是空格开头的信息和上一行组成一行
    2、Logstash 篇之插件详解
    2、Logstash 篇之插件详解
    2、Logstash 篇之插件详解
    next意思是\结尾的行和下一行组成一行
    2、Logstash 篇之插件详解
    2、Logstash 篇之插件详解
    2、Logstash 篇之插件详解
    2、Logstash 篇之插件详解
    2、Logstash 篇之插件详解
    2、Logstash 篇之插件详解
    2、Logstash 篇之插件详解

filter插件简介及date插件讲解

Filter Plugin

Filter是Logstash功能强大的主要原因,它可以对Logstash Event进行丰富的处理,比如解析数据、删除字段、类型转换等等,常见的有如下几个:

  • date日期解析
  • grok正则匹配解析
  • dissect分割符解析
  • mutate对字段作处理,比如重命名、删除、替换等
  • json按照json解析字段内容到指定字段中
  • geoip增加地理位置数据
  • ruby利用ruby代码来动态修改Logstash Event

Filter Plugin - date

2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解

2、Logstash 篇之插件详解
match

  • 类型为数组,用于指定日期匹配的格式,可以一次指定多种日期格式
  • match => [ “logdate”, “MMM dd yyyy HH:mm:ss”,“MMM d yyyyHH:mm:ss”, “ISO8601”]

target

  • 类型为字符串,用于指定赋值的字段名,默认是@timestamp

timezone

  • 类型为字符串,用于指定时区

filter插件之grok简介(上)

Filter Plugin – grok

2、Logstash 篇之插件详解

2、Logstash 篇之插件详解
比正则表达式解析要简单可维护的多
2、Logstash 篇之插件详解
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

2、Logstash 篇之插件详解
后面加了一个-r 开启热加载;就是改过配置文件logstash会进行重新加载
2、Logstash 篇之插件详解
这个demo可以借助Insomnia这个http调试工具也可以借助postman
2、Logstash 篇之插件详解

2、Logstash 篇之插件详解

2、Logstash 篇之插件详解
重新请求
2、Logstash 篇之插件详解

2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
基于正则自定义匹配规则 (?< service_name >[0-9a-z]{ 10 - 11)
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
不符合自定义长度不是10;就会匹配失败
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解

filter插件之grok简介(下)

自定义grok pattern

  • pattern_definitions参数,以键值对的方式定义pattern名称和内容
  • pattern_dir参数,以文件的形式被读取

2、Logstash 篇之插件详解
这种方式可以重复的利用自定义表达式
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
match匹配多种样式
2、Logstash 篇之插件详解
overwrite
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
匹配失败会出现以下字段
2、Logstash 篇之插件详解
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资源的问题
2、Logstash 篇之插件详解
Pipeline Throughput
2、Logstash 篇之插件详解
dissect的应用有一定的局限性:

  • 主要适用于每行格式相似且分隔符明确简单的场景 .
    .dissect语法比较简单,有一系列字段(field)和分隔符(delimiter)组成
  • %{}字段
  • %{}之间是分隔符

2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解

2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解

2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解

2、Logstash 篇之插件详解

2、Logstash 篇之插件详解
dissect可以自动处理空的匹配值
2、Logstash 篇之插件详解
dissect分割后的字段值都是字符串,可以使用convert_datatype属性进行类型转换
2、Logstash 篇之插件详解

filter插件之mutate 讲解

Filter Plugin – mutate

使用最频繁的操作,可以对字段进行各种操作,比如重命名、删除、替换、更新等,主要操作如下:

  • convert类型转换
  • gsub字符串替换
  • split/join/merge字符串切割、数组合并为字符串、数组合并为数组-rename字段重命名
  • update/replace字段内容更新或替换
  • remove field删除字段

Filter Plugin – mutate convert

·实现字段类型的转换,类型为hash ,仅支持转换为integer, float, string和boolean

2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解

Filter Plugin – mutate gsub

对字段内容进行替换,类型为数组,每3项为一个替换配置
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解

2、Logstash 篇之插件详解

Filter Plugin – mutate split

将字符串切割位数组
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解

2、Logstash 篇之插件详解
2、Logstash 篇之插件详解

Filter Plugin – mutate join

将数组拼接为字符串
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解

Filter Plugin – mutate merge

将两个数组合并为1个数组,字符串会被转为1个元素的数组进行操作
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解

Filter Plugin – mutate rename

将字段重命名
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解

Filter Plugin – mutate update/replace

·更新字段内容,区别在于update只在字段存在时生效,而replace在字段不存在时会执行新增字段的操作
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解

Filter Plugin – mutate remove

删除字段
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解

filter插件之 json讲解

Filter Plugin – json

将字段内容为json格式得数据进行解析

2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解

filter 插件之geoip和ruby 讲解

Filter Plugin – geoip

·常用的插件,根据ip地址提供对应的地域信息,比如经纬度、城市名等,方便进行地理数据分析
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解

Filter Plugin – ruby

最灵活的插件,可以以ruby语言来随心所欲的修改Logstash Event对象
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解
2、Logstash 篇之插件详解

output插件简介

Output Plugin

·负责将Logstash事件输出,常见的插件如下-stdout-file,-elasticsearch

Output Plugin – stdout

输出到标准输出,多用于调试
2、Logstash 篇之插件详解

Output Plugin – file

·输出到文件,实现将分散在多地的文件统一到一处的需求,比如将所有web机器的web日志收集到1个文件中,从而方便查阅信息
2、Logstash 篇之插件详解

Output Plugin – elasticsearch

输出到elasticsearch ,是最常用的插件,基于http协议实现
2、Logstash 篇之插件详解