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

このページでは、Cloud Logging ログバケットにすでに保存されているログエントリを手動で Cloud Storage バケットにコピーする方法について説明します。コピー オペレーションでは、ログバケットと Cloud Storage バケットが同じ Google Cloud プロジェクトに存在する必要はありません。

次のような場合は、ログバケットから Cloud Storage バケットにログエントリをコピーすることをおすすめします。

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

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

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

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

制限事項

ログエントリのコピーには、次の制限が適用されます。

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

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

準備

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

  • ログエントリのコピーに必要な権限を取得するには、コピー元のログバケットを含むプロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

    • コピー オペレーションを実行する: Logging 管理者 roles/logging.admin
    • コピー オペレーションのステータスを表示および管理するには: ログ構成書き込み roles/logging.configWriter

  • Cloud Storage にログエントリを書き込むために必要な権限を取得するには、Cloud Storage バケットを含むプロジェクトに対するストレージ オブジェクト作成者 roles/storage.objectCreator)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 は、コピーするログを定義するフィルタに置き換えます。

    --log-filter フラグを省略すると、ログバケット内のすべてのログエントリが Cloud Storage バケットにコピーされます。

  • 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 > "2024-07-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 メタデータはオペレーションに適用されません。別の例として、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: `2024-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 では、ログのコピー、ログスコープの定義、またはログ エクスプローラまたは [ログ分析] ページを介して発行されたクエリには課金されません。

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