Logstash过滤插件Mutate(数据修改)
简介
数据修改插件 Mutate 提供了丰富的基础数据处理能⼒。包括事件中字符串处理,类型转换、字段处理等。
处理顺序
配置⽂件中的数据修改按如下的顺序执⾏:
coerce
rename
update
replace
convert
gsub
uppercase
capitalize
lowercase
strip
remove
split
join
merge
copy
可以将 mutate 模块分隔开以控制数据修改的顺序,例如:
filter {
mutate {
split => ["hostname", "."]
add_field => { "shortHostname" => "%{hostname[0]}" }
}
mutate {
rename => ["shortHostname", "hostname" ]
}
}
Mutate 过滤器配置选项
类型转换
Convert 类型转换可以转换字段值的类型,例如将字符串转换为整数。如果字段值是数组,则会转换数组中的所有元素。如果字段值为哈希,则不会采取任何措施。
可以设置的转换类型包括:"integer"、"integer_eu"、"float"、"float_eu"、"string"、"boolean"。⽰例如下:
filter {
mutate {
正则匹配哈希值convert => {
"fieldname" => "integer"
"booleanfield" => "boolean"
}
}
}
注意:当转换数组类型的字段时,可以将 ["1","2"] 转换成 [1, 2]。但不⽀持对哈希类型的字段做类似处理。
字符串处理
gsub
根据字段值匹配正则表达式,然后将所有匹配项替换为替代字符串。只有当字段值为字符串或者数组中的值为字符串才⽀持。
filter {
mutate {
gsub => [
# ⽤下划线替换所有正斜杠
"fieldname", "/", "_",
# ⽤点替换反斜杠、问好、井号、负号
"fieldname2", "[\\?#-]", "."
]
}
}
注意:在配置⽂件需要格外注意反斜杆的转义。
split
使⽤分隔符将字段拆分为数组。仅对字符串类型的字段有效。例如⽤ | 分隔符分隔⼀串字符串:filter {
mutate {
split => ["message", "|"]
}
}
{
"message" => [
[0] "123",
[1] "321",
[2] "adfd",
[3] "dfjld*=123"
],
。。。
}
join
⽤分隔符将数组⾥的数据连接起来。仅对数组类型字段有效。
filter {
mutate {
split => ["message", "|"]
}
mutate {
join => ["message", ","]
}
}
{
"message" => "123,321,adfd,dfjld*=123",
。。。
}
merge
合并两个数组或哈希字段。字符串类型的字段将会被⾃动转换成数组,所以:
`array` + `string` will work
`string` + `string` will result in an 2 entry array in `dest_field`
`array` and `hash` will not work
字段处理
rename
重命名某个字段,如果⽬的字段已经存在,则会被覆盖掉:
filter {
mutate {
rename => ["syslog_host", "host"]
}
}
update
更新某个字段的浽容。如果字段不存在,不会新建。
filter {
mutate {
update => { "sample" => "My new message" }
}
}
replace
作⽤和 update 类似,但是当字段不存在时,会起到 add_field 参数⼀样的效果,⾃动添加新字段。
filter {
mutate {
replace => { "message" => "%{source_host}: My new message" } }
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论