一、codec
1、简介
codec plugin 作用于input 和output plugin,负责将数据在原始与logstash event之间切换,常见的 codec如下:
- plain 读取原始数据
- dots 将内容简化为点进行输出
- rubydebug 将 logstash event 按照ruby 格式输出,方便调试
- line 处理带有换行符的内容
- json 处理json 格式的内容
- multiline 处理多行数据的内容,将其作为一条数据输出(多行变一条)
2、multiline 介绍
当一个event 的 message 有多行组成时,需要使用multiline,常见的场景是堆栈日志信息的处理,如:
// 此种数据特点:一是多行二是开头有空格
Caused by: java.net.SocketTimeoutException: connect timed out
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
主要设置参数如下:
- pattern: 设置行匹配的正则表达式,可以使用 grok
- what:取值为previous或next,如果匹配成功,那么匹配行是归属于上一个事件还是下一个事件
- negate:取值为true或false,意为是否对 pattern 的结果取反
举例:收集时间开头的数据
input {
stdin {
codec => multiline {
pattern => "^\[%{TIMESTAMP_ISO8601}\]"
negate => true
what => "previous"
}
}
}
二、filter
1、简介
filter 是 logstash 功能强大的主要原因,他可以对logstash event 进行丰富的处理,比如解析数据、删除字段、类型转换等等,常见如下:
- date 日期解析
- grok 正则匹配解析
- dissect 分隔符解析
- mutate 对字段进行处理,如重命名、删除、替换等
- json 按照json 解析字段内容到指定字段
- geoip 增加地理位置数据
- ruby 利用ruby 代码来动态修改 logstash event
2、date 介绍
将日期字符串解析为日期类型,然后替换@timestamp 字段或者指定的其他字段。
参数:
- match:类型为数组,用于指定日期匹配的格式,可设置多个
- target:类型为字符串,用于指定赋值的字段名,默认是@timestamp
- timezone:类型为字符串,用于指定时区
3、grok 介绍
参数:
- match:匹配多种样式
- overwrite:替换目标字段值(区别于追加)
- tag_on_fail
补充:热加载
启动命令加上 -r 即可。此时修改配置文件,就会被加载,无需重启。
4、dissect 介绍
基于分隔符原理解析数据,解决 grok 解析时消耗过多 cpu 资源的问题。
语法:
- %{}:大括号之间的是字段
- %{}:这个格式之间的是分隔符
- %{}:如果大括号之间什么也不写,就相当于占位符,但是不输出到结果
- +:追加到某个字段
- /:设置字段的顺序
参数:
dissect分割后的字段值都是字符串类型,可以使用convert_datatype 属性进行类型转化,如下:
filter {
dissect {
convert_datatype => {
age => "int"
}
}
}
5、mutate 介绍
可以对字段进行各种操作,如重命名、删除、替换、更新等,主要操作如下:
- convert:类型转换
- gsub:字符串替换,清洗数据
- split/join/merge:字符串切割 / 数组合并为字符串 /2个 数组合并为1个数组
- rename:字段重命名
- update/replace:字段内容更新或替换
- remove_field:删除字段
6、json 介绍
将字段内容为json 格式的数据进行解析
参数:
- source:需要解析的字段
- target:解析完成的数据存储的字段