Mutate 过滤器插件
编辑Mutate 过滤器插件
编辑- 插件版本:v3.5.8
- 发布日期:2023-11-22
- 变更日志
对于其他版本,请参阅 版本化插件文档。
获取帮助
编辑如有关于插件的问题,请在 Discuss 论坛中发起主题。对于错误或功能请求,请在 Github 中提交问题。有关 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
编辑- 值类型为 hash
- 此设置没有默认值。
将字段的值转换为不同的类型,例如将字符串转换为整数。如果字段值是数组,则所有成员都将被转换。如果字段是哈希,则不会执行任何操作。
转换见解
值使用 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
编辑- 值类型为 hash
- 此设置没有默认值。
将现有字段复制到另一个字段。现有目标字段将被覆盖。
示例
filter { mutate { copy => { "source_field" => "dest_field" } } }
gsub
编辑- 值类型为 array
- 此设置没有默认值。
将正则表达式与字段值匹配,并将所有匹配项替换为替换字符串。仅支持字符串或字符串数组类型的字段。对于其他类型的字段,不会执行任何操作。
此配置采用一个数组,每个字段/替换包含 3 个元素。
请注意转义配置文件中的任何反斜杠。
示例
filter { mutate { gsub => [ # replace all forward slashes with underscore "fieldname", "/", "_", # replace backslashes, question marks, hashes, and minuses # with a dot "." "fieldname2", "[\\?#-]", "." ] } }
join
编辑- 值类型为 hash
- 此设置没有默认值。
使用分隔符字符或字符串连接数组。对非数组字段不执行任何操作。
示例
filter { mutate { join => { "fieldname" => "," } } }
lowercase
编辑- 值类型为 array
- 此设置没有默认值。
将字符串转换为其小写等效项。
示例
filter { mutate { lowercase => [ "fieldname" ] } }
merge
编辑- 值类型为 hash
- 此设置没有默认值。
合并两个数组或哈希字段。字符串字段将自动转换为数组,因此
`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
编辑- 值类型为 hash
- 此设置没有默认值。
设置存在但为空的字段的默认值
示例
filter { mutate { # Sets the default value of the 'field1' field to 'default_value' coerce => { "field1" => "default_value" } } }
rename
编辑- 值类型为 hash
- 此设置没有默认值。
重命名一个或多个字段。
如果目标字段已存在,则替换其值。
如果其中一个源字段不存在,则不会对该字段执行任何操作。(这不会被视为错误;不会应用 tag_on_failure
标签。)
重命名多个字段时,不保证操作顺序。
示例
filter { mutate { # Renames the 'HOSTORIP' field to 'client_ip' rename => { "HOSTORIP" => "client_ip" } } }
replace
编辑- 值类型为 hash
- 此设置没有默认值。
将字段的值替换为新值,或者如果该字段不存在,则添加该字段。新值可以包含 %{foo}
字符串,以帮助您从事件的其他部分构建新值。
示例
filter { mutate { replace => { "message" => "%{source_host}: My new message" } } }
split
编辑- 值类型为 hash
- 此设置没有默认值。
使用分隔符字符或字符串将字段拆分为数组。仅适用于字符串字段。
示例
filter { mutate { split => { "fieldname" => "," } } }
strip
编辑- 值类型为 array
- 此设置没有默认值。
去除字段中的空格。注意:这仅适用于开头和结尾的空格。
示例
filter { mutate { strip => ["field1", "field2"] } }
update
编辑- 值类型为 hash
- 此设置没有默认值。
使用新值更新现有字段。如果字段不存在,则不执行任何操作。
示例
filter { mutate { update => { "sample" => "My new message" } } }
uppercase
编辑- 值类型为 array
- 此设置没有默认值。
将字符串转换为其大写等效项。
示例
filter { mutate { uppercase => [ "fieldname" ] } }
通用选项
编辑所有过滤器插件都支持这些配置选项
设置 | 输入类型 | 必填 |
---|---|---|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
add_field
编辑- 值类型为 hash
- 默认值为
{}
如果此过滤器成功,则将任何任意字段添加到此事件中。字段名称可以是动态的,并包含使用 %{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
编辑- 值类型为 array
- 默认值为
[]
如果此过滤器成功,则将任意标签添加到事件中。标签可以是动态的,并包含使用 %{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
编辑- 值类型为 string
- 此设置没有默认值。
向插件配置添加唯一的 ID
。如果未指定 ID,Logstash 将生成一个。强烈建议在配置中设置此 ID。当您有两个或多个相同类型的插件时,这尤其有用,例如,如果您有两个 Mutate 过滤器。在这种情况下,添加命名 ID 将有助于在使用监控 API 时监控 Logstash。
filter { mutate { id => "ABC" } }
id
字段中的变量替换仅支持环境变量,不支持使用密钥存储中的值。
remove_field
编辑- 值类型为 array
- 默认值为
[]
如果此过滤器成功,则从此事件中删除任意字段。字段名称可以是动态的,并使用 %{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
编辑- 值类型为 array
- 默认值为
[]
如果此过滤器成功,则从事件中删除任意标签。标签可以是动态的,并使用 %{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
(如果存在)。第二个示例也将删除一个令人悲伤且不需要的标签。