为什么我的 优先级洞察 搜索没有结果?
使用 优先级洞察 在 IBM® Cloud Logs 中搜索时,我没有看到返回的预期结果。 我知道我在日志中搜索的字段是存在的,但 IBM Cloud Logs 似乎无法通过搜索找到它们。
搜索字段值不返回预期结果。
问题往往与映射异常有关。
如果录入的新日志字段的字段名与 IBM Cloud Logs 以前录入的字段名相同,但值类型不同,则可能出现映射异常。 当 IBM Cloud Logs 索引摄取的数据时,它会尝试将字段映射到以下类型之一:
StringNumericObjectArray
例如,如果已摄取字段 user 且第一个接收到的值是 "username",IBM Cloud Logs 将为字段 user 创建一个类型为 string 的索引:
"user": “username”`
如果后来又摄取了新的日志,其中也有一个名为“用户”的字段,其格式如下:
"user": {
“email”: “username@yourcompany.com”,
”login”: “username”`
}
IBM Cloud Logs 中创建了一个映射异常。 在 优先级洞察 中查找名为 user 的字段时,根据第一个带有 user 字段的日志记录,预计会有 string 值。
由于映射异常,在 优先级洞察 中查找具有 array 类型(user.email 或 user.login )的 user 将不会返回任何结果。
您可以使用 IBM Cloud Logs 用户界面确定是否存在映射异常。
要识别映射异常,请完成以下步骤:
-
检查 IBM Cloud Logs 用户界面,查看日志计数旁边的图标:
映射异常图标 将鼠标悬停在图标上,会显示所选时间范围内查询结果中存在映射异常的日志数量。
-
要识别未正确编入索引的特定日志,请启用
Show Mapping errors选项:
选择如何显示映射错误 -
启用此选项后,请刷新浏览器。
有映射异常且未编入索引的字段上将显示感叹号。
标记有映射异常的字段 另一种快速识别哪些字段存在映射异常的方法是运行查询:
_exists_: coralogix.failed_reason
显示映射异常的查询。 此查询将仅返回所选时间段内存在映射异常的日志行。
有两种方法可以解决映射异常:
-
方案 1:搜索时不编制索引。
如果在查询时由于映射异常而找不到字段,可以在
All Logs而不是Priority Insights中搜索。 在All Logs中搜索时,搜索会绕过索引和映射异常。 -
方案 2:在摄取时修复日志记录。
您可以修复使用相同字段名称但不同数据类型摄取的新日志记录。
-
创建 RegEx 表达式,用适当的 sufix 替换字段名。 例如:
field_obj- 如果 IBM Cloud Logs 期望的是字符串,但找到的是对象:
- 正则表达式:
("field"\s*:\s*{) - 替换为(R):
"field_obj":{
- 正则表达式:
field_arr- 如果 IBM Cloud Logs 期望的是字符串,但发现的是数组:
- 正则表达式:
("field"\s*:\s*[) - 替换为(R):
"field_arr":[
- 正则表达式:
field_str- 如果 IBM Cloud Logs 期望的是一个对象,但找到的却是一个字符串:
- 正则表达式:
("field"\s*:\s*") - 替换为(R):
"field_str":"
- 正则表达式:
-
创建解析 替换规则,使用 RegEx 修复新日志。
-