文章目录
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的结果取反