オブザーバビリティ分析を使用するためのバケットのアップグレードのトラブルシューティング

ログバケットをアップグレードしてオブザーバビリティ分析を使用できるようにすると、SQL クエリを実行して、そのバケットに保存されているログデータを分析できます。ログバケットのアップグレードが失敗または停止した場合は、このドキュメントを使用して、同期検証エラー、非同期プロビジョニング エラー、ブロックされたオペレーションを診断して解決できます。ログバケットをアップグレードする方法については、オブザーバビリティ分析を使用するようにバケットをアップグレードするをご覧ください。

アップグレード プロセスについて

Cloud Logging では、オブザーバビリティ分析を使用するようにログバケットをアップグレードするコマンドを発行すると、2 段階のプロセスが使用されます。

  1. 同期検証: Logging はコマンド パラメータを検証します。検証に失敗すると、コマンドはすぐにエラーを返します。
  2. 非同期プロビジョニング: 検証が成功すると、Logging は長時間実行オペレーションを開始します。通常、このオペレーションは 10 分以内に完了します。

ログバケットのアップグレードは監査対象のオペレーションです。長時間実行オペレーションのステータスを確認するか、エラーの詳細を確認するには、Operations.GetOperation メソッドを使用してオペレーションをポーリングするか、監査ログをクエリします。

アップグレード中のログバケットの状態

アップグレード リクエストの同期検証が成功すると、Logging はログバケットの状態を ACTIVE から UPDATING に変更し、長時間実行オペレーションを開始します。オペレーションが完了すると、ログバケットの状態は ACTIVE に戻ります。

ログバケットの現在の状態を確認するには、gcloud logging buckets describe コマンドを実行します。

gcloud logging buckets describe LOG_BUCKET_ID \
  --location=LOCATION_ID \
  --project=PROJECT_ID

コマンドを実行する前に、次のように置き換えます。

  • PROJECT_ID: プロジェクトの ID。
  • LOCATION_ID: バケットのロケーション。
  • LOG_BUCKET_ID: バケットの ID。

レスポンスの lifecycleState フィールドに、バケットの状態が表示されます。

description: Default bucket
lifecycleState: ACTIVE
name: projects/PROJECT_ID/locations/LOCATION_ID/buckets/LOG_BUCKET_ID
retentionDays: 30

Google Cloud コンソールで、ログバケットが UPDATING 状態の場合:

  • [ログストレージ] ページの [オブザーバビリティ分析を使用可能] 列に、長時間実行オペレーションがアクティブな間は [アップグレード中…] と表示されます(コンソールがオペレーション ステータスを取得できない場合は [アップグレードの対象外] と表示されます)。
  • [バケットの編集] パネルと [ログバケットのアップグレード] パネルで、バケットをアップグレードするオプションが無効になり、ツールチップに「保留中の更新はありません」と表示されます。

VPC Service Controls 境界に関する考慮事項

VPC Service Controls の境界内のログバケットのアップグレードは、境界によって API がブロックされているか、プロジェクト間の構成が原因で失敗することがあります。

境界で許可する必要がある API

VPC Service Controls の境界内にあるログバケットをアップグレードするには、境界で次のサービスを制限しないでください。

  • logging.googleapis.com
  • cloudkms.googleapis.com: 顧客管理の暗号鍵(CMEK)を使用するログバケットをアップグレードするために必要です。

これらのサービスを制限すると、次の動作が発生します。

  • logging.googleapis.com 制限付き: アップグレード コマンドは PERMISSION_DENIED エラーで直ちに失敗し、ログバケットは ACTIVE 状態のままになります。

    解決策: このセクションの冒頭に記載されている API を許可するように境界を更新してから、コマンドを再試行します。

  • cloudkms.googleapis.com 制限付き: CMEK で保護されたログバケットの場合、長時間実行オペレーションは INTERNAL エラーで失敗し、ログバケットは ACTIVE 状態に戻ります。

    解決策: このセクションの冒頭に記載されている API を許可するように境界を更新してから、コマンドを再試行します。

境界をまたぐ CMEK 構成

ログバケットと Cloud KMS 鍵が異なる VPC Service Controls 境界にある場合、ID ベースの上り(内向き)ルールまたは下り(外向き)ルールを使用して、Cloud Key Management Service 鍵に境界を越えたアクセス権を付与することはできません。

この構成で、上り(内向き)ルールに Logging サービス アカウントの ID のみを指定すると、次のようになります。

  • 非同期プロビジョニングが INTERNAL エラーで失敗し、ログバケットが ACTIVE 状態に戻ります。
  • Cloud KMS プロジェクトのポリシー監査ログに失敗が記録されます。この監査ログは、google.cloud.kms.v1.KeyManagementService.Encrypt メソッドが NO_MATCHING_ACCESS_LEVEL 上り(内向き)違反で失敗したことを示し、BigQuery 暗号化サービス アカウント用であることを示しています。

解決策: Cloud KMS 境界へのアクセスを許可する上り(内向き)ルールで、identityType を ANY_IDENTITY に設定し、ログバケットを含むプロジェクトをソースリソースとして指定します。

- ingressFrom:
    identityType: ANY_IDENTITY
    sources:
    - resource: projects/PROJECT_NUMBER
  ingressTo:
    operations:
    - serviceName: cloudkms.googleapis.com
      methodSelectors:
      - method: '*'
    resources:
    - projects/KMS_PROJECT_NUMBER

上の例では、次のように置き換えます。

  • PROJECT_NUMBER: ログバケットを含むプロジェクトのプロジェクト番号。
  • KMS_PROJECT_NUMBER: Cloud KMS 鍵を含むプロジェクトのプロジェクト番号。

下り(外向き)ルールも指定する場合は、identityType: ANY_IDENTITY も設定する必要があります。

監査ログをクエリしてエラー情報を取得する

このセクションのクエリは、ログバケットの更新またはアップグレード時にエラーを報告するログエントリを検索するのに役立ちます。これらのクエリは、ログ エクスプローラで使用します。

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

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

検索バーを使用してこのページを検索する場合は、小見出しが [Logging] の結果を選択します。

プロジェクト内の失敗したすべてのバケットの更新またはアップグレードをクエリする

log_id("cloudaudit.googleapis.com/activity")
protoPayload.serviceName="logging.googleapis.com"
(protoPayload.methodName="google.logging.v2.ConfigServiceV2.UpdateBucket" OR
 protoPayload.methodName="google.logging.v2.ConfigServiceV2.UpdateBucketAsync")
severity=ERROR

Google Cloud コンソールを使用して、オブザーバビリティ分析を使用するようにログバケットをアップグレードし、リンクされた BigQuery データセットを作成する場合は、次のクエリを使用します。

log_id("cloudaudit.googleapis.com/activity")
(protoPayload.serviceName="logging.googleapis.com" OR
 protoPayload.serviceName="bigquery.googleapis.com")
(protoPayload.methodName="google.logging.v2.ConfigServiceV2.UpdateBucket" OR
 protoPayload.methodName="google.logging.v2.ConfigServiceV2.UpdateBucketAsync" OR
 protoPayload.methodName="google.cloud.bigquery.v2.DatasetService.InsertDataset")
severity=ERROR

前のクエリの結果には、リンクされた BigQuery データセットの作成に失敗したことを示すログエントリが含まれています。エラー メッセージは、失敗の原因を解決するのに役立ちます。

特定のバケットの更新またはアップグレードの失敗をクエリする

次のクエリを使用する前に、次のように置き換えます。

  • PROJECT_ID: プロジェクトの ID。
  • LOCATION_ID: バケットのロケーション。
  • LOG_BUCKET_ID: バケットの ID。
log_id("cloudaudit.googleapis.com/activity")
protoPayload.serviceName="logging.googleapis.com"
(protoPayload.methodName="google.logging.v2.ConfigServiceV2.UpdateBucket" OR
 protoPayload.methodName="google.logging.v2.ConfigServiceV2.UpdateBucketAsync")
protoPayload.resourceName="projects/PROJECT_ID/locations/LOCATION_ID/buckets/LOG_BUCKET_ID"
severity=ERROR

長時間実行オペレーションの失敗をクエリする

log_id("cloudaudit.googleapis.com/activity")
protoPayload.serviceName="logging.googleapis.com"
protoPayload.methodName="google.logging.v2.ConfigServiceV2.UpdateBucketAsync"
operation.last=true
severity=ERROR

INVALID_ARGUMENT (3)

INVALID_ARGUMENT(3)エラーコードとともに提供されるエラー メッセージには、エラーを解決するのに十分な情報が含まれています。このため、このセクションでは、考えられるすべてのエラー メッセージを列挙しているわけではありません。

リソース名に関する問題

リソース名の問題を解決するには、projects/PROJECT_ID/locations/LOCATION_ID/buckets/LOG_BUCKET_ID 形式の有効なバケット リソース名を渡します。

リソース名の長さが長さの上限内であることを確認します。

更新マスクに関する問題

update_mask または Update mask というテキストを含むエラー メッセージは、値が欠落しているか、形式が正しくないことを示します。

この問題を解決するには、API コマンドで update_mask を指定し、値を "analytics_enabled" に設定します。

ログバケットの適格性に関する問題

  • ロックされた _Default ログバケットまたはロックされたカスタム バケットをアップグレードすることはできません。_Required バケットは、ロックされている間もアップグレードできます。

    ログバケットがロックされている場合、エラー メッセージは "Bucket is not eligible for an upgrade to enable analytics" です。

    このエラーを解決するには、分析が有効な新しいバケットを作成し、そこにログを転送します。

  • バケットに他の変更を加えているときに、ログバケットをアップグレードすることはできません。たとえば、ログバケットをアップグレードしてバケットの説明を更新することはできません。

    このエラーを解決するには、update_mask に analytics_enabled のみを含む別の UpdateBucket リクエストまたは UpdateBucketAsync リクエストを送信し、別のリクエストで他のログバケット フィールドを更新します。

  • 組織、フォルダ、請求先アカウントのログバケットをアップグレードすることはできません。アップグレードできるのは、親が Google Cloud プロジェクトであるログバケットのみです。

  • すでにアップグレードされているログバケットや、アップグレード中のログバケットをアップグレードすることはできません。

    GetBucket または ListOperations を使用して、アップグレードがすでに完了しているか、進行中かを確認します。

Cloud KMS 鍵の問題

エラー メッセージ:

  • "Not a valid key reference (wrong type): 'KMS_KEY_NAME'"
  • "Name "KMS_KEY_NAME" is missing the COMPONENT component. Expected the form projects/[PROJECT_ID]/locations/[ID]/keyRings/[ID]/cryptoKeys/[ID]"

解決策: バケットをアップグレードする前に、ログバケットの cmek_settings.kms_key_name を有効な Cloud KMS CryptoKey リソース名に更新します。鍵バージョン CryptoKeyVersion ではなく、リソース名を更新する必要があります。

無効な引数メッセージ

メッセージ「"Request contains an invalid argument."」が表示された場合は、CMEK 対応のログバケットに対して次の操作を試してください。

  • バケットの CMEK 構成に関連付けられている Logging サービス アカウントが初期化されていることを確認します。
  • バケットの保持期間が正の値であることを確認します。

サービス アカウントの名前を確認するには、ログバケット、ロケーション、プロジェクト ID を更新した後、次のコマンドを実行します。

gcloud logging buckets describe LOG_BUCKET_ID --location=LOCATION_ID --project=PROJECT_ID

サービス アカウントは、プロジェクト、フォルダ、または組織に存在する可能性があります。

DEADLINE_EXCEEDED (4)

UpdateBucketAsync を使用して、Operations.GetOperation メソッドを使用して返された長時間実行オペレーションをポーリングするか、バックグラウンド アップグレードの完了後に GetBucket を呼び出します。

NOT_FOUND (5)

これらのエラーを解決するには、次の手順を試してください。

  • プロジェクト ID またはプロジェクト番号が正しく、プロジェクトがアクティブであることを確認します。プロジェクトの削除が保留中の場合は、まずプロジェクトを復元します。
  • 指定したロケーションが Logging でサポートされていることを確認します。
  • ログバケット ID とロケーションがプロジェクトに存在し、ターゲット バケットが _CloudTrace ではないことを確認します。

PERMISSION_DENIED (7)

権限拒否エラーは、リクエストされたアクションが許可されていないことを示します。

ユーザー権限がありません

ログバケットをアップグレードするには、呼び出し元に logging.buckets.update 権限(roles/logging.configWriter や roles/logging.admin など)を含む Identity and Access Management(IAM)ロールがあることを確認し、カスタム組織ポリシーが更新をブロックしていないことを確認します。

組織のポリシーの制限

エラー メッセージ "Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: [ID]" を解決するには、VPC Service Controls の境界で logging.googleapis.com サービスが制限されていないことを確認します。詳細については、VPC Service Controls の境界に関する考慮事項をご覧ください。

リージョン エンドポイントの問題

リージョン エンドポイントが指定されている場合に権限拒否エラーを解決するには、グローバル エンドポイント(logging.googleapis.com)またはログバケットのロケーションに一致するリージョン エンドポイントにリクエストを送信します。

RESOURCE_EXHAUSTED (8)

このエラーを解決するには、処理中のプロビジョニング オペレーションが完了するまで待ってから、指数バックオフを使用して再試行します。

FAILED_PRECONDITION (9)

これらのエラーを解決するには、次の手順を試してください。

  • ログバケットが ACTIVE 状態であることを確認します。削除中のログバケット、または更新オペレーションやプロビジョニング オペレーションが進行中のログバケットはアップグレードできません。

    ログバケットの状態を確認する方法については、アップグレード中のログバケットの状態をご覧ください。

  • ロックされたログバケットはアップグレードできません。

  • 一般的なメッセージ "Precondition check failed." は、バケットの状態が ACTIVE ではないことを示します。進行中のオペレーションが完了するまで待ってから、アップグレードを再試行します。

INTERNAL (13)

エラー メッセージ:

  • 長時間実行オペレーション(Operations.GetOperation): "Failed to create analytics enabled bucket."
  • Cloud Audit Logs と同期 UpdateBucket: "Internal error encountered."

解決策: 次のことを試してください。

  • CMEK 対応のログバケットの場合、Cloud KMS 鍵が有効になっていること、バケットの CMEK 構成に関連付けられている Logging サービス アカウントに鍵に対する roles/cloudkms.cryptoKeyEncrypterDecrypter ロールがあること、BigQuery から鍵にアクセスできること、組織のポリシーまたは VPC Service Controls の境界で Cloud KMS へのアクセスがブロックされていないことを確認します。

    サービス アカウントの名前を確認するには、次のコマンドを実行します。

    gcloud logging buckets describe LOG_BUCKET_ID --location=LOCATION_ID --project=PROJECT_ID
    

    サービス アカウントは、プロジェクト、フォルダ、または組織に存在する可能性があります。

  • バケット(logging.views.list)の既存のログビューを調べて、フィルタが有効であることを確認し、バケットのアップグレードを再試行します。

  • ログバケットが削除されていないこと(DELETE_REQUESTED)、バケットで競合する管理アクションが発生していないことを確認してから、アップグレードを再試行してください。

  • 一時的な BigQuery ストレージ データセットまたは検索インデックスの作成エラーが解決した後、またはダウンストリームの BigQuery、Cloud KMS、プロビジョニング サービスの可用性が復元された後に、ログバケットのアップグレードを再試行します。エラーが解決しない場合は、Cloud カスタマーケアにお問い合わせください。

UNAVAILABLE (14)

"The service is currently unavailable." というメッセージが表示された場合は、指数バックオフを使用して UpdateBucketAsync リクエストを再試行します。