您可以为 FileLogWinLog 收集器配置键/值对 (Key/Value Pair, KVP) 分析程序。

键/值对 (KVP) 分析程序

kvp 分析程序从任意日志消息文本中查找和提取所有 key=value 匹配项。以下示例显示了 kvp 分析程序格式。
[parser|kvp_parser]
base_parser=kvp
fields=*

例如,键值日志的格式可以为:scope=local; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0;

kvp 分析程序中,您必须指定要从其中提取值的字段。例如,如果配置中存在定义 fields=name,lastname,country,则仅会分析指定键的值并将其发送到服务器。

可以选择使用双引号“ ”将键和值括起来以定义空格或其他特殊字符。

使用双引号将键或值括起来时,反斜线字符“\”可以用作转义符。反斜线字符后的任何字符按字面定义,其中包括双引号字符或反斜线字符。例如:“ \\ ”

记住以下注意事项。

  • 如果键/值对的键后面未跟等号且未提供 VALUE,将跳过该选项,与自定义文本一样。
  • 键不能为空,值可以为空。
  • 后面未跟值的等号视为自定义文本,将被跳过。
  • 值可以是用双引号括起的字符串,也可以为空。使用反斜线对属于值的特殊字符进行转义。

KVP 分析程序选项

请注意关于 kvp 分析程序结构的下列信息。

选项 描述
fields

要提取的描述为数据单位的信息。例如 fields=name,lastname,country

如果使用 fields 选项来定义特定的字段名称,则从日志中提取的字段名称中的每个无效字符均会被替换为下划线。例如,如果 fields 选项查找字段“x-A”和“a*(X+Y)”,则分析程序会从日志中提取这些字段,并将它们分别重命名为“x_a”和“a__x_y”字段。这样可以提取名称中包含任何字符的字段。

如果将 fields 选项指定为“*”(这意味着 kvp 分析程序自动识别字段/值对),则分析程序会查找仅具有“字母数字+下划线”字符(受 LI 服务器支持)的字段。所有其他无效字符均会被丢弃,而不是转换为下划线。这样可以防止分析程序将不必要的信息提取到静态字段中。

delimiter

可选。

默认分隔符包括空格字符、制表符、换行符、逗号和分号字符。

如果在配置中未指定任何分隔符,kvp 分析程序将使用默认的分隔符进行分析。

要将默认分隔符更改为特定分隔符,您必须用双引号将特定分隔符括起来进行定义。例如:delimiter = "#^|"。此定义表示将括在双引号中的每个字符用作分隔符。对于 kvp 分析程序,可使用任何字符作为分隔符。您可以在该定义中加入默认分隔符与其他分隔符。

例如,delimiter = "#^|\t\r\n\s" 语句使用制表符、换行符和空格作为分隔符。如果使用这些字符作为分隔符,则必须在这些字符前面加上转义符。例如,要将空格定义为分隔符,在将其定义为分隔符时在空格字符前面输入转义符“\”,例如,delimiter="\s"

field_decoder

嵌套分析程序指定为 JSON 字符串,其中键为应用于嵌套分析程序的字段的名称,值为要用于该字段的分析程序的名称。

每个嵌套分析程序按照基本分析程序的解码应用于相应的字段。

如果键值对的值很复杂,例如时间戳或逗号分隔列表,那么字段解码器将很有用。

debug =

可选。 debug = 值可以是 yesno。对于分析程序,调试的默认值是 debug=no

当选项设置为 yes 时,您可以在 liagent_<date>.log 中查看分析程序载入的详细日志。

其他键值选项

定义
KVP_MESSAGE = *(MESSAGE_ENTRY [WSPR])

可选空格分隔的消息条目列表

MESSAGE_ENTRY = KVP / FREE_TEXT

条目是键/值对或者自定义文本

KVP = KEY ["=" VALUE]

键/值对。如果 KEY 后面未跟等号和 VALUE,则将跳过该项,与自定义文本一样。

KEY = BARE_KEY / QUOTED_KEY
FREE_TEXT = "="

独立的等号将视为自定义文本,将被跳过。

BARE_KEY = *1BARE_KEY_CHAR

至少一个字符

BARE_KEY_CHAR = %0x00-08 / %0x10-19 / %0x21-3C / %3E-%FF

除等号、空格或制表符之外的任何字符

QUOTED_KEY = 0x22 *1(QUOTED_STRING_CHAR / "\" CHAR) 0x22

用双引号字符括起至少一个字符。反斜线用作转义符。

QUOTED_STRING_CHAR = %0x00-21 / %0x23-FF

除双引号之外的任何字符

VALUE = BARE_VALUE / QUOTED_VALUE
BARE_VALUE = *BARE_VALUE_CHAR

零个或多个字符

BARE_VALUE_CHAR = %0x00-08 / %0x10-19 / %0x21-FF

除空格或制表符之外的任何字符

QUOTED_VALUE = 0x22 *(QUOTED_STRING_CHAR / "\" CHAR) 0x22

用双引号字符括起的字符串。可为空值。反斜线用作转义符。

KVP 分析程序配置示例

如有必要,您可以使用 fields=* 分析所有字段。

[parser|simple_kvp]
base_parser =kvp
fields=*

此示例说明如何指定字段解码器。

[parser|mykvp]
debug=no
base_parser=kvp
delimiter="#^|"
fields=*
;OR fields=scope,abstract,lazyInit,autowireMode,dependencyCheck
field_decoder={"field1":"field1_parser1"}

[parser|field1_parser1]
base_parser=clf
format=[%{value1}i]]
field_decoder={"value1":"field_parser2"}

要解析以下 KVP 日志,请执行以下操作:

Configuring transport... proto = cfapi server_hostname = LOCALHOST ssl = no port = 9000 reconnect = 30
定义 KVP 分析程序配置:
[parser|kvp_log_parser]
base_parser=kvp
fields=*
KVP 分析程序返回以下字段:
proto=cfapi
server_hostname=LOCALHOST
ssl=no
port=9000
reconnect=30
注: 在输入日志中,当赋值运算符 ( =) 前面有随机生成的键时,最佳做法是不使用包含 * 选项的 KVP 分析程序,因为它会生成许多随机字段,这可能会导致 UI 和查询性能问题。您而是可以通过指定需要分析的字段来使用分析程序。

简单的和复杂的 KVP 分析程序示例

简单的 KVP 分析程序示例

[filelog|MyLog]
directory=C:\<folder_name>\Parser_logs
include=*.log
parser=my_KVP_parser

[parser|my_KVP_parser]
base_parser=kvp
fields=*

复杂的 KVP 分析程序示例

[filelog|MyLog]
directory=C:\<folder_name>\Parser_logs
include=*.log
parser=my_KVP_parser

[parser|my_KVP_parser]
base_parser=kvp
fields=*
field_decoder={"field1":" field1_parser1"}

[parser| field1_parser1]
base_parser=clf
format=[%{value1}i]]
field_decoder={"value1":" field1_parser2"}