您可以為 FileLogWinLog 收集器設定索引鍵/值配對 (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

選擇性。

預設分隔符號包括空格字元、Tab、新行字元、逗點和分號字元。

如果組態中未指定任何分隔符號,kvp 剖析器會使用預設分隔符號進行剖析。

若要將預設分隔符號變更為特定分隔符號,您必須在兩個雙引號之間進行定義。例如:delimiter = "#^|"。此定義意味著用雙引號括住的每個字元都將用作分隔符號。對於 kvp 剖析器,任何字元都可視為分隔符號。您可以在定義中包含預設分隔符號和其他分隔符號。

例如,delimiter = "#^|\t\r\n\s" 陳述式包含 Tab、新行字元及空格做為分隔符號。如果使用這些字元,它們必須置於逸出字元之後。例如,若要將空格字元做為分隔符號,請在將空格字元定義為分隔符號時在其前面輸入逸出字元「\」,例如 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

除等號、空格或 TAB 之外的任何字元

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

除空格或 TAB 之外的任何字元

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"}