Kv 过滤器插件

编辑
  • 插件版本:v4.7.0
  • 发布日期:2022-03-04
  • 更改日志

对于其他版本,请参见 版本化插件文档

获取帮助

编辑

如有关于插件的问题,请在 Discuss 论坛中发起主题讨论。如有错误或功能请求,请在 Github 中提交问题。有关 Elastic 支持的插件列表,请参阅 Elastic 支持矩阵

描述

编辑

此过滤器有助于自动解析 foo=bar 格式的消息(或特定事件字段)。

例如,如果您的日志消息包含 ip=1.2.3.4 error=REFUSED,则可以通过配置以下内容自动解析这些内容:

    filter {
      kv { }
    }

以上操作将导致 ip=1.2.3.4 error=REFUSED 格式的消息具有以下字段:

  • ip:1.2.3.4
  • error:REFUSED

这非常适合 postfix、iptables 和其他倾向于使用 key=value 语法的日志类型。

您可以配置任意字符串来拆分数据,以防您的数据未使用 = 符号和空格进行结构化。例如,此过滤器还可以通过将 field_split 参数设置为 & 来解析类似 foo=bar&baz=fizz 的查询参数。

事件元数据和 Elastic Common Schema (ECS)

编辑

无论 ECS 兼容性如何,插件的行为都相同,除了在启用 ECS 且未设置 target 时会发出警告。

设置 target 选项以避免潜在的模式冲突。

Kv 过滤器配置选项

编辑

此插件支持以下配置选项以及稍后描述的 通用选项

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

 

allow_duplicate_values

编辑

一个布尔选项,用于删除重复的键/值对。当设置为 false 时,只会保留一个唯一的键/值对。

例如,考虑以下来源:from=me from=me[from] 将映射到包含两个元素的数组:["me", "me"]。要仅保留唯一的键/值对,您可以使用以下配置:

    filter {
      kv {
        allow_duplicate_values => false
      }
    }

allow_empty_values

编辑

一个布尔选项,用于显式包含空值。当设置为 true 时,空值将添加到事件中。

解析空值通常需要 whitespace => strict

default_keys

编辑

一个哈希表,指定应在解析的源字段中不存在这些键的情况下添加到事件中的默认键及其值。

    filter {
      kv {
        default_keys => [ "from", "[email protected]",
                         "to", "[email protected]" ]
      }
    }

ecs_compatibility

编辑
  • 值类型为 字符串
  • 支持的值为:

    • disabled:不使用与 ECS 兼容的字段名称
    • v1:Elastic Common Schema 兼容行为(在未设置 target 时发出警告)

控制此插件与 Elastic Common Schema (ECS) 的兼容性。有关详细信息,请参见 事件元数据和 Elastic Common Schema (ECS)

exclude_keys

编辑
  • 值类型为 数组
  • 默认值为 []

一个数组,指定不应添加到事件中的已解析键。默认情况下,不会排除任何键。

例如,考虑以下来源:Hey, from=<abc>, to=def foo=bar。要排除 fromto,但保留 foo 键,您可以使用以下配置:

    filter {
      kv {
        exclude_keys => [ "from", "to" ]
      }
    }

field_split

编辑

一个字符字符串,用作单字符字段分隔符,用于解析键/值对。

这些字符形成正则表达式字符类,因此您必须使用 \ 对特殊正则表达式字符(如 [])进行转义。

URL 查询字符串示例

例如,要从 URL 查询字符串(例如 ?pin=12345~0&d=123&[email protected]&oq=bobo&ss=12345)中分离参数:

    filter {
      kv {
        field_split => "&?"
      }
    }

以上操作将同时以 &? 字符为分隔符,为您提供以下字段:

field_split_pattern

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

一个正则表达式,用作字段分隔符,用于解析键/值对。有助于定义多字符字段分隔符。设置 field_split_pattern 选项将优先于 field_split 选项。

请注意,您应避免在正则表达式中使用捕获组,并且应谨慎使用前瞻或后顾以及位置锚。

例如,要以一个或多个冒号的重复出现为分隔符拆分字段 k1=v1:k2=v2::k3=v3:::k4=v4

    filter { kv { field_split_pattern => ":+" } }

要以需要转义的正则表达式字符(如加号)为分隔符拆分字段 k1=v1++k2=v2++k3=v3++k4=v4

    filter { kv { field_split_pattern => "\\+\\+" } }

include_brackets

编辑

一个布尔值,指定是否将方括号、尖括号和圆括号视为应从值中删除的值“包装器”。

    filter {
      kv {
        include_brackets => true
      }
    }

例如,以下行的结果:bracketsone=(hello world) bracketstwo=[hello world] bracketsthree=<hello world>

将是:

  • bracketsone:hello world
  • bracketstwo:hello world
  • bracketsthree:hello world

而不是:

  • bracketsone:(hello
  • bracketstwo:[hello
  • bracketsthree:<hello

include_keys

编辑
  • 值类型为 数组
  • 默认值为 []

一个数组,指定应添加到事件中的已解析键。默认情况下,将添加所有键。

例如,考虑以下来源:Hey, from=<abc>, to=def foo=bar。要包含 fromto,但排除 foo 键,您可以使用以下配置:

    filter {
      kv {
        include_keys => [ "from", "to" ]
      }
    }

prefix

编辑

一个字符串,用于添加到所有提取的键的前面。

例如,要将 arg_ 添加到所有键的前面:

    filter { kv { prefix => "arg_" } }

recursive

编辑

一个布尔值,指定是否深入到值中并递归地从中获取更多键/值对。额外的键/值对将存储为根键的子键。

默认情况下不递归值。

    filter {
      kv {
        recursive => "true"
      }
    }

remove_char_key

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

一个字符字符串,用于从键中删除。

这些字符形成正则表达式字符类,因此您必须使用 \ 对特殊正则表达式字符(如 [])进行转义。

与 trim 选项相反,所有字符都将从键中删除,无论其位置如何。

例如,要从键中删除 < > [ ], 字符:

    filter {
      kv {
        remove_char_key => "<>\[\],"
      }
    }

remove_char_value

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

一个字符字符串,用于从值中删除。

这些字符形成正则表达式字符类,因此您必须使用 \ 对特殊正则表达式字符(如 [])进行转义。

与 trim 选项相反,所有字符都将从值中删除,无论其位置如何。

例如,要从值中删除 <>[], 字符:

    filter {
      kv {
        remove_char_value => "<>\[\],"
      }
    }

source

编辑
  • 值类型为 字符串
  • 默认值为 "message"

执行 key=value 搜索的字段

例如,要处理 not_the_message 字段:

    filter { kv { source => "not_the_message" } }

target

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

要将所有键/值对放入的容器的名称。

如果省略此设置,字段将作为单个字段写入事件的根目录。

例如,要将所有键放入事件字段 kv 中:

    filter { kv { target => "kv" } }

tag_on_failure

编辑
  • 值类型为 数组
  • 此设置的默认值为 [_kv_filter_error]。

当 kv 操作导致在插件中抛出运行时异常时,操作将安全中止,不会导致插件崩溃,并且事件将使用提供的标签进行标记。

tag_on_timeout

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

当启用超时且 kv 操作中止时,事件将使用提供的标签进行标记(请参阅:timeout_millis)。

timeout_millis

编辑
  • 值类型为 数字
  • 此设置的默认值为 30000(30 秒)。

  • 设置为零(0)以禁用超时

超时提供了一种保障措施,防止输入对用于提取键值对的正则表达式产生病态影响。当解析事件超过此阈值时,操作将中止,并且事件将被标记以防止操作阻塞管道(请参阅:tag_on_timeout)。

transform_key

编辑
  • 值可以是以下任何一个:lowercaseuppercasecapitalize
  • 此设置没有默认值。

将键转换为小写、大写或首字母大写。

例如,将所有键转换为小写

    filter {
      kv {
        transform_key => "lowercase"
      }
    }

transform_value

编辑
  • 值可以是以下任何一个:lowercaseuppercasecapitalize
  • 此设置没有默认值。

将值转换为小写、大写或首字母大写。

例如,将所有值的首字母大写

    filter {
      kv {
        transform_value => "capitalize"
      }
    }

trim_key

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

要从键中修剪的字符字符串。如果您的键用括号括起来或以空格开头,这很有用。

这些字符形成正则表达式字符类,因此您必须使用 \ 对特殊正则表达式字符(如 [])进行转义。

仅从键中修剪开头和结尾的字符。

例如,要从键中修剪< > [ ],字符

    filter {
      kv {
        trim_key => "<>\[\],"
      }
    }

trim_value

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

用于转换检查的常量要从值中修剪的字符字符串。如果您的值用括号括起来或以逗号结尾(如后缀日志),这很有用。

这些字符形成正则表达式字符类,因此您必须使用 \ 对特殊正则表达式字符(如 [])进行转义。

仅从值中修剪开头和结尾的字符。

例如,要从值中修剪<>[],字符

    filter {
      kv {
        trim_value => "<>\[\],"
      }
    }

value_split

编辑

一个非空字符字符串,用作单字符值分隔符,用于解析出键值对。

这些字符形成正则表达式字符类,因此您必须使用 \ 对特殊正则表达式字符(如 [])进行转义。

例如,识别诸如key1:value1 key2:value2之类的键值

    filter { kv { value_split => ":" } }

value_split_pattern

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

一个正则表达式,用作值分隔符,用于解析出键值对。用于定义多字符值分隔符。设置value_split_pattern选项将优先于value_split选项

请注意,您应避免在正则表达式中使用捕获组,并且应谨慎使用前瞻或后顾以及位置锚。

请参阅field_split_pattern以获取示例。

whitespace

编辑
  • 值可以是以下任何一个:lenientstrict
  • 默认值为lenient

一个选项,指定在接受配置的值分隔符周围不必要的空格时是宽松还是严格

默认情况下,插件以lenient模式运行,该模式忽略值分隔符前后出现的空格。虽然这允许插件对大多数输入做出合理的猜测,但在某些情况下,它可能过于宽松。

如果您控制输入数据并可以保证在您为分割值定义的模式周围不会添加额外的空格,则可能希望启用whitespace => strict模式。这样做将确保紧跟在值分隔符后面的字段分隔符序列将被解释为空字段。

常用选项

编辑

所有过滤器插件都支持这些配置选项

add_field

编辑
  • 值类型为哈希
  • 默认值为 {}

如果此过滤器成功,则将任何任意字段添加到此事件。字段名称可以是动态的,并包含使用%{field}的事件部分。

示例

    filter {
      kv {
        add_field => { "foo_%{somefield}" => "Hello world, from %{host}" }
      }
    }
    # You can also add multiple fields at once:
    filter {
      kv {
        add_field => {
          "foo_%{somefield}" => "Hello world, from %{host}"
          "new_field" => "new_static_value"
        }
      }
    }

如果事件具有字段"somefield" == "hello",则此过滤器在成功时将添加字段foo_hello(如果存在),其值为上述值,并且%{host}部分将替换为事件中的该值。第二个示例还将添加一个硬编码字段。

add_tag

编辑
  • 值类型为数组
  • 默认值为 []

如果此过滤器成功,则将任意标签添加到事件。标签可以是动态的,并包含使用%{field}语法的事件部分。

示例

    filter {
      kv {
        add_tag => [ "foo_%{somefield}" ]
      }
    }
    # You can also add multiple tags at once:
    filter {
      kv {
        add_tag => [ "foo_%{somefield}", "taggedy_tag"]
      }
    }

如果事件具有字段"somefield" == "hello",则此过滤器在成功时将添加标签foo_hello(第二个示例当然会添加taggedy_tag标签)。

enable_metric

编辑

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

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

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

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

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

periodic_flush

编辑

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

remove_field

编辑
  • 值类型为数组
  • 默认值为 []

如果此过滤器成功,则从此事件中删除任意字段。字段名称可以是动态的,并包含使用%{field}示例的事件部分

    filter {
      kv {
        remove_field => [ "foo_%{somefield}" ]
      }
    }
    # You can also remove multiple fields at once:
    filter {
      kv {
        remove_field => [ "foo_%{somefield}", "my_extraneous_field" ]
      }
    }

如果事件具有字段"somefield" == "hello",则此过滤器在成功时将删除名称为foo_hello的字段(如果存在)。第二个示例将删除一个额外的非动态字段。

remove_tag

编辑
  • 值类型为数组
  • 默认值为 []

如果此过滤器成功,则从事件中删除任意标签。标签可以是动态的,并包含使用%{field}语法的事件部分。

示例

    filter {
      kv {
        remove_tag => [ "foo_%{somefield}" ]
      }
    }
    # You can also remove multiple tags at once:
    filter {
      kv {
        remove_tag => [ "foo_%{somefield}", "sad_unwanted_tag"]
      }
    }

如果事件具有字段"somefield" == "hello",则此过滤器在成功时将删除标签foo_hello(如果存在)。第二个示例还将删除一个令人悲伤的、不需要的标签。