为什么我的 优先级洞察 搜索没有结果?

使用 优先级洞察 在 IBM® Cloud Logs 中搜索时,我没有看到返回的预期结果。 我知道我在日志中搜索的字段是存在的,但 IBM Cloud Logs 似乎无法通过搜索找到它们。

搜索字段值不返回预期结果。

问题往往与映射异常有关。

如果录入的新日志字段的字段名与 IBM Cloud Logs 以前录入的字段名相同,但值类型不同,则可能出现映射异常。 当 IBM Cloud Logs 索引摄取的数据时,它会尝试将字段映射到以下类型之一:

  • String
  • Numeric
  • Object
  • Array

例如,如果已摄取字段 user 且第一个接收到的值是 "username",IBM Cloud Logs 将为字段 user 创建一个类型为 string 的索引:

"user": “username”`

如果后来又摄取了新的日志,其中也有一个名为“用户”的字段,其格式如下:

"user": {
  “email”: “username@yourcompany.com”,
  ”login”: “username”`
}

IBM Cloud Logs 中创建了一个映射异常。 在 优先级洞察 中查找名为 user 的字段时,根据第一个带有 user 字段的日志记录,预计会有 string 值。

由于映射异常,在 优先级洞察 中查找具有 array 类型(user.emailuser.login )的 user 将不会返回任何结果。

您可以使用 IBM Cloud Logs 用户界面确定是否存在映射异常。

要识别映射异常,请完成以下步骤:

  1. 检查 IBM Cloud Logs 用户界面,查看日志计数旁边的图标:

    映射异常图标
    映射异常图标

    将鼠标悬停在图标上,会显示所选时间范围内查询结果中存在映射异常的日志数量。

  2. 要识别未正确编入索引的特定日志,请启用 Show Mapping errors 选项:

    选择如何显示映射错误。 单击设置,然后单击显示映射错误。
    选择如何显示映射错误

  3. 启用此选项后,请刷新浏览器。

    有映射异常且未编入索引的字段上将显示感叹号。

    标记有映射异常的字段
    标记有映射异常的字段

    另一种快速识别哪些字段存在映射异常的方法是运行查询:_exists_: coralogix.failed_reason

    显示映射异常的查询
    显示映射异常的查询。

    此查询将仅返回所选时间段内存在映射异常的日志行。

有两种方法可以解决映射异常:

  • 方案 1:搜索时不编制索引。

    如果在查询时由于映射异常而找不到字段,可以在 All Logs 而不是 Priority Insights 中搜索。 在 All Logs 中搜索时,搜索会绕过索引和映射异常。

  • 方案 2:在摄取时修复日志记录。

    您可以修复使用相同字段名称但不同数据类型摄取的新日志记录。

    1. 创建 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":"
    2. 创建解析 替换规则,使用 RegEx 修复新日志。