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

hash

copy

hash

gsub

array

join

hash

lowercase

array

merge

hash

coerce

hash

rename

hash

replace

hash

split

hash

strip

array

update

hash

uppercase

array

capitalize

array

tag_on_failure

string

另请参阅通用选项,了解所有过滤器插件支持的选项列表。

 

convert

编辑
  • 值类型为哈希
  • 此设置没有默认值。

将字段的值转换为不同的类型,例如将字符串转换为整数。如果字段值是数组,则将转换所有成员。如果字段是哈希,则不会采取任何操作。

转换见解

这些值使用 Ruby 语义进行转换。请注意,使用floatfloat_eu会将值转换为双精度 64 位 IEEE 754 浮点十进制数。为了在转换过程中保持精度,您应该在 Elasticsearch 映射中使用double

有效的转换目标,以及它们在不同输入下的预期行为如下:

  • integer:

    • 解析字符串;支持逗号分隔符(例如,字符串"1,000"产生一个值为一千的整数);当字符串具有小数部分时,它们会被截断
    • 浮点数和十进制数会被截断(例如,3.99变为3-2.7变为-2
    • 布尔值 true 和布尔值 false 分别转换为10
  • integer_eu:

    • integer相同,只是字符串值支持点分隔符和逗号小数(例如,"1.000"产生一个值为一千的整数)
  • float:

    • 整数转换为浮点数
    • 解析字符串;支持逗号分隔符和点小数(例如,"1,000.5"产生一个值为一千零一半的浮点数)
    • 布尔值 true 和布尔值 false 分别转换为1.00.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
    • 所有其他值都直接传递而不进行转换,并记录一条警告消息
    • 对于数组,使用上述规则分别处理每个值

此插件可以在同一文档中转换多个字段,请参见以下示例。

示例

    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" => "," }
     }
   }

lowercase

编辑
  • 值类型为数组
  • 此设置没有默认值。

将字符串转换为其小写等效形式。

示例

    filter {
      mutate {
        lowercase => [ "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" }
      }
    }

uppercase

编辑
  • 值类型为数组
  • 此设置没有默认值。

将字符串转换为其大写等效形式。

示例

    filter {
      mutate {
        uppercase => [ "fieldname" ]
      }
    }

capitalize

编辑
  • 值类型为数组
  • 此设置没有默认值。

将字符串转换为其首字母大写的等效形式。

示例

    filter {
      mutate {
        capitalize => [ "fieldname" ]
      }
    }

tag_on_failure

编辑
  • 值类型为字符串
  • 此设置的默认值为_mutate_error

如果在此 mutate 过滤器应用期间发生故障,则其余操作将中止,并将提供的标签添加到事件中。

通用选项

编辑

所有过滤器插件都支持以下配置选项:

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标签)。

enable_metric

编辑

禁用或启用此特定插件实例的指标记录。默认情况下,我们会记录所有可以记录的指标,但您可以禁用特定插件的指标收集。

  • 值类型为字符串
  • 此设置没有默认值。

向插件配置添加唯一的ID。如果未指定 ID,Logstash 将生成一个。强烈建议在配置中设置此 ID。当您有两个或多个相同类型的插件时,此方法特别有用,例如,如果您有 2 个 mutate 过滤器。在这种情况下添加命名 ID 将有助于在使用监视 API 时监视 Logstash。

    filter {
      mutate {
        id => "ABC"
      }
    }

id字段中的变量替换仅支持环境变量,不支持使用密钥存储中的值。

periodic_flush

编辑

定期调用过滤器刷新方法。可选。

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,则会将其删除。第二个示例也会删除一个令人不快、不想要的标签。