您可以自訂 JSON 剖析器組態,以便有選擇性地剖析 JSON 記錄。
您可以為 FileLog 和 WinLog 收集器設定逗點分隔值 (CSV) 剖析器。Log Insight 代理程式 JSON 剖析器只會剖析有效的 JSON 記錄。無效的 JSON 記錄剖析器會傳回空值結果。
預設的 JSON 剖析器組態會透過 Log Insight 代理程式來擷取 JSON 記錄中的所有欄位。當 JSON 記錄本身以單一的複雜 JSON 物件 (也可包含多個 JSON 物件) 形式來呈現時,剖析器會使用底線 (_) 字元來串連巢狀 JSON 物件和更高層 JSON 物件的名稱。這會為對應的元素產生可傳達資訊的欄位名稱。如果 JSON 記錄還包含陣列,則成員元素名稱會包含陣列名稱,且後面會加上該元素在陣列中的索引。
JSON 剖析器也會提供稱為 fields 的特定選項。
JSON 剖析器「fields」選項
您可以使用
fields 選項在組態中指定要剖析的欄位。此選項的目的是要啟用選擇性剖析 JSON 記錄的功能。
備註: 若要進行選擇性剖析,您必須指定所需 JSON 元素的路徑。不同層的 JSON 物件必須使用點 (.) 字元來隔開。
下列清單提供一些可讓您視需要有選擇性地剖析 JSON 記錄的範例組態。
- 若要剖析 JSON 記錄中的多個元素,您必須將所需元素列為 fields 選項的參數,並將這些元素以逗點隔開。請參閱下列範例:
{"operation" : {"timestamp" : "2018-11-22T15:28:58.094000", "thread_id" : "0x05673", "initiator" : "connector", "log_severity" : "info", "log_message" : "Requested connection to the server."}, "operation_result" : "success"}
- 若只要剖析最內層的 JSON 物件 (如 timestamp、log_severity 和 log_message),請參閱以下範例。此範例組態會產生下列欄位結果:operation_timestamp ="2018-11-22T15:28:58.094000",且 operation_log_severity ="info"
[parser|json_parser] base_parser=json fields=operation.timestamp,operation.log_severity, operation.log_message
- 若要剖析整個 JSON 物件,請納入物件路徑,並於後面加上星號 (*) 字元。
{"product_name" : "LI Agent", "operation" : {"timestamp" : "2018-11-22T15:28:58.094000", "thread_id" : "0x05673", "initiator" : "connector", "log_severity" : "info", "log_message" : "Requested connection to the server."}, "operation_result" : "success"}
- 若只要剖析 operation 物件,請使用下列組態:
[parser|json_parser] base_parser=json fields=operation.*
- 如果 JSON 記錄包含陣列,且您只想剖析陣列的特定元素,請在組態中使用陣列的元素索引,如下列範例組態所示:
{ "Records": [{ "object":{ "key": "/events/mykey", "size": 502, "eTag": "091820398091823", "sequencer": "1123123" } }, { "object":{ "key": "/events/user_key", "size": 128, "eTag": "09182039000001", "sequencer": "1123231" } }, { "object":{ "key": "/events/admin_key", "size": 1024, "eTag": "09182039547241", "sequencer": "1123213" } } ] } - 若只要剖析同一記錄中的 key 和 size 元素,請使用下列組態來產生下列欄位:
records0_object_key="/events/mykey"
records0_object_size=502
records2_object_key="/events/admin_key"
records2_object_size=1024
[parser|json_parser] base_parser=json fields = Records0.object.key Records0.object.size, Records2.object.key, Records2.object.size
- 若要剖析所有陣列元素的 key 欄位,請使用下列組態:
[parser|json_parser] base_parser=json fields=Records.#.object.key
- 若要剖析所有欄位,請使用 fields 選項與星號 (*) 字元。此組態相當於預設的 JSON 剖析器組態。
[parser|json_parser] base_parser=json fields=*