Mutate 过滤器插件
编辑Mutate 过滤器插件
编辑- 插件版本: v3.5.8
- 发布日期: 2023-11-22
- 更新日志
有关其他版本,请参阅版本化插件文档。
获取帮助
编辑有关插件的问题,请在Discuss论坛中开启一个主题。有关错误或功能请求,请在Github中开启一个 issue。有关 Elastic 支持的插件列表,请查阅Elastic 支持矩阵。
描述
编辑Mutate 过滤器允许您对字段执行常规的修改操作。您可以在事件中重命名、替换和修改字段。
处理顺序
编辑配置文件中的修改操作按此顺序执行:
- coerce
- rename
- update
- replace
- convert
- gsub
- uppercase
- capitalize
- lowercase
- strip
- split
- join
- merge
- copy
如果需要保留操作顺序,则每个修改操作必须在自己的代码块中。
示例
filter { mutate { split => { "hostname" => "." } add_field => { "shortHostname" => "%{[hostname][0]}" } } mutate { rename => {"shortHostname" => "hostname"} } }
Mutate 过滤器配置选项
编辑此插件支持以下配置选项,以及稍后描述的通用选项。
设置 | 输入类型 | 必需 |
---|---|---|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
另请参阅通用选项,了解所有过滤器插件支持的选项列表。
convert
编辑- 值类型为哈希
- 此设置没有默认值。
将字段的值转换为不同的类型,例如将字符串转换为整数。如果字段值是数组,则将转换所有成员。如果字段是哈希,则不会采取任何操作。
转换见解
这些值使用 Ruby 语义进行转换。请注意,使用float
和float_eu
会将值转换为双精度 64 位 IEEE 754 浮点十进制数。为了在转换过程中保持精度,您应该在 Elasticsearch 映射中使用double
。
有效的转换目标,以及它们在不同输入下的预期行为如下:
-
integer
:- 解析字符串;支持逗号分隔符(例如,字符串
"1,000"
产生一个值为一千的整数);当字符串具有小数部分时,它们会被截断。 - 浮点数和十进制数会被截断(例如,
3.99
变为3
,-2.7
变为-2
) - 布尔值 true 和布尔值 false 分别转换为
1
和0
- 解析字符串;支持逗号分隔符(例如,字符串
-
integer_eu
:- 与
integer
相同,只是字符串值支持点分隔符和逗号小数(例如,"1.000"
产生一个值为一千的整数)
- 与
-
float
:- 整数转换为浮点数
- 解析字符串;支持逗号分隔符和点小数(例如,
"1,000.5"
产生一个值为一千零一半的浮点数) - 布尔值 true 和布尔值 false 分别转换为
1.0
和0.0
-
float_eu
:- 与
float
相同,只是字符串值支持点分隔符和逗号小数(例如,"1.000,5"
产生一个值为一千零一半的浮点数)
- 与
-
string
:- 所有值都被字符串化并使用 UTF-8 编码
-
boolean
:- 整数 0 转换为布尔值
false
- 整数 1 转换为布尔值
true
- 浮点数 0.0 转换为布尔值
false
- 浮点数 1.0 转换为布尔值
true
- 字符串
"true"
、"t"
、"yes"
、"y"
、"1"
和"1.0"
转换为布尔值true
- 字符串
"false"
、"f"
、"no"
、"n"
、"0"
和"0.0"
转换为布尔值false
- 空字符串转换为布尔值
false
- 所有其他值都直接传递而不进行转换,并记录一条警告消息
- 对于数组,使用上述规则分别处理每个值
- 整数 0 转换为布尔值
此插件可以在同一文档中转换多个字段,请参见以下示例。
示例
filter { mutate { convert => { "fieldname" => "integer" "booleanfield" => "boolean" } } }
copy
编辑- 值类型为哈希
- 此设置没有默认值。
将现有字段复制到另一个字段。现有的目标字段将被覆盖。
示例
filter { mutate { copy => { "source_field" => "dest_field" } } }
gsub
编辑- 值类型为数组
- 此设置没有默认值。
将正则表达式与字段值进行匹配,并将所有匹配项替换为替换字符串。仅支持字符串或字符串数组类型的字段。对于其他类型的字段,将不采取任何操作。
此配置采用一个数组,每个字段/替换包含 3 个元素。
请注意转义配置文件中的任何反斜杠。
示例
filter { mutate { gsub => [ # replace all forward slashes with underscore "fieldname", "/", "_", # replace backslashes, question marks, hashes, and minuses # with a dot "." "fieldname2", "[\\?#-]", "." ] } }
join
编辑- 值类型为哈希
- 此设置没有默认值。
使用分隔符字符或字符串连接数组。在非数组字段上不执行任何操作。
示例
filter { mutate { join => { "fieldname" => "," } } }
merge
编辑- 值类型为哈希
- 此设置没有默认值。
合并两个数组或哈希类型的字段。字符串字段将自动转换为数组,因此
`array` + `string` will work `string` + `string` will result in an 2 entry array in `dest_field` `array` and `hash` will not work
示例
filter { mutate { merge => { "dest_field" => "added_field" } } }
coerce
编辑- 值类型为哈希
- 此设置没有默认值。
设置存在但为空的字段的默认值
示例
filter { mutate { # Sets the default value of the 'field1' field to 'default_value' coerce => { "field1" => "default_value" } } }
rename
编辑- 值类型为哈希
- 此设置没有默认值。
重命名一个或多个字段。
如果目标字段已存在,则其值将被替换。
如果其中一个源字段不存在,则不会对该字段执行任何操作。(这不被视为错误;不会应用tag_on_failure
标签。)
重命名多个字段时,不保证操作顺序。
示例
filter { mutate { # Renames the 'HOSTORIP' field to 'client_ip' rename => { "HOSTORIP" => "client_ip" } } }
replace
编辑- 值类型为哈希
- 此设置没有默认值。
用新值替换字段的值,或者如果该字段尚不存在,则添加该字段。新值可以包含%{foo}
字符串,以帮助您从事件的其他部分构建新值。
示例
filter { mutate { replace => { "message" => "%{source_host}: My new message" } } }
split
编辑- 值类型为哈希
- 此设置没有默认值。
使用分隔符字符或字符串将字段拆分为数组。仅适用于字符串字段。
示例
filter { mutate { split => { "fieldname" => "," } } }
strip
编辑- 值类型为数组
- 此设置没有默认值。
从字段中删除空白。注意:这仅适用于开头和结尾的空白。
示例
filter { mutate { strip => ["field1", "field2"] } }
update
编辑- 值类型为哈希
- 此设置没有默认值。
使用新值更新现有字段。如果该字段不存在,则不会采取任何操作。
示例
filter { mutate { update => { "sample" => "My new message" } } }
通用选项
编辑所有过滤器插件都支持以下配置选项:
设置 | 输入类型 | 必需 |
---|---|---|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
add_field
编辑- 值类型为哈希
- 默认值为
{}
如果此过滤器成功,则将任意字段添加到此事件。字段名称可以是动态的,并使用%{field}
包含事件的部分内容。
示例
filter { mutate { add_field => { "foo_%{somefield}" => "Hello world, from %{host}" } } }
# You can also add multiple fields at once: filter { mutate { add_field => { "foo_%{somefield}" => "Hello world, from %{host}" "new_field" => "new_static_value" } } }
如果事件具有字段"somefield" == "hello"
,则此过滤器在成功时将添加字段foo_hello
(如果存在),其值为上述值,并且将%{host}
部分替换为事件中的值。第二个示例还将添加一个硬编码字段。
add_tag
编辑- 值类型为数组
- 默认值为
[]
如果此过滤器成功,则将任意标签添加到事件。标签可以是动态的,并使用%{field}
语法包含事件的部分内容。
示例
filter { mutate { add_tag => [ "foo_%{somefield}" ] } }
# You can also add multiple tags at once: filter { mutate { add_tag => [ "foo_%{somefield}", "taggedy_tag"] } }
如果事件具有字段"somefield" == "hello"
,则此过滤器在成功时将添加标签foo_hello
(第二个示例当然会添加taggedy_tag
标签)。
id
编辑- 值类型为字符串
- 此设置没有默认值。
向插件配置添加唯一的ID
。如果未指定 ID,Logstash 将生成一个。强烈建议在配置中设置此 ID。当您有两个或多个相同类型的插件时,此方法特别有用,例如,如果您有 2 个 mutate 过滤器。在这种情况下添加命名 ID 将有助于在使用监视 API 时监视 Logstash。
filter { mutate { id => "ABC" } }
id
字段中的变量替换仅支持环境变量,不支持使用密钥存储中的值。
remove_field
编辑- 值类型为数组
- 默认值为
[]
如果此过滤器成功,则从此事件中删除任意字段。字段名称可以是动态的,并使用 %{field} 包含事件的部分内容。示例
filter { mutate { remove_field => [ "foo_%{somefield}" ] } }
# You can also remove multiple fields at once: filter { mutate { remove_field => [ "foo_%{somefield}", "my_extraneous_field" ] } }
如果事件具有字段"somefield" == "hello"
,则此过滤器在成功时将删除名称为foo_hello
的字段(如果存在)。第二个示例将删除一个额外的非动态字段。
remove_tag
编辑- 值类型为数组
- 默认值为
[]
如果此过滤器成功,则从事件中删除任意标签。标签可以是动态的,并且可以使用 %{field}
语法包含事件的部分内容。
示例
filter { mutate { remove_tag => [ "foo_%{somefield}" ] } }
# You can also remove multiple tags at once: filter { mutate { remove_tag => [ "foo_%{somefield}", "sad_unwanted_tag"] } }
如果事件的字段 "somefield" == "hello"
,则此过滤器在成功时,如果存在标签 foo_hello
,则会将其删除。第二个示例也会删除一个令人不快、不想要的标签。