Compute Engine の同時実行オペレーションの割り当てに関するトラブルシューティング


このドキュメントでは、rateLimitExceeded エラーが原因で発生する Compute Engine の同時実行オペレーションの上限に関するトラブルシューティングの方法について説明します。

rateLimitExceeded エラーの原因を特定するには、次のトラブルシューティングの手順に沿って操作します。

  1. Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。

    [ログ エクスプローラ] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [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 Console で、[割り当て] ページに移動します。

      [割り当て] に移動

      [割り当て] ページ。プロジェクトの割り当て使用量と上限が一覧表示されます。デフォルトでは、最も使用されている割り当てが最初に表示されるようにリストが並べ替えられます。これは、超過する恐れのある上限を確認するのに役立ちます。

    2. リストをフィルタリングし、特定の割り当ての使用量と上限を表示するには、[フィルタ] フィールドで [割り当て] または [指標] を選択します。

      たとえば、Concurrent global operations per project operation type という名前の割り当てを選択するか、Service: Compute Engine APItype: System Limit、キーワード concurrent を選択して、すべての同時オペレーションの割り当てを一覧表示します。フィルタリングすると、同時実行割り当てが一覧表示されます。このリストから、影響を受ける割り当てを探すことができます。特定のオペレーションの割り当てをフィルタするには、フィルタクエリに [ディメンション] を追加し、[operation_type](監査ログでは methodName と表示されます)を選択します。

      たとえば、instances_stop を選択すると、instances.stop オペレーションの割り当て使用量と上限が表示されます。

      特定のリージョンの割り当てをフィルタするには、フィルタクエリに [ディメンション] を追加し、[region](監査ログでは currentLocations と表示されます)を選択します。

      たとえば us-central1 を選択すると、us-central1 リージョンの割り当て使用量と上限が表示されます。

      フィルタ [region] と [operation_type] を一緒に使用すると、特定のリージョンにおける特定のオペレーションの割り当て使用量と上限を表示できます。

    gcloud

    Google Cloud CLI を使用して、同時実行オペレーションの割り当ての使用量と上限を表示できます。

    この方法を使用するには、アルファ版コマンド コンポーネントがインストールされていることを確認してください。Cloud Shell を使用して Google Cloudを操作している場合は、Google Cloud CLI がインストールされています。

    オペレーション割り当てを表示するには、次のコマンドを使用します。

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

    PROJECT_ID は、割り当てを表示するプロジェクトの ID に置き換えます。

    一般にこれらの割り当ては次の 2 つのカテゴリに分類されます。

    • グローバル / リージョン
    • プロジェクトごと、またはオペレーション タイプ別のプロジェクトごと

    詳細については、同時オペレーション割り当てグループをご覧ください。

  6. 割り当ての使用状況グラフを確認します。エラーログの期間中に使用量が割り当て上限に近づいているか、上限を超えている場合は、割り当て上限またはシステム上限を超えていることを意味します。

    現在の使用量とピーク使用量を示すグラフを表示するには、割り当てに移動し、[モニタリング] をクリックします。場合によっては、表の右端までスクロールする必要があります。

    モニタリング グラフで、特定の割り当て / 上限と rateLimitExceeded エラーの原因を確認します。現在の値が上限値を超えている場合は、システムの上限を超えていることを意味します。システムの上限は変更できないため、同時実行オペレーションの数を減らすために次のベスト プラクティスを行うことをおすすめします。

    ベスト プラクティスには次のようなものがあります。