Cloud Logging から消失した Apigee ログのトラブルシューティング

現在、ApigeeApigee ハイブリッドのドキュメントを表示しています。
このトピックに対応する Apigee Edge のドキュメントはありません。

症状

一般的なユースケースとして、Apigee API ログの Cloud Logging への送信があります。これは通常、MessageLogging ポリシーまたは ServiceCallout ポリシーを使用して行われます。いずれの場合も、Apigee では Cloud Logging API を使用してログを書き込みます。

場合によっては、Cloud Logging に Apigee API のログが表示されないことがあります。

エラー メッセージ

エラー メッセージは表示されません。

考えられる原因

原因 説明 トラブルシューティング手順の適用対象
Cloud Logging API が有効になっていない Apigee 組織の Google Cloud プロジェクトで Cloud Logging API が有効になっていることを確認します。 Apigee と Apigee ハイブリッド
プロキシ サービス アカウントが正しく構成されていない デプロイ時(Apigee)またはランタイム構成(Apigee ハイブリッド)で使用されるサービス アカウントが削除されたか、正しく構成されていない可能性があります。 Apigee と Apigee ハイブリッド
ポリシー構成のプロジェクト名が正しくない ポリシー構成のプロジェクト名が、Apigee 組織に関連付けられているプロジェクト名と同じではありません。 Apigee と Apigee ハイブリッド
ランタイム サービス アカウントにロールまたは権限がない Apigee ハイブリッドの場合は、ランタイム サービス アカウントにサービス アカウント トークン作成者のロールがあることを確認します。これは Google 認証を使用するために必要です。 Apigee ハイブリッド
ログエントリのサイズが Cloud Logging の上限を超過 Cloud Logging のエントリサイズは 256 KB に制限されています。この上限は変更できません。 Apigee と Apigee ハイブリッド
Cloud Logging API の 1 分あたりの書き込みリクエスト数の割り当てが枯渇 Google Cloud プロジェクト内での、Cloud Logging API の 1 分あたりの書き込みリクエスト数の割り当て値が超過しないように注意してください。 Apigee と Apigee ハイブリッド

原因: Cloud Logging API が有効になっていない

診断

Cloud Logging API が有効になっていることを確認します。Google Cloud コンソールで有効な API とサービスを一覧表示する方法については、有効なサービスを一覧表示するをご覧ください。

解決策

Cloud Logging API が有効になっていない場合は、サービスの有効化の手順で有効にします。API が有効になるまで数分かかることがあります。

Cloud Logging API が有効になっていないために Cloud Logging でログが表示されない問題を解決できない場合は、診断情報の収集が必要な場合をご覧ください。

原因: プロキシ サービス アカウントが正しく構成されていない

診断

Apigee

  1. サービス アカウント名を見つける。
    1. Apigee UI を使用する
      1. [Develop] > [API Proxies] をクリックし、プロキシ名をクリックする。例: TurboBooks
      2. [Deployments] に、[Service Account] の名前が表示される。

    2. Apigee API の使用:

      次の Apigee API 呼び出しを発行します。

      curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/environments/ENV_NAME/apis/PROXY_NAME/revisions/REVISION_NUMBER/deployments"

      次のように置き換えます。

      • ORG_NAME: 組織の名前。例: apigee-example-org
      • ENV_NAME: 環境の名前。例: myenv
      • PROXY_NAME: プロキシの名前。例: TurboBooks
      • REVISION_NUMBER: リビジョン番号。例: 4

      次に例を示します。

      curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/apigee-example-org/environments/myenv/apis/TurboBooks/revisions/4/deployments"

      次のようなバージョン名が返されます。

      {
        "environment": "myenv",
        "apiProxy": "TurboBooks",
        "revision": "4",
        "deployStartTime": "1687408163394",
        "state": "READY",
        "instances": [
          {
            "instance": "apiginstance",
            "deployedRevisions": [
              {
                "revision": "4",
                "percentage": 100
              }
          .
          .
          .
          .
        "serviceAccount": "projects/-/serviceAccounts/envsa-79@apigee-example-org.iam.gserviceaccount.com"
      }

      ここで、serviceAccount は API プロキシに関連付けられたサービス アカウントです。

  2. このプロキシ サービス アカウントについて、以下を確認します。
    1. このサービス アカウントは、Apigee 組織の作成に使用したものと同じ Google Cloud プロジェクトに属している必要があります。例: apigee-example-org.
    2. プロキシをデプロイするユーザーには、このサービス アカウントに対する iam.serviceAccounts.actAs 権限が付与されています。
    3. プロキシ サービス アカウントには、Cloud Logging サービスを呼び出すために必要な権限が付与されます。

Apigee ハイブリッド

Apigee ハイブリッドでは、Apigee に記載された手順に加えて、overrides.yaml ファイルを開いて、各環境で Google 認証に必要なサービス アカウントが指定されていることを確認します。次に例を示します。

envs:
  - name: "ENVIRONMENT_NAME"
    serviceAccountPaths:
      runtime: "KEY_FILE_PATH"

次のように置き換えます。

  • ENVIRONMENT_NAME: 環境の名前。例: myenv
  • KEY_FILE_PATH: ランタイム サービス アカウント キー ファイルのパス。通常は、インストール時のサービス アカウントを作成するでサービス アカウントを作成しています。

解決策

  1. サービス アカウントが Apigee 組織の作成に使用した Google Cloud プロジェクトにない場合は、同じ Google Cloud プロジェクトでサービス アカウントを作成して使用する必要があります。これは Google 認証の使用でも説明されています。
  2. プロキシをデプロイするユーザーに、このサービス アカウントに対する iam.serviceAccounts.actAs 権限が付与されていない場合は、単一のロールを付与するをご覧ください。
  3. プロキシ サービス アカウントに Cloud Logging サービスの呼び出しに必要な権限がない場合は、単一のロールを付与するをご覧ください。

このドキュメントの手順で、Apigee と Apigee ハイブリッドのプロキシ サービス アカウントが正しく構成されないという問題が解決されない場合は、診断情報の収集が必要な場合をご覧ください。

ポリシー構成のプロジェクト名が正しくない

診断

MessageLogging ポリシーを使用して、Cloud Logging にログを送信する場合:

  1. Apigee UI で、[Develop] > [API Proxies] > [API proxy name] > [Develop] タブをクリックします。
  2. [Code] ペインで、<CloudLogging> 要素を見つけます。
  3. <LogName> の値が正しいプロジェクト名であることを確認します。
    <CloudLogging>
      <LogName>projects/PROJECT_ID/logs/LOG_ID</LogName>
    </CloudLogging>

    次のように置き換えます。

    • PROJECT_ID: Google Cloud プロジェクト ID。例: apigee-example-org
    • LOG_ID: Cloud Logging のログ ID。例: apigee-logs

解決策

<LogName> 要素の値が正しい値でない場合は、正しい値に更新します。

このドキュメントの手順で問題が解決しない場合は、診断情報の収集が必要な場合をご覧ください。

原因: ランタイム サービス アカウントにロール / 権限がない

診断

ランタイムがプロキシ サービス アカウントの権限を借用できることを確認します。

次の gcloud コマンドを実行して、ランタイム サービス アカウントにプロキシ サービス アカウントに対する iam.serviceAccountTokenCreator ロールがあるかどうかを確認します。

gcloud iam service-accounts get-iam-policy PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com

次のように置き換えます。

  • PROXY_SA_NAME: プロキシ サービス アカウントの名前。例: envsa-79
  • PROJECT_ID: Google Cloud プロジェクト ID。例: apigee-example-org

次のようなバージョン名が返されます。

- members:
  - serviceAccount:RUNTIME_SA_NAME@PROJECT_ID.iam.gserviceaccount.com
  role: roles/iam.serviceAccountTokenCreator

次のように置き換えます。

RUNTIME_SA_NAME: ランタイム サービス アカウントの ID。例: apigee-runtime

次に例を示します。

gcloud iam service-accounts get-iam-policy envsa-79@apigee-example-org.iam.gserviceaccount.com
  bindings:
  - members:
    - user:222larabrown@gmail.com
    role: roles/iam.serviceAccountAdmin
  - members:
    - serviceAccount:apigee-runtime@apigee-example-org.iam.gserviceaccount.com
    role: roles/iam.serviceAccountTokenCreator
  - members:
    - user:222larabrown@gmail.com
    role: roles/iam.serviceAccountUser
  etag: BwX-shcrL3o=
  version: 1

出力に iam.serviceAccountTokenCreator ロールと想定されたメンバーが表示されない場合は、解決策の手順に沿って正しいロールを付与します。

解決策

次の gcloud コマンドを実行して、ランタイム サービス アカウントにプロキシ サービス アカウントの iam.serviceAccountTokenCreator ロールを付与します。

gcloud iam service-accounts add-iam-policy-binding \
PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
--member=serviceAccount:RUNTIME_SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
--role=roles/iam.serviceAccountTokenCreator

次のように置き換えます。

  • PROXY_SA_NAME: プロキシ サービス アカウントの名前。例: envsa-79
  • PROJECT_ID: Google Cloud プロジェクト ID。例: apigee-example-org
  • RUNTIME_SA_NAME: ランタイム サービス アカウントの ID。例: apigee-runtime

このドキュメントの手順で問題が解決しない場合は、診断情報の収集が必要な場合をご覧ください。

原因: ログエントリのサイズが、ロギングで許可された上限を超えている

診断

このドキュメントで説明されている他の原因に問題がないことを確認した後、Cloud Logging で一部のログが表示されない場合、Apigee から送信されるログエントリのサイズが、Cloud Logging のログサイズ エントリのハードリミットである 256 KB を超えている可能性があります。詳細については、Logging の使用量上限をご覧ください。

解決策

これは Cloud Logging で設定された構成不能な上限であり、現時点でわかっている唯一の回避策は、Apigee から送信されたログエントリのサイズを 256 KB 未満に保つことです。この上限を超える可能性があるペイロードをログしている場合は、このペイロードをログに記録しないか、上限に達すると一部のトランザクションがログに記録されないことを理解してください。

このドキュメントの手順で問題が解決しない場合は、診断情報の収集が必要な場合をご覧ください。

原因: Cloud Logging API の 1 分あたりの書き込みリクエスト数の割り当てが枯渇

診断

デバッグ セッションでは確認できるリクエストが、ログ エクスプローラには記録されず、一方でロードバランサのログには存在するという状況が発生することがあります。

確認されたメッセージの消失は、プロジェクト内の割り当てが枯渇していることが原因である可能性があります。Cloud Logging API には、1 分あたり 120,000 件の書き込みリクエストというレート制限が適用されます。この割り当てを超えると、メッセージが破棄される可能性があります。詳細については、割り当ての表示と管理をご覧ください。

これらの割り当ては、Google Cloud コンソール内で増やすことができます。これは、割り当ての増加に関するドキュメントに沿ってお客様自身で行うことができます。

解決策

割り当てを増やす手順は次のとおりです。

  1. [割り当て] ページで、チェックボックスを使用して [Cloud Logging API] を選択し、[割り当てを編集] をクリックします。エラー Edit is not allowed for this quota が発生した場合は、Google Cloud カスタマーケアに連絡して、割り当ての変更をリクエストします。また、チェックボックスをクリックできるようにするために、Google Cloud プロジェクトで課金を有効にする必要があります。
  2. [割り当ての変更] パネルで、サービスを選択してビューを展開し、[新しい上限] フィールドと [リクエストの説明] フィールドに情報を入力します。[次へ] をクリックします。
  3. [連絡先情報] パネルでフォームに入力し、[リクエストを送信] をクリックします。

詳細については、割り当てと上限に関するドキュメントをご覧ください。

診断情報の収集が必要な場合

上記の手順でも問題が解決しない場合は、次の診断情報を収集して Google Cloud カスタマーケアに連絡してください。

  • Apigee 組織
  • 問題が生じている環境と API プロキシ。
  • ダウンロードしたデバッグ セッション(ここで上記のすべての情報が提供されます)。
  • Cloud Logging にログを送信する API プロキシ内の特定のポリシー名。
  • Apigee ハイブリッドの場合: overrides.yaml ファイル。