key_value
您可以使用 key_value
处理器将指定字段解析为键值对。您可以自定义 key_value
处理器,使用以下选项解析字段信息。以下每个选项的类型都是 string
。
选项 | 描述 | 示例 |
---|---|---|
source | 要解析的消息字段。可选。默认值为 message 。 | 如果 source 为 "message1" ,则 {"message1": {"key1=value1"}, "message2": {"key2=value2"}} 将解析为 {"message1": {"key1=value1"}, "message2": {"key2=value2"}, "parsed_message": {"key1": "value1"}} 。 |
destination | 解析源的目标字段。解析后的源会覆盖该键的现有数据。可选。如果 destination 设置为 null ,解析后的字段将写入事件的根。默认值为 parsed_message 。 | 如果 destination 为 "parsed_data" ,则 {"message": {"key1=value1"}} 将解析为 {"message": {"key1=value1"}, "parsed_data": {"key1": "value1"}} 。 |
field_delimiter_regex | 一个正则表达式,指定分隔键值对的分隔符。特殊正则表达式字符(如 [ 和 ] )必须用 \\ 转义。不能与 field_split_characters 同时定义。可选。如果未定义此选项,则使用 field_split_characters 。 | 如果 field_delimiter_regex 为 "&\\{2\\}" ,则 {"key1=value1&&key2=value2"} 将解析为 {"key1": "value1", "key2": "value2"} 。 |
field_split_characters | 指定分隔键值对的分隔符字符串。特殊正则表达式字符(如 [ 和 ] )必须用 \\ 转义。不能与 field_delimiter_regex 同时定义。可选。默认值为 & 。 | 如果 field_split_characters 为 "&&" ,则 {"key1=value1&&key2=value2"} 将解析为 {"key1": "value1", "key2": "value2"} 。 |
key_value_delimiter_regex | 一个正则表达式,指定分隔键值对中键和值的分隔符。特殊正则表达式字符(如 [ 和 ] )必须用 \\ 转义。此选项不能与 value_split_characters 同时定义。可选。如果未定义此选项,则使用 value_split_characters 。 | 如果 key_value_delimiter_regex 为 "=\\{2\\}" ,则 {"key1==value1"} 将解析为 {"key1": "value1"} 。 |
value_split_characters | 指定分隔键值对中键和值的分隔符字符串。特殊正则表达式字符(如 [ 和 ] )必须用 \\ 转义。不能与 key_value_delimiter_regex 同时定义。可选。默认值为 = 。 | 如果 value_split_characters 为 "==" ,则 {"key1==value1"} 将解析为 {"key1": "value1"} 。 |
non_match_value | 当键值对无法成功拆分时,该键值对将被放置在 key 字段中,并将指定值放置在 value 字段中。可选。默认值为 null 。 | key1value1&key2=value2 将解析为 {"key1value1": null, "key2": "value2"} 。 |
prefix(前缀) | 在所有键之前添加的前缀。可选。默认值为空字符串。 | 如果 prefix 为 "custom" ,则 {"key1=value1"} 将解析为 {"customkey1": "value1"} 。 |
delete_key_regex | 一个正则表达式,指定要从键中删除的字符。特殊正则表达式字符(如 [ 和 ] )必须用 \\ 转义。不能为空字符串。可选。无默认值。 | 如果 delete_key_regex 为 "\s" ,则 {"key1 =value1"} 将解析为 {"key1": "value1"} 。 |
delete_value_regex | 一个正则表达式,指定要从值中删除的字符。特殊正则表达式字符(如 [ 和 ] )必须用 \\ 转义。不能为空字符串。可选。无默认值。 | 如果 delete_value_regex 为 "\s" ,则 {"key1=value1 "} 将解析为 {"key1": "value1"} 。 |
include_keys(包含的键) | 一个数组,指定应添加进行解析的键。默认情况下,将添加所有键。 | 如果 include_keys 为 ["key2"] ,key1=value1&key2=value2 将解析为 {"key2": "value2"} 。 |
exclude_keys(排除的键) | 一个数组,指定不应添加到事件中的已解析键。默认情况下,不排除任何键。 | 如果 exclude_keys 为 ["key2"] ,则 key1=value1&key2=value2 将解析为 {"key1": "value1"} 。 |
default_values | 一个映射,指定当解析的源字段中不存在这些键时,应添加到事件中的默认键及其值。如果默认键已存在于消息中,则值不会更改。include_keys 过滤器将在 default_values 之前应用于消息。 | 如果 default_values 为 {"defaultkey": "defaultvalue"} ,则 key1=value1 将解析为 {"key1": "value1", "defaultkey": "defaultvalue"} 。如果 default_values 为 {"key1": "abc"} ,则 key1=value1 将解析为 {"key1": "value1"} 。如果 include_keys 为 ["key1"] 且 default_values 为 {"key2": "value2"} ,则 key1=value1&key2=abc 将解析为 {"key1": "value1", "key2": "value2"} 。 |
transform_key | 何时将键转换为小写、大写或首字母大写。 | 如果 transform_key 为 lowercase ,则 {"Key1=value1"} 将解析为 {"key1": "value1"} 。如果 transform_key 为 uppercase ,则 {"key1=value1"} 将解析为 {"KEY1": "value1"} 。如果 transform_key 为 capitalize ,则 {"key1=value1"} 将解析为 {"Key1": "value1"} 。 |
whitespace | 指定是否对围绕配置的值分隔序列的不必要空格采取宽松或严格的接受方式。默认为 lenient 。 | 如果 whitespace 为 "lenient" ,则 {"key1 = value1"} 将解析为 {"key1 ": " value1"} 。如果 whitespace 为 "strict" ,则 {"key1 = value1"} 将解析为 {"key1": "value1"} 。 |
skip_duplicate_values | 一个布尔选项,用于删除重复的键值对。当设置为 true 时,只会保留一个唯一的键值对。默认为 false 。 | 如果 skip_duplicate_values 为 false ,则 {"key1=value1&key1=value1"} 将解析为 {"key1": ["value1", "value1"]} 。如果 skip_duplicate_values 为 true ,则 {"key1=value1&key1=value1"} 将解析为 {"key1": "value1"} 。 |
remove_brackets | 指定是否将方括号、尖括号和圆括号视为应从值中删除的值“包装器”。默认为 false 。 | 如果 remove_brackets 为 true ,则 {"key1=(value1)"} 将解析为 {"key1": value1} 。如果 remove_brackets 为 false ,则 {"key1=(value1)"} 将解析为 {"key1": "(value1)"} 。 |
recursive | 指定是否从值中递归获取额外的键值对。额外的键值对将作为根键的子键存储。默认为 false 。递归解析的级别必须由每个级别不同的括号定义:[] 、() 和 <> ,按此顺序。任何其他指定配置仅适用于最外层键。当 recursive 为 true 时remove_brackets 不能也为 true ;skip_duplicate_values 将始终为 true ;whitespace 将始终为 "strict" 。 | 如果 recursive 为 true,则 {"item1=[item1-subitem1=item1-subitem1-value&item1-subitem2=(item1-subitem2-subitem2A=item1-subitem2-subitem2A-value&item1-subitem2-subitem2B=item1-subitem2-subitem2B-value)]&item2=item2-value"} 将解析为 {"item1": {"item1-subitem1": "item1-subitem1-value", "item1-subitem2" {"item1-subitem2-subitem2A": "item1-subitem2-subitem2A-value", "item1-subitem2-subitem2B": "item1-subitem2-subitem2B-value"}}} 。 |
overwrite_if_destination_exists | 指定在将解析的字段写入事件时,如果存在键冲突,是否覆盖现有字段。默认为 true 。 | 如果 overwrite_if_destination_exists 为 true 且 destination 为 null ,则 {"key1": "old_value", "message": "key1=new_value"} 将解析为 {"key1": "new_value", "message": "key1=new_value"} 。 |
tags_on_failure | 当 kv 操作在处理器中引发运行时异常时,操作将安全停止而不会使处理器崩溃,并且事件会标记上提供的标签。 | 如果 tags_on_failure 设置为 ["keyvalueprocessor_failure"] ,则在发生运行时异常时,{"tags": ["keyvalueprocessor_failure"]} 将添加到事件的元数据中。 |
value_grouping | 指定是否使用预定义的值分组分隔符进行值分组:{...} 、[...]', <…>、 (…)、 “…”、 ‘…’、 http://… (空格) 和 https:// (空格)。如果启用此标志,则分隔符之间的内容被视为一个实体,并且不解析键值对。默认为 false。如果 value_grouping 为 true,则 {“key1=[a=b,c=d]&key2=value2”} 解析为 {“key1”: “[a=b,c=d]”, “key2”: “value2”}`。 | |
drop_keys_with_no_value | 指定如果键的值为 null,是否应删除这些键。默认为 false 。如果 drop_keys_with_no_value 设置为 true ,则 {"key1=value1&key2"} 解析为 {"key1": "value1"} 。 | |
strict_grouping | 指定在使用 value_grouping 或 string_literal_character 选项时是否应启用严格分组。默认为 false 。 | 启用后,具有不匹配结束字符的组将产生错误。事件在记录错误后将被忽略。 |
string_literal_character | 可以设置为单引号 (' ) 或双引号 (" )。默认为 null 。 | 使用此选项时,包含在指定引号字符中的任何文本都将被忽略并从键值解析中排除。例如,text1 "key1=value1" text2 key2=value2 将解析为 {"key2": "value2"} 。 |
key_value_when | 允许您指定一个 条件表达式,例如 /some-key == "test" ,该表达式将用于确定是否应将处理器应用于事件。 |