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

このページでは、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 は、コピーするログを定義するフィルタに置き換えます。

    --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 では、ログのコピー、ログスコープの定義、またはログ エクスプローラまたは [ログ分析] ページを介して発行されたクエリには課金されません。

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