将非结构化文本转换为 JSON

在 IBM® Cloud Logs中,可以使用 解析 规则将非结构化文本转换为 1 或更多 JSON 字段。

准备工作

解析规则在 规则组中进行组织。 每个组都有一个名称和一组规则,它们之间具有逻辑关系。 根据规则组的顺序 (从开始到结束) 处理日志。 然后,根据规则组中的规则顺序并根据它们之间的逻辑运算符 (AND/OR) 对它们进行处理。规则可帮助您处理,解析和重构日志数据,以准备监视和分析。 有关更多信息,请参阅 使用规则组

使用指定的已捕获组来定义新字段

解析规则使用 RegEx 指定的捕获组来定义新字段。

  • 捕获的组将成为解析的日志字段。
  • 与每个组关联的值将成为字段的值。
  • RegEx 不必与整个日志匹配。
  • 只有 RegEx 指定的捕获组 ( < > 中的值) 及其捕获的值是重构日志的一部分。

配置解析规则

完成以下步骤以使用 1 解析规则创建规则组:

  1. 单击 数据管道 图标 "数据管道" 图标 > 解析规则,然后单击 新建规则组

  2. 详细信息 部分中,输入 规则组名称规则组描述

  3. 规则匹配器 部分中,配置应用程序,子系统和严重性,这些应用程序,子系统和严重性用于定义要应用规则组中包含的规则的日志。

  4. 规则 部分中,选择 解析 "解析规则" 图标

    1. 输入名称。

    2. (可选) 输入描述。

    3. 选择一个源字段。 这是应用 RegEx 的字段。

    4. 选择目的地字段。 这是将使用应用 RegEx 表达式的结果填充的字段。

    5. 输入 正则表达式 (RegEx)。

    6. 如果要启用规则,请将状态切换为 ACTIVE

  5. 通过单击 添加规则 并选择所需的规则类型来添加其他规则组。 切换 AND/OR 以选择您希望如何处理其他规则。

  6. 单击创建规则组

示例日志转换

以下示例采用从 Heroku 作为非结构化日志发送的 Heroku L/H 类型错误日志,并将其转换为 JSON 日志。

原始日志为:

sock=client at=warning code=H27 desc="Client Request Interrupted" method=POST path="/submit/" host=myapp.herokuapp.com fwd=17.17.17.17 dyno=web.1 connect=1ms service=0ms status=499 bytes=0

RegEx 是:

^(sock=)?(?P<sock>(\S*))\s*at=(?P<severity>\S*)\s*code=(?P<error_code>\S*)\s*desc="(?P<desc>[^"]*)"\s*method=(?P<method>\S*)\s*path="(?P<path>[^"]*)" host=(?P<host>\S*)\s* (request_id=)?(?P<request_id>\S*)\s*fwd="?(?P<fwd>[^"\s]*)"?\s*dyno=(?P<dyno>\S*)\s*connect=(?P<connect>\d*)(ms)?\s*service=(?P<service>\d*)(ms)?\s*status=(?P<status>\d*)\s* bytes=(?P<bytes>\S*)\s*(protocol=)?(?P<protocol>[^"\s]*)$

格式化的日志为:

{
    "sock": "client",
    "severity": "warning",
    "error_code": "H27",
    "desc": "Client Request Interrupted",
    "method": "POST",
    "path": "/submit/",
    "host": "myapp.herokuapp.com",
    "request_id": "",
    "fwd": "17.17.17.17",
    "dyno": "web.1",
    "connect": "1",
    "service": "0",
    "status": "499",
    "bytes": "0",
    "protocol": ""
}