filter-kv 插件
描述:
此过滤器插件用于解析各种key-vlaue类型日志。
例如,如果您有一条日志包含foo=bar ip=192.168.10.2,则可以通过kv插件自动解析成
foo: barip: 192.168.10.2
常用配置选项:
default_keys
添加默认键及其值的散列,如果有解析源中有相应字段则使用解析源中的值,如源中没有,则使用此使用添加的默认字段和值。
default_keys => [ "id","10" ] #添加多个时,以逗号分隔
`exclude_keys` 指定不应添加到事件中的已解析密钥。默认情况下,不会排除任何键。 ``` exclude_keys => [ "id" ] #id字段不允许添加进事件 ```
`field_split` 用作解析键值对的单字符字段分隔符的字符串。默认值是空格。
``` field_split => "&?" #以&或?分隔字段,常用于web request ```
`field_split_pattern` 一个正则表达式,用作字段分隔符。用于定义多字符字符分隔符很有用。优先级高于`field_split`。 例如,重复一个或多个冒号时拆分字段`k1=v1:k2=v2::k3=v3` ``` field_split_pattern => ":+" #分隔符:至少一次 ``` 如果需要转义的正则表达式字符上拆分字段,如加号`k1=v1+k2=v2++k3=v3` ``` field_split_pattern => "\\+\\+" ```
`include_keys` 指定应添加到事件中的已解析密钥。默认情况下,添加所有键。 ``` include_keys => ["id","name"] #只添加id和name字段进入事件 ```
`prefix` 给所有key添加前缀 ``` prefix => "arg_" #原k1,添加后变arg_k1。统一前缀方便查看 ```
`source` 要执行key=value搜索的字段 ``` source => "request" #从request字段拆分key,value ```
`transform_key`和`transform_value` 将所有键和值转换成小写(lowercase)、大写(uppercase) ``` transform_key => "lowercase" ```
`target` 将所有键值对放入容器的名称,如果省略此设置,则字段将作为单个字段写入事件的根目录。 ``` target => "kv" #将所有键放入容器kv中 ```
###**示例** nginx access_log解析出请求路径中带的参数 配置文件: ``` input { stdin {} } filter { grok { match => { "message" => "%{URIPATH:dir}(?:%{URIPARAM:args})?" #抽取nginx log中的request日志 } } kv { prefix => "arg_" #参数key以arg_开头 source => "args" #拆分哪args字段 field_split => "&?" #拆分符号&和? target => "kv" #将所有拆分出来的参数加入kv容器内 include_keys => ["name","id"] #只保留name和id参数, } } output { stdout{ codec => rubydebug } }
操作示例:
$ bin/logstash -f text.conf
/index.html?for=bar&name=walter&id=100&uid=1000
{
"host" => "node2007",
"message" => "/index.html?for=bar&name=walter&id=100&uid=1000",
"dir" => "/index.html",
"@version" => "1",
"@timestamp" => 2019-03-07T07:56:53.872Z,
"args" => "?for=bar&name=walter&id=100&uid=1000",
"kv" => {
"arg_name" => "walter",
"arg_id" => "100"
}
}
**总结:**
`kv`插件对于日志倾向于`key=value`类型非常有用,如postfix,iptables,nginx request就比较常用。

浙公网安备 33010602011771号