Kv 过滤器插件
编辑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
语法的日志类型。
您可以配置任何任意字符串来分割您的数据,以防您的数据不是使用 =
符号和空格进行结构化的。例如,此过滤器还可以用于解析 foo=bar&baz=fizz
之类的查询参数,方法是将 field_split
参数设置为 &
。
事件元数据和 Elastic Common Schema (ECS)编辑
无论 ECS 兼容性如何,插件的行为都相同,只是在 ECS 启用且 target
未设置时发出警告。
设置 target
选项以避免潜在的模式冲突。
Kv 过滤器配置选项编辑
此插件支持以下配置选项,以及后面描述的 通用选项。
设置 | 输入类型 | 必需 |
---|---|---|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
字符串,其中之一为 |
否 |
|
字符串,其中之一为 |
否 |
|
否 |
||
否 |
||
否 |
||
否 |
||
字符串,其中之一为 |
否 |
另请参阅 通用选项,了解所有过滤器插件支持的选项列表。
allow_duplicate_values
编辑
- 值类型为 布尔值
- 默认值为
true
用于删除重复键值对的布尔选项。当设置为 false 时,将只保留一个唯一的键值对。
例如,考虑一个类似于 from=me from=me
的源。[from]
将映射到一个包含两个元素的数组:["me", "me"]
。要只保留唯一的键值对,您可以使用以下配置
filter { kv { allow_duplicate_values => false } }
allow_empty_values
编辑
- 值类型为 布尔值
- 默认值为
false
用于显式包含空值的布尔选项。当设置为 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
的源。要排除 from
和 to
,但保留 foo
键,您可以使用以下配置
filter { kv { exclude_keys => [ "from", "to" ] } }
field_split
编辑
- 值类型为 字符串
- 默认值为
" "
一个字符串,用于指定用于解析键值对的单字符字段分隔符。
这些字符形成一个正则表达式字符类,因此您必须使用 \
来转义特殊正则表达式字符,例如 [
或 ]
。
使用 URL 查询字符串的示例
例如,要从类似于 ?pin=12345~0&d=123&[email protected]&oq=bobo&ss=12345
的 URL 查询字符串中分割参数
filter { kv { field_split => "&?" } }
以上代码在 &
和 ?
字符上进行分割,为您提供以下字段
-
pin: 12345~0
-
d: 123
-
e: [email protected]
-
oq: bobo
-
ss: 12345
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
编辑
- 值类型为 布尔值
- 默认值为
true
一个布尔值,指定是否将方括号、尖括号和圆括号视为应从值中删除的值“包装器”。
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
的源。要包含 from
和 to
,但排除 foo
键,您可以使用以下配置
filter { kv { include_keys => [ "from", "to" ] } }
prefix
编辑
- 值类型为 字符串
- 默认值为
""
一个字符串,用于添加到所有提取键的前面。
例如,要将 arg_ 添加到所有键的前面
filter { kv { prefix => "arg_" } }
recursive
编辑
- 值类型为 布尔值
- 默认值为
false
一个布尔值,指定是否深入到值中并递归地从中获取更多键值对。额外的键值对将存储为根键的子键。
默认情况下,不会递归到值中。
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
edit
- 值类型为 字符串
- 此设置没有默认值。
用于存放所有键值对的容器名称。
如果省略此设置,字段将作为单独的字段写入事件的根目录。
例如,将所有键放入事件字段 kv 中
filter { kv { target => "kv" } }
tag_on_failure
edit
- 值类型为 数组
- 此设置的默认值为 [
_kv_filter_error
]。
当 kv 操作导致插件中抛出运行时异常时,操作将安全中止,不会导致插件崩溃,并且事件将使用提供的标签进行标记。
tag_on_timeout
edit
- 值类型为 字符串
- 此设置的默认值为
_kv_filter_timeout
。
当启用超时并且 kv 操作中止时,事件将使用提供的标签进行标记(请参阅:timeout_millis
)。
timeout_millis
edit
- 值类型为 number
- 此设置的默认值为 30000(30 秒)。
- 设置为零 (
0
) 以禁用超时
超时提供了一种保护措施,防止输入对用于提取键/值对的正则表达式产生病态影响。当解析事件超过此阈值时,操作将中止,并且事件将被标记,以防止操作阻塞管道(请参阅:tag_on_timeout
)。
transform_key
edit
- 值可以是以下任何一种:
lowercase
、uppercase
、capitalize
- 此设置没有默认值。
将键转换为小写、大写或首字母大写。
例如,将所有键转换为小写
filter { kv { transform_key => "lowercase" } }
transform_value
edit
- 值可以是以下任何一种:
lowercase
、uppercase
、capitalize
- 此设置没有默认值。
将值转换为小写、大写或首字母大写。
例如,将所有值的首字母大写
filter { kv { transform_value => "capitalize" } }
trim_key
edit
- 值类型为 字符串
- 此设置没有默认值。
要从键中修剪的字符字符串。如果您的键包含在括号中或以空格开头,这将很有用。
这些字符形成一个正则表达式字符类,因此您必须使用 \
来转义特殊正则表达式字符,例如 [
或 ]
。
仅从键中修剪前导和尾随字符。
例如,要从键中修剪 <
>
[
]
和 ,
字符
filter { kv { trim_key => "<>\[\]," } }
trim_value
edit
- 值类型为 字符串
- 此设置没有默认值。
用于转换检查的常量要从值中修剪的字符字符串。如果您的值包含在括号中或以逗号结尾(如后缀日志),这将很有用。
这些字符形成一个正则表达式字符类,因此您必须使用 \
来转义特殊正则表达式字符,例如 [
或 ]
。
仅从值中修剪前导和尾随字符。
例如,要从值中修剪 <
、>
、[
、]
和 ,
字符
filter { kv { trim_value => "<>\[\]," } }
value_split
edit
- 值类型为 字符串
- 默认值为
"="
一个非空字符字符串,用作解析键值对的单字符值分隔符。
这些字符形成一个正则表达式字符类,因此您必须使用 \
来转义特殊正则表达式字符,例如 [
或 ]
。
例如,要识别诸如 key1:value1 key2:value2
之类的键值
filter { kv { value_split => ":" } }
value_split_pattern
edit
- 值类型为 字符串
- 此设置没有默认值。
用于解析键值对的正则表达式,用作值分隔符。用于定义多字符值分隔符。设置 value_split_pattern
选项将优先于 value_split option
。
请注意,您应该避免在正则表达式中使用捕获组,并且应该谨慎使用前瞻或后顾以及位置锚点。
请参阅 field_split_pattern
以获取示例。
whitespace
edit
- 值可以是以下任何一种:
lenient
、strict
- 默认值为
lenient
一个选项,指定在接受配置的值分隔符周围的非必要空格时是宽松还是严格。
默认情况下,插件在 lenient
模式下运行,该模式会忽略值分隔符之前或之后出现的空格。虽然这允许插件对大多数输入做出合理的猜测,但在某些情况下它可能过于宽松。
如果您控制输入数据并且可以保证在为分割值定义的模式周围没有添加额外的空格,则可能需要启用 whitespace => strict
模式。这样做将确保紧随值分隔符之后的字段分隔符序列将被解释为空字段。
常用选项edit
以下配置选项受所有过滤器插件支持
设置 | 输入类型 | 必需 |
---|---|---|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
add_field
edit
- 值类型为 hash
- 默认值为
{}
如果此过滤器成功,则将任何任意字段添加到此事件。字段名称可以是动态的,并使用 %{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
edit
- 值类型为 array
- 默认值为
[]
如果此过滤器成功,则将任意标签添加到事件。标签可以是动态的,并使用 %{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
标签)。
id
edit
- 值类型为 string
- 此设置没有默认值。
向插件配置添加一个唯一的 ID
。如果未指定 ID,Logstash 将生成一个。强烈建议您在配置中设置此 ID。当您有两个或多个相同类型的插件时,这尤其有用,例如,如果您有两个 kv 过滤器。在这种情况下,添加一个命名 ID 将有助于在使用监控 API 时监控 Logstash。
filter { kv { id => "ABC" } }
id
字段中的变量替换仅支持环境变量,不支持使用来自密钥存储的值。
remove_field
edit
- 值类型为 array
- 默认值为
[]
如果此过滤器成功,则从此事件中删除任意字段。字段名称可以是动态的,并使用 %{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
edit
- 值类型为 array
- 默认值为
[]
如果此过滤器成功,则从事件中删除任意标签。标签可以是动态的,并使用 %{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
(如果存在)。第二个示例还将删除一个令人沮丧的、不需要的标签。