您可以自定义 JSON 分析程序配置,以便有选择地分析 JSON 日志。

您可以为 FileLogWinLog 收集器配置逗号分隔值 (CSV) 分析程序。仅使用 Log Insight 代理 JSON 分析程序分析有效的 JSON 日志。无效的 JSON 日志分析程序将返回空结果。

对于默认 JSON 分析程序配置,Log Insight 代理将提取 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 对象(如 timestamplog_severitylog_message),请参见以下示例。该示例配置生成以下字段结果:operation_timestamp ="2018-11-22T15:28:58.094000" and 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"                                   
                }                      
            }           
         ] 
    }
  • 要仅分析同一日志中的 keysize 元素,请使用以下配置生成以下字段:

    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=*