使用“替换”规则修正日志数据

在 IBM® Cloud Logs中,可以使用 替换 规则来更改日志结构,修复格式不正确的日志,更改日志严重性或屏蔽信息。

准备工作

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

配置替换规则

完成以下步骤:

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

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

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

  4. 在“规则”部分中,选择 替换 "替换解析规则" 图标

    1. 输入名称。

    2. (可选) 输入描述。

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

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

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

    6. 输入将替换匹配的 RegEx的替换字符串。

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

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

  6. 单击创建规则组

示例: 修复格式不正确的 JSON 日志

替换规则的常见用例是修复格式不正确的 JSON 日志。

在以下示例中,将使用日期前缀发送 JSON 日志,该日期前缀将打破 JSON 格式并将其转换为非结构化日志。

RegEx 标识子串并在日志中除去不正确的字符串。

原始日志为:

2020-08-07 {“status”:”OK”, “user”:John Smith”, “ops”:”J1”}

RegEx:

.*{

用于替换 RegEx 表达式求值结果的字符串为:

{

生成的日志:

{"status":"OK", "user":"John Smith", "ops":"J1"}

示例: 使用嵌套字段重建日志

以下示例显示如何使用替换规则重建具有嵌套字段的日志。 嵌套字段是抽取和解析规则中的约束。

原始日志:

{"ops":"G1","user":"John Smith-2125 Sierra Ventura Dr.-Sunnyvale-CA-94054","status":"305"}

RegEx:

(.*user"):"([^-]*)-([^-]*)-([^-]*)-([^-]*)-([^-]*)",([^$]*)

每个括号都表示一个可由 $n n=1..7 寻址的捕获组。

替换字符串:

$1:{"name":"$2","address":"$3","city":"$4","state":"$5","zip":"$6"},$7

生成的日志;

{
   "ops":"G1",
   "User":{
      "name":"John Smith",
      "address":"2125 Sierra Ventura Dr.",
      "city":"Sunnyvale",
      "state":"CA",
      "Zip":"94054"
   },
   "status":"305"
}

示例: 将字符串化 (转义) JSON 字段转换为对象

inner_json 规则是一个特殊替换规则,它在 JSON 日志中采用包含字符串化 (转义) 的字段值 JSON,并将其转换为对象。

在以下示例中,原始日志为:

{
 "server":"opa",
 "IBC":"45ML",
 "thread":"1201",
 "message":"{\"first_name\":\"John\", \"last_name\":\"Smith\", \"userID\":\"AB12345\", \"duration\":45}"
}

字段消息具有一个字符串值,该值是转义的合法 JSON。

我们的特殊替换规则将字段的名称从原始名称 "message" 更改为 "inner_json":

RegEx:

“message”\s*:\s*”{\s*\\”

此 RegEx 标识以转义 JSON 开头的字段名称消息。

替换字符串为:

“inner_json”:”{\”

此示例仅替换字段名称,而不替换其他内容。

生成的日志:

{
   "server":"opa",
   "inner_json":{
     "first_name":"John" ,
     "last_name":"Smith" ,
     "userID":"AB12345" ,
     "duration":45
  }
}