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 コンソールで、[割り当て] ページに移動します。

      [割り当て] に移動

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

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

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

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

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

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

      フィルタ regionoperation_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 エラーの原因を確認します。現在の値が上限値を超えている場合は、システムの上限を超えていることを意味します。システムの上限は変更できないため、同時実行オペレーションの数を減らすには、次のベスト プラクティスをおすすめします。

    ベスト プラクティスの例を次に示します。