使用“替换”规则修正日志数据
在 IBM® Cloud Logs中,可以使用 替换 规则来更改日志结构,修复格式不正确的日志,更改日志严重性或屏蔽信息。
准备工作
解析规则在 规则组中进行组织。 每个组都有一个名称和一组规则,它们之间具有逻辑关系。 根据规则组的顺序 (从开始到结束) 处理日志。 然后,根据规则组中的规则顺序并根据它们之间的逻辑运算符 (AND/OR) 对它们进行处理。规则可帮助您处理,解析和重构日志数据,以准备监视和分析。 有关更多信息,请参阅 使用规则组。
配置替换规则
完成以下步骤:
-
单击 数据管道 图标
> 解析规则,然后单击 新建规则组。
-
在 详细信息 部分中,输入 规则组名称 和 规则组描述。
-
在 规则匹配器 部分中,配置应用程序,子系统和严重性,这些应用程序,子系统和严重性用于定义要应用规则组中包含的规则的日志。
-
在“规则”部分中,选择 替换
。
-
输入名称。
-
(可选) 输入描述。
-
选择一个源字段。 这是应用 RegEx 的字段。
-
选择目的地字段。 这是将使用应用 RegEx 表达式的结果填充的字段。
-
输入 正则表达式 (RegEx)。
-
输入将替换匹配的 RegEx的替换字符串。
-
如果要启用规则,请将状态切换为 ACTIVE。
-
-
通过单击 添加规则 并选择所需的规则类型来添加其他规则组。 切换 AND/OR 以选择您希望如何处理其他规则。
-
单击创建规则组。
示例: 修复格式不正确的 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
}
}