管理数据映射异常

在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 将不会返回任何结果。

正在检查映射异常数

要检查映射异常数,请在导航栏中单击 使用情况 图标 "使用情况" 图标 > 映射统计信息。 您可以在 映射异常-今天的计数 部分中获取每天的映射异常总数。

识别具有映射异常的字段

要识别导致映射异常的字段,您可以运行以下查询:

_exists_:"coralogix.failed_reason"

搜索包含映射异常的数据

在优先级洞察中搜索时,包含映射异常的日志记录只能通过自由文本查询进行搜索。

如果实例关联了数据桶,则可以通过“所有日志” 搜索日志。 您可以使用自由文本查询或键值对进行搜索。

告警

警报功能不受数据映射异常的影响,将继续正常触发。

修正具有映射异常的字段

要修正映射异常,请标识报告映射异常的字段以及发送具有不同类型的相同字段的应用程序。 然后,尝试在源处解决问题。

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

  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 修复新日志。