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
语法的日志类型。
您可以配置任意字符串来拆分数据,以防您的数据未使用 =
符号和空格进行结构化。例如,此过滤器还可以通过将 field_split
参数设置为 &
来解析类似 foo=bar&baz=fizz
的查询参数。
事件元数据和 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 查询字符串示例
例如,要从 URL 查询字符串(例如 ?pin=12345~0&d=123&[email protected]&oq=bobo&ss=12345
)中分离参数:
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
编辑- 值类型为 字符串
- 此设置没有默认值。
要将所有键/值对放入的容器的名称。
如果省略此设置,字段将作为单个字段写入事件的根目录。
例如,要将所有键放入事件字段 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
编辑- 值可以是以下任何一个:
lowercase
、uppercase
、capitalize
- 此设置没有默认值。
将键转换为小写、大写或首字母大写。
例如,将所有键转换为小写
filter { kv { transform_key => "lowercase" } }
transform_value
编辑- 值可以是以下任何一个:
lowercase
、uppercase
、capitalize
- 此设置没有默认值。
将值转换为小写、大写或首字母大写。
例如,将所有值的首字母大写
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
编辑- 值可以是以下任何一个:
lenient
、strict
- 默认值为
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
标签)。
id
编辑- 值类型为字符串
- 此设置没有默认值。
向插件配置添加唯一的ID
。如果未指定ID,Logstash将生成一个。强烈建议在您的配置中设置此ID。当您有两个或多个相同类型的插件时,这尤其有用,例如,如果您有两个kv过滤器。在这种情况下,添加一个命名ID将有助于使用监控API监控Logstash。
filter { kv { id => "ABC" } }
id
字段中的变量替换仅支持环境变量,不支持使用密钥存储中的值。
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
(如果存在)。第二个示例还将删除一个令人悲伤的、不需要的标签。