過去にさかのぼってログをバッチ処理および転送する

このページでは、Cloud Logging ログバケットに保存されているログエントリを Cloud Storage バケットに手動でコピーする方法について説明します。次のような場合は、ログバケットから Cloud Storage バケットにログエントリをコピーすることをおすすめします。

  • ログエントリを Logging に保存する前に、Cloud Storage にルーティングし忘れた場合です。
  • Logging の外部の監査者とログエントリを共有したい。
  • Cloud Storage のスクリプトを使用してログエントリを分析したい。

ログエントリを Cloud Storage にコピーする場合、ログエントリはコピー元のログバケットにも残ります。

コピー オペレーションは、シンク(すべての受信ログエントリを Cloud Storage バケットを含む事前選択されたサポートされているストレージの宛先に自動的に送信します)に代わるものではありません。ログエントリを Cloud Storage バケットに保存することがわかっている場合は、シンクを使用します。

ログをコピーしてから、オペレーションの管理とモニタリングを行うには、Google Cloud CLI を使用する必要があります。

制限事項

ログエントリをコピーする場合は、次の制限事項が適用されます。

  • ログは Cloud Storage バケットにのみコピーできます。他のリンク先は使用できません。

  • CMEK が構成されているログバケットからログをコピーすることはできません。

準備

ログをコピーから始める前に、次のことを行います。

  • Logging からログエントリをコピーして Cloud Storage に書き込むために必要な権限を取得するには、プロジェクトに対する次の IAM ロールの付与を管理者に依頼してください。

  • コピー オペレーションのステータスを表示および管理するために必要な権限を取得するには、プロジェクトに対するログ構成書き込みroles/logging.configWriter)IAM ロールの付与を管理者に依頼してください。

ログエントリのコピー

Logging は、コピー オペレーションの開始時にログバケットに保存されているログエントリのみをコピーします。コピー オペレーションの開始後にログバケットに保存されたログエントリは、Cloud Storage にコピーされません。

ログエントリを Cloud Storage にコピーするには、次の情報が必要です。

  • コピー元のログバケットの ID とロケーション。 ログバケット ID とその場所を取得するには、gcloud CLI コマンド gcloud logging buckets list を使用します。
  • コピー先の Cloud Storage バケットの名前。Cloud Storage バケット名を取得する方法については、Cloud Storage バケット情報の取得をご覧ください。
  • コピーするログエントリのフィルタ

ログエントリをコピーするには、gcloud logging copy コマンドを実行します。

gcloud logging copy BUCKET_ID storage.googleapis.com/CLOUD_STORAGE_BUCKET_NAME
--location=LOCATION [--log-filter=FILTER] --project=PROJECT_ID

前述のコマンドを実行する前に、次のようにしてください。

  • BUCKET_ID は、ログバケットの名前に置き換えます。
  • CLOUD_STORAGE_BUCKET_NAME は Cloud Storage バケットの名前で置き換えてください。
  • LOCATION は、ログバケットのロケーションに置き換えます。
  • (省略可): FILTER は、コピーするログを定義するフィルタに置き換えます。

  • PROJECT_ID は、Google Cloud プロジェクト ID に置き換えます。アクティブな gcloud CLI 構成が正しい Google Cloud プロジェクトに設定されている場合は、このフラグを省略できます。

コマンドの例:

gcloud logging copy my-log-bucket storage.googleapis.com/my-gcs-bucket \
--location=global --log-filter='timestamp > "2021-03-18T10:00:00.0Z"' \
--project=my-project

このコマンドは、バックグラウンドで動く長時間実行オペレーションを作成し、コピー オペレーションの名前とログバケットのロケーションを返します。

name: projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID

コピー オペレーションのロケーションは、ログのコピー元のログバケットのロケーションと同じです。

コピー オペレーションの表示と管理

コピー オペレーションを表示および管理するには、gcloud logging operations コマンドを使用します。これにより、オペレーションの一覧表示、表示、キャンセルを行えます。

次のコマンドでは、オペレーションのロケーションを指定する必要があります。ログバケットのロケーションを使用します。ログバケットのロケーションを確認する方法については、バケットの詳細を表示するをご覧ください。

コピー オペレーションの一覧表示

最近のコピー オペレーション(実行中、完了済み、失敗、キャンセル、スケジュールされたオペレーションなど)を一覧表示できます。最近のコピー オペレーションは、終了時刻から最大 30 日間にわたって結果に表示されます。

コピー オペレーションを一覧表示するには、次のコマンドを実行します。

gcloud logging operations list --location=LOCATION \
--operation-filter=request_type=CopyLogEntries \
--project=PROJECT_ID

前述のコマンドを実行する前に、次のようにしてください。

  • LOCATION は、ログのコピー元のログバケットのロケーションに置き換えます。
  • PROJECT_ID は、Google Cloud プロジェクト ID に置き換えます。

このコマンドは、オペレーション ID を含む長時間実行オペレーションに関する情報を返します。

projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID

コピー オペレーションのステータスの表示

以下のような、コピー オペレーションのステータスやメタデータを取得できます。

  • startTime: オペレーションの作成を示すタイムスタンプ。
  • endTime: オペレーションの完了を示すタイムスタンプ。
  • state: オペレーションのステータス(スケジュール済み、実行中、キャンセル、失敗、成功)。
  • cancellation: ユーザーがオペレーションのキャンセルをリクエストしたかどうか。
  • progress: オペレーションの進行状況の推定(0~100%)。
  • destination: オペレーションがログをコピーする Cloud Storage バケットの名前。
  • filter: コピーするログエントリを指定するフィルタ。
  • name: オペレーションがログをコピーするログバケットの名前。
  • logEntriesCopiedCount: オペレーションによって Cloud Storage バケットに正常にコピーされたログエントリの数。

ここに記載されているすべてのメタデータ フィールドが、すべてのコピー オペレーションに適用されるわけではありません。たとえば、コピー オペレーションがまだ実行中の場合、endtime メタデータはオペレーションに適用されません。もう 1 つの例として、gcloud logging copy コマンドを実行するときに --log-filter=FILTER フラグが使用されなかった場合、filter メタデータはオペレーションに適用されません。

コピー オペレーションに関する情報を取得するには、次のコマンドを実行します。

gcloud logging operations describe OPERATION_ID \
--location=LOCATION --project=PROJECT_ID

前述のコマンドを実行する前に、次のようにしてください。

  • OPERATION_ID は、オペレーションの ID に置き換えます。
  • LOCATION は、ログのコピー元のログバケットのロケーションに置き換えます。
  • PROJECT_ID は、Google Cloud プロジェクト ID に置き換えます。

このコマンドは、コピー オペレーションに関するメタデータを返します。たとえば、進行中のオペレーションの出力は次のようになります。

done: false
metadata:
  `@type`: type.googleapis.com/google.logging.v2.CopyLogEntriesMetadata
  progress: 75
  destination: storage.googleapis.com/my-storage-bucket-1
  source: projects/my-test-project/locations/us-central1/buckets/my-logging-bucket-2
  verb: copy
  startTime: `2023-05-23T10:52:40.039751Z`
  state: OPERATION_STATE_RUNNING
name: projects/my-test-project/locations/us-central1/buckets/my-logging-bucket-2
   </pre>

コピー オペレーションのキャンセル

実行中のコピー オペレーションはキャンセルできます。コピー オペレーションをキャンセルしても、オペレーションがキャンセルされる前にコピーされたすべてのログエントリは Cloud Storage バケットに残ります。

コピー オペレーションをキャンセルすると、Logging はキャンセルを実施する前に、進行中のプロセスをすべて終了させます。これにより、オペレーションをキャンセルした後も、一部のログエントリは Cloud Storage にコピーされる可能性があります。

コピー オペレーションをキャンセルするには、次のコマンドを実行します。

gcloud logging operations cancel OPERATION_ID \
--location=LOCATION --project=PROJECT_ID

前述のコマンドを実行する前に、次のようにしてください。

  • OPERATION_ID は、オペレーションの ID に置き換えます。
  • LOCATION は、ログのコピー元のログバケットのロケーションに置き換えます。
  • PROJECT_ID は、Google Cloud プロジェクト ID に置き換えます。

Cloud Storage でのログの表示

Cloud Storage にコピーしたログを表示して理解するには、Cloud Storage に転送されたログを表示するをご覧ください。

割り当てと上限

コピーするデータの量に関係なく、すべてのコピー オペレーションが完了するまでに少なくとも 1 時間はかかります。

大量のコピー(ペタバイトなど)をするには、--filter フラグの timestamp フィールドを使用して、複数のコピー オペレーションに分割します。

料金

Cloud Logging では、サポートされている宛先へのログの転送で料金を請求されることはありませんが、宛先での料金が発生する場合があります。_Required ログバケットを除き、Cloud Logging では、ログバケットへのログのストリーミングと、ログバケットのデフォルト保持期間よりも長いストレージの料金が請求されます。

Cloud Logging では、ログのコピー、[ログ エクスプローラ] ページまたは [ログ分析] ページを介して発行されたクエリには課金されません。

詳細については、次のドキュメントをご覧ください。