排查 Log Analytics 配置问题

本文档介绍了如何解决在使用 Google Cloud 控制台的 Log Analytics 页面时可能发生的错误。

错误消息

本部分介绍了您可能会看到的错误消息以及如何解决相应的错误条件。

No completion signal within allotted timeframe 错误消息

您输入 SQL 查询,然后选择运行查询。查询未完成,您看到以下错误消息:

The query failed to execute and return results due to error: No completion signal within allotted timeframe.

如需解决此错误,请执行以下操作之一:

  • 缩短查询日志的间隔时间,然后重试查询。例如,如果查询间隔时间为 14 天,请将间隔时间缩短为 7 天,然后运行查询。

  • 创建关联的 BigQuery 数据集,然后通过 BigQuery 界面运行查询。BigQuery 界面支持的查询执行时间比 Cloud Logging 界面更长。如需了解详情,请参阅查询关联的 BigQuery 数据集

针对使用不同 CMEK 密钥的存储桶进行的查询的相关错误消息

您输入查询多个日志存储桶的 SQL 查询,然后选择运行查询。查询未完成,您看到以下错误消息:

Queries against buckets with distinct CMEK keys must have a key configured in the LogSettings.

如需解决此问题,请执行以下操作之一:

  • 将日志存储桶配置为使用相同 Cloud Key Management Service (Cloud KMS) 密钥。
  • 当日志存储桶位于同一位置时,您可以使用默认 Cloud KMS 密钥配置一个文件夹或组织,以用作日志存储桶的父级资源。父级的默认密钥必须与日志存储桶位于同一位置。使用此配置时,父级的默认密钥会对 Log Analytics 查询生成的任何临时数据进行加密。如需了解详情,请参阅 Log Analytics 限制

FROM 子句必须且只能包含一个视图的错误消息

您在 Google Cloud 控制台 Log Analytics 页面的查询窗格中输入 SQL 查询,但 SQL 解析器显示以下错误:

FROM clause must contain exactly one log view

如果 FROM 语句中指定的表无法解析为特定日志视图,系统便会报告上述错误。

如需解决此错误,请确保您的表名称具有正确的语法:

  • 确保表名称符合 Log Analytics 命名方案所需的语法。BigQuery 和 Log Analytics 对表名称具有不同的要求。您可以通过查看默认查询来了解表名称所需的语法。

  • 如果日志存储桶的 Google Cloud 项目 ID、区域、存储桶 ID 或视图 ID 包含句点字符 (.),请确保将这些字段中的每一个都用单引号 (`) 括起来。

    例如,如果 Google Cloud 项目 ID 为 example.com:bluebird,那么如需查询 _Default 日志存储桶的 _AllLogs 视图,请使用以下语法指定表:

    
    SELECT *
    FROM `example.com:bluebird`.`global`.`_Default`.`_AllLogs`
    

    上面的查询假定 _Default 存储桶位于 global 区域。

无法保存查询

您想保存当前查询,因此运行查询,然后点击 保存,但保存查询选项处于停用状态,或者您无法完成对话框步骤。

保存查询选项处于停用状态时,表示您的组织或文件夹的默认资源设置定义了组织政策不允许使用的位置。如需解决此失败问题,请让组织的管理员在默认资源设置中定义与组织政策允许使用的位置一致的位置。如需了解详情,请参阅为组织和文件夹配置默认设置

如果保存查询选项处于启用状态,但您无法完成对话框并保存查询,请执行以下操作:

  1. 确保查询不包含语法错误。您只能保存有效的查询。
  2. 可选:将查询复制到剪贴板中。
  3. 重新加载页面。
  4. 如果您已将查询复制到剪贴板中,请将查询粘贴到查询窗格中,运行查询,然后执行保存操作。

无法创建分析视图

您想创建分析视图,因此输入并运行 SQL 查询,然后点击 保存,但另存为分析视图选项处于停用状态。

如需解决此问题,请确保您的 IAM 角色包含以下权限:

  • observability.analyticsViews.{get, list, create, update, delete}

任何预定义 Cloud Logging 角色都不包含这些权限。如需了解所需角色,请参阅创建和查询分析视图:准备工作

无法查询分析视图

您想查询分析视图,但 Log Analytics 页面中的视图窗格未显示任何分析视图。

如需解决此失败问题,请尝试执行以下操作:

  • 确保您的 IAM 角色包含以下权限:

    • observability.analyticsViews.{get, list}

    任何预定义 Cloud Logging 角色都不包含这些权限。如需了解所需角色,请参阅创建和查询分析视图:准备工作

  • 确保您的 Google Cloud 项目中存在分析视图。

被拒绝访问 Log Analytics 页面

您在 Google Cloud 控制台中打开 Log Analytics 页面,但系统显示权限遭拒错误消息。

如需获得加载 Log Analytics 页面、运行查询和查看日志所需的权限,请让管理员为您授予项目的以下 IAM 角色:

您也可以通过自定义角色或 Logging 预定义角色来获取所需的权限。

Log Analytics 页面上查看日志条目和运行查询所需的权限与在 Logs Explorer 页面上查看日志所需的权限相同。如需了解您需要哪些额外角色才能查询用户定义的存储桶的视图,或者查询 _Default 日志存储桶的 _AllLogs 视图,请参阅 Cloud Logging 角色

升级日志存储桶以使用 Log Analytics 失败

您创建日志存储桶,然后选择相应选项以使用 Log Analytics,或是升级现有日志存储桶以使用 Log Analytics。升级失败,并显示类似于以下内容的错误条件:

Failed precondition (HTTP 400): Constraint "my-constraint" violated for PROJECT_ID  with location global.

上面的错误消息表示,您的组织已配置了限制可用区域的组织政策。符合升级以使用 Log Analytics 的条件的日志存储桶必须使用 global 区域。如果您可以移除限制使用 global 区域的组织政策,则可以升级日志存储桶。否则,您将无法升级日志存储桶。

创建关联的 BigQuery 数据集失败

您修改日志存储桶以创建关联的 BigQuery 数据集,或者您创建新的日志存储桶并选择相应选项以创建关联的数据集;但关联的数据集未创建。

如需解决此错误,请让 Google Cloud 项目的系统管理员为您授予包含以下权限的 IAM 角色:

  • logging.links.create

上面的权限包含在 Logging Admin (roles/logging.admin) 和 Logs Configuration Writer (roles/logging.configWriter) 角色中。

如需了解角色和权限,请参阅使用 IAM 进行访问权限控制

删除关联的 BigQuery 数据集失败

您不再需要关联的数据集,但无法删除该数据集。

如需解决此错误,请让 Google Cloud 项目的系统管理员为您授予包含以下权限的 IAM 角色:

  • logging.links.delete

上面的权限包含在 Logging Admin (roles/logging.admin) 和 Logs Configuration Writer (roles/logging.configWriter) 角色中。

此权限使您可以从 Google Cloud 控制台的日志存储页面中删除关联的数据集。如需详细了解角色和权限,请参阅使用 IAM 进行访问权限控制

缺少查询引擎设置按钮

如果运行查询按钮旁边未显示 设置按钮,则表示您的 Google Cloud 项目未启用预留 BigQuery 槽。如需启用 设置按钮,请为您的项目配置预留 BigQuery 槽

“在 BigQuery 上运行”按钮处于停用状态

如果在 BigQuery 上运行按钮显示但处于停用状态,则表示查询引用的日志视图没有关联的数据集。如需对 BigQuery 槽预留运行查询,请对日志视图创建关联的 BigQuery 数据集

没有 Monitoring 服务账号

您希望创建提醒政策来监控 SQL 查询的结果。设置步骤要求您向 Monitoring 服务账号授予 IAM 角色,但该账号不存在。

Monitoring 服务账号称为“服务代理”,因为它是由Google Cloud创建并管理的。当您配置需要该账号的资源或服务时,系统会自动创建该账号。例如,如果您创建 Pub/Sub 通知渠道,则该操作可能会导致创建 Monitoring 服务账号。根据创建流程,Monitoring 服务账号可能会被授予您项目的 Monitoring Service Agent (monitoring.NotificationServiceAgent) 角色。您可以修改向该账号授予的角色。

如果 Monitoring 服务账号不存在,那么如需创建用于监控 SQL 查询结果的提醒政策,您需要执行以下操作:

  1. 手动创建服务代理。如需了解此步骤,请参阅创建服务代理并授予角色

  2. 向服务代理授予所需角色。 如需了解这些角色,请参阅监控 SQL 查询结果:准备工作

我的 Log Analytics 结果中存在重复的日志条目

您运行的查询会统计或报告重复条目。由于 Logs Explorer 会根据日志名称、时间戳和插入 ID 移除重复条目,因此您期望 Log Analytics 在运行查询之前删除重复的日志条目。

然而 Log Analytics 不会执行 Logs Explorer 所执行的同一类型的重复信息删除。

如需解决重复日志条目问题,请尝试以下操作:

  1. 确定重复的日志条目是否具有不同的接收时间戳值。如果时间戳不同,则表示相同的数据已多次写入到 Logging 中。

    如需解决重复写入问题,请调查日志记录集成是否存在错误消息或配置错误。

  2. 如果您的存储桶配置为使用 Cloud Key Management Service 密钥,请确保您未超出配额,并且您的密钥始终可供访问。超出配额或失去密钥访问权限可能会导致重复的日志条目。

    如需解决这些故障,请确保您未超出配额,并且您的密钥可供访问。

  3. 修改查询以移除重复的日志条目。

    例如,假设 JSON 载荷包含 fieldAfieldB,其中第一个是字符串,第二个是数字。此外,假设 JSON 载荷包含一个标记为 server 的字段,其中包含一个字符串。接下来,请考虑以下查询:

    SELECT
      JSON_VALUE(json_payload.fieldA) AS fieldA
      SUM(IFNULL(SAFE_CAST(JSON_VALUE(json_payload.fieldB) AS INT64), 0)) AS sum_fieldB
    FROM
      `TABLE_NAME_OF_LOG_VIEW`
    WHERE
      JSON_VALUE(json_payload.server) = "test"
    GROUP BY
      fieldA;
    

    您可以修改查询以移除重复的日志条目,在这种情况下会检查日志名称、时间戳和插入 ID 以确定日志条目是否重复:

    WITH
      deduplicated AS (
      SELECT
        JSON_VALUE(json_payload.fieldA) AS fieldA
        IFNULL(SAFE_CAST(JSON_VALUE(json_payload.fieldB) AS INT64), 0) AS fieldB
      FROM
        `TABLE_NAME_OF_LOG_VIEW` a
      WHERE
        JSON_VALUE(json_payload.server) = "test"
      QUALIFY
        ROW_NUMBER() OVER (PARTITION BY a.log_name, a.timestamp, a.insert_id ) = 1 )
    
    SELECT
      fieldA,
      SUM(fieldB) AS sum_fieldB
    FROM
      deduplicated
    GROUP BY
      fieldA;