排查 Compute Engine 并发操作配额问题


本文档介绍了如何排查由 rateLimitExceeded 错误导致的 Compute Engine 并发操作限制问题。

如需帮助找出 rateLimitExceeded 错误的原因,请按以下问题排查步骤操作:

  1. 在 Google Cloud 控制台中,转到 Logs Explorer 页面:

    前往 Logs Explorer

    如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。

  2. 如需过滤由 Compute Engine API 生成的错误日志,请在查询编辑器中输入以下日志记录查询。

    log_id("cloudaudit.googleapis.com/activity")
    protoPayload.serviceName="compute.googleapis.com"
    protoPayload.response.error.code=403
    protoPayload.status.message="Rate Limit Exceeded"
    

    过滤后的错误日志应类似于以下内容:

    "protoPayload":{
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "status": {
      "message": "Rate Limit Exceeded"
    }
    "serviceName": "compute.googleapis.com",
    "methodName": "METHOD_NAME",
    ...
    ...
    "response": {
      "error": {
        "message": "Rate Limit Exceeded",
        "code": 403,
        "errors": [
          {
            "message": "Rate Limit Exceeded",
            "reason": "rateLimitExceeded",
            "domain": "usageLimits"
          }
        ]
      },
      "@type": "type.googleapis.com/error"
    },
    "resourceLocation": {
      "currentLocations": [
        "LOCATION"
      ]
    },
    ...
    ... 

    错误详情包含以下值:

    • METHOD_NAME:服务方法或操作的名称。对于 API 调用,此名称应该是 API 方法的名称。

    • LOCATION:资源的位置。这可以是区域、可用区或全球。例如,条目 currentLocations: "us-central1"(区域级)或 currentLocations: "us-central1-a" 表示区域为 "us-central1"currentLocations: "global"

  3. 从错误日志中找出关联的 methodName 值。此名称表示超出速率限制的 API 方法,例如:v1.compute.instances.stop

  4. 在审核日志中找出相关位置。

  5. 检查 Concurrent operations per project 配额和限制。

    控制台

    1. 在 Google Cloud 控制台中,进入配额页面。

      转到“配额”

      配额页面列出了项目的配额用量和限制。默认情况下,列表会将您用量最高的配额显示在最前面,便于您发现哪些资源用量有超出限制的风险。

    2. 如需过滤列表并查看任何特定配额的用量和限制,请在过滤条件字段中选择配额指标

      例如,您可以按名称 Concurrent global operations per project operation type 选择配额,也可以选择 Service: Compute Engine APItype: System Limit 和关键字 concurrent 来列出所有并发操作配额。过滤可提供并发配额的列表。在此列表中,您可以搜索受影响的配额。如需过滤特定操作的配额,请将维度添加到过滤条件查询,然后选择操作类型(在审核日志中显示为 methodName)。

      例如,选择 instances_stop 可查看 instances.stop 操作的配额用量和限制。

      如需过滤特定区域的配额,请将维度添加到过滤条件查询,然后选择区域(在审核日志中显示为 currentLocations)。

      例如,选择 us-central1 可查看 us-central1 区域的配额用量和限制。

      您可以同时使用区域操作类型过滤条件,查看特定区域中特定操作的配额用量和限制。

    gcloud

    您可以使用 Google Cloud CLI 查看并发操作配额的用量和限制。

    如需使用此方法,请确保您已安装 Alpha 版命令组件。如果您使用 Cloud Shell 与 Google Cloud进行交互,则系统会为您安装 Google Cloud CLI。

    如需查看操作配额,请使用以下命令:

    gcloud alpha services quota list \
      --service=compute.googleapis.com \
      --consumer=projects/PROJECT_ID
    

    PROJECT_ID 替换为您要查看其配额的项目的 ID。

    这些配额通常分为两种类别:

    • 全球性或区域性
    • 每个项目或每个项目每种操作类型

    如需了解详情,请参阅并发操作配额组

  6. 查看配额的用量图表。如果用量在错误日志记录期间接近或高于配额限制,则表示已超出配额或系统限制。

    如需查看显示当前用量和峰值用量的图表,请前往相应配额,然后点击 监控。您可能需要向右滚动到表格末尾。

    监控图表可确认 rateLimitExceeded 错误的原因并显示特定配额/限制。如果当前值高于限制值,则表示已超出系统限制。由于系统限制无法修改,我们建议您遵循以下最佳实践来减少并发操作数量。

    以下是一些最佳实践: