异常信息如下
Exception while parsing kv
查看 logstash 配置文件
kv { source => "custmsg" field_split => "," value_split => "=" }
那肯定是 custmsg 的问题了,是不是 custmsg 里面存在 “\n” 导致 kv filter 如何解析。 在 custmsg 中去掉 "\n" 试试
mutate { gsub => [ "custmsg","\n", "" , "custmsg","\r", "" ] }
下面介绍 logstash mutate 插件
mutate插件可以对事件中的数据进行修改,包括rename、update、replace、convert、split、gsub、uppercase、lowercase、strip、remove_field、join、merge等功能。
栗子
1、rename
对于已经存在的字段,重命名其字段名称。
filter { mutate { rename => ["syslog_host", "host"] } }
2、update
更新字段内容,如果字段不存在,不会新建
filter { mutate { replace => { "message" => "%{source_host}: My new message" } } }
3、replace
与 update 功能相同,区别在于如果字段不存在则会新建字段
filter { mutate { replace => { "message" => "%{source_host}: My new message" } } }
4、convert
数据类型转换。
filter { mutate { convert => ["request_time", "float"] } }
5、gsub
gsub 提供了通过正则表达式实现文本替换的功能。
filter { mutate { gsub => [ # replace all forward slashes with underscore "fieldname", "/", "_", # replace backslashes, question marks, hashes, and minuses # with a dot "." "fieldname2", "[\\?#-]", "." ] } }
6、uppercase/lowercase
大小写转换
filter { mutate { uppercase => [ "fieldname" ] } }
7、split
将提取到的某个字段按照某个字符分割
filter { mutate { split => ["message", "|"] } }
针对字符串 "123|321|adfd|dfjld*=123",可以看到输出结果:
{ "message" => [ [0] "123", [1] "321", [2] "adfd", [3] "dfjld*=123" ], "@version" => "1", "@timestamp" => "2014-08-20T15:58:23.120Z", "host" => "raochenlindeMacBook-Air.local" }
8、strip
类似 trim,只去除首尾的空白字符
filter { mutate { strip => ["field1", "field2"] } }
9、remove_field
删除字段:
filter { mutate { remove_field => [ "foo_%{somefield}" ] } }
10、join
将类型为 array 的字段中的 array 元素使用指定字符为分隔符聚合成一个字符串。
如我们可以将 split 分割的结果再重新聚合起来:
filter { mutate { split => ["message", "|"] } mutate { join => ["message", ","] } }
输出结果:
{ "message" => "123,321,adfd,dfjld*=123", "@version" => "1", "@timestamp" => "2014-08-20T16:01:33.972Z", "host" => "raochenlindeMacBook-Air.local" }
11、merge
对于几个类型为 array 或 hash 或 string 的字段,我们可以使用 merge 合并
filter { mutate { merge => [ "dest_field", "added_field" ] } }
需要注意的是,array 和 hash 两个字段是不能 merge 的。