このページでは、Cloud Logging を使用してストレージ バッチ オペレーションのログを構成して表示する方法について説明します。ストレージ バッチ オペレーション ジョブは、各変換ジョブの Cloud Logging ログエントリを生成するように構成できます。各ログエントリは、オブジェクトの変換の試行に対応しています。
ストレージ バッチ オペレーションは、Cloud Logging と Cloud Storage Cloud Audit Logs の両方へのロギングをサポートしています。どちらのオプションでもストレージ バッチ オペレーションのアクションをキャプチャできますが、Cloud Logging を使用することをおすすめします。Cloud Logging は、ログ分析、リアルタイム モニタリング、高度なフィルタリングを行う一元化されたプラットフォームを備え、バッチ オペレーション アクティビティの管理と把握のための堅牢なソリューションを提供します。
始める前に
Cloud Logging にアクセスできることを確認します。Cloud Logging を使用するには、Logs Viewer (roles/logging.viewer) Identity and Access Management ロールを付与することをおすすめします。Logs Viewer (roles/logging.viewer) Identity and Access Management ロールでは、Cloud Logging データの表示に必要な Identity and Access Management 権限が付与されます。Logging のアクセス権限の詳細については、IAM によるアクセス制御をご覧ください。
IAM 権限を確認して付与するには、次の操作を行います。
- 現在のアクセス権を表示して、各プリンシパルのアクセス権を確認します。
- プロジェクトの関連するプリンシパルにロールを付与します。
ロギングの詳細を理解する
ロギングが有効になっている場合、ストレージ バッチ オペレーションは次の詳細情報をキャプチャします。
ログに記録可能なアクション: ログに記録可能なアクションの値は常に
transformです。ログに記録可能な状態: アクションごとに、次の状態のいずれかまたは両方をログに記録するように選択できます。
SUCCEEDED: アクションは成功しました。FAILED: アクションは失敗しました。
ロギングを有効にする
ロギングを有効にするには、ロギングの対象となるアクションと状態を指定します。
コマンドライン
gcloud
storage batch-operations jobs create を使用してストレージ バッチ オペレーション ジョブを作成する際に、--log-actions フラグと --log-action-states フラグを使用してロギングを有効にします。
gcloud storage batch-operations jobs create JOB_NAME \ --manifest-location=MANIFEST_LOCATION \ --delete-object \ --log-actions=transform \ --log-action-states=LOG_ACTION_STATES
ここで
JOB_NAMEは、ジョブに付ける名前です。例:my-jobMANIFEST_LOCATIONは、マニフェストの場所です。例:gs://my-bucket/manifest.csvLOG_ACTION_STATESは、ログに記録する状態のカンマ区切りのリストです。例:succeeded,failed
REST API
LoggingConfig を使用して Create a storage batch operations
job。
{ "loggingConfig": { "logActions": ["TRANSFORM"], "logActionStates": ["LOG_ACTION_STATES"], } }
ここで
LOG_ACTION_STATES は、ログに記録する状態のカンマ区切りのリストです。例: "SUCCEEDED","FAILED"
ログを表示
ストレージ バッチ オペレーションのログを表示するには、次の操作を行います。
コンソール
Google Cloud ナビゲーション メニュー menu に移動し、[ロギング] > [ログ エクスプローラ] の順に選択します。<br\></br\>
Google Cloud プロジェクトを選択します。
[アップグレード] メニューで、[以前のログビューア] から [ログ エクスプローラ] に切り替えます。
ログをフィルタしてストレージ バッチ オペレーションのエントリのみを表示するには、クエリ フィールドに「
storage_batch_operations_job」と入力して [クエリを実行] をクリックします。[クエリ結果] ペインで [日時を編集する] をクリックし、結果を返す期間を変更します。
ログ エクスプローラの使用方法については、ログ エクスプローラの使用をご覧ください。
コマンドライン
gcloud CLI を使用してストレージ バッチ オペレーションのログを検索するには、gcloud logging read コマンドを使用します。
結果をストレージ バッチ オペレーションのログに限定するフィルタを指定します。
gcloud logging read "resource.type=storage_batch_operations_job"
REST API
entries.list Cloud Logging API メソッドを使用します。
ストレージ バッチ オペレーション関連のエントリのみが含まれるように結果をフィルタするには、filter フィールドを使用します。JSON リクエスト オブジェクトのサンプルを次に示します。
{
"resourceNames":
[
"projects/my-project-name"
],
"orderBy": "timestamp desc",
"filter": "resource.type=\"storage_batch_operations_job\""
}
ここで
my-project-name はプロジェクトの名前です。
ストレージ バッチ オペレーションのログ形式
ストレージ バッチ オペレーション固有のフィールドはすべて、jsonPayload オブジェクトに格納されます。jsonPayload の内容はジョブタイプによって異なりますが、すべての TransformActivityLog エントリで共通の構造が使用されています。このセクションでは、ログの共通フィールドの概要を説明し、オペレーション固有のフィールドについて詳しく説明します。
ログの共通フィールド
すべてのログに次のフィールドが表示されます。
jsonPayload: { "@type": "type.googleapis.com/google.cloud.storagebatchoperations.logging.TransformActivityLog", "completeTime": "YYYY-MM-DDTHH:MM:SS.SSSSSSSSSZ", "status": { "errorMessage": "String indicating error", "errorType": "ENUM_VALUE", "statusCode": "ENUM_VALUE" }, "logName": "projects/PROJECT_ID/logs/storagebatchoperations.googleapis.com%2Ftransform_activity", "receiveTimestamp": "YYYY-MM-DDTHH:MM:SS.SSSSSSSSSZ", "resource": { "labels": { "location":"us-central1", "job_id": "BATCH_JOB_ID", "resource_container": "RESOURCE_CONTAINER", // ... other labels }, "type": "storagebatchoperations.googleapis.com/Job" }, // Operation-specific details will be nested here (for example, // "DeleteObject", "PutObjectHold", "RewriteObject", "PutMetadata") // Each operation-specific object will also contain the following // object: "objectMetadataBefore": { // "gcsObject": { // "bucket": "BUCKET_NAME", // "generation": "GENERATION_NUMBER", // "objectKey": "OBJECT_PATH" // } // } }次の表に、ログの共通フィールドの説明を示します。
ログの共通フィールド タイプ 説明 @type文字列 ログエントリのペイロードのタイプを指定し、ログがストレージ バッチ オペレーションの TransformActivityLogを表すことを示します。completeTimeタイムスタンプ オペレーションの完了時間を表す ISO 8601 準拠のタイムスタンプ。 statusオブジェクト バッチ オペレーション アクティビティの結果に関する情報を提供します。 status.errorMessage文字列 オペレーションが失敗した場合のエラー メッセージ。このエラー メッセージは、 status.statusCodeの値がOKではない場合にのみ表示されます。status.errorType文字列 エラータイプ。エラータイプは、 status.statusCode値がOKではない場合にのみ表示されます。status.statusCode文字列 オペレーションのステータス コード。値が OKの場合、オペレーションは成功しています。それ以外の値は失敗を示します。logName文字列 プロジェクトとログストリームを示すログの完全なリソース名。 receiveTimestampタイムスタンプ ログエントリがロギング システムによって受信されたときのタイムスタンプ。 resourceオブジェクト ログエントリを生成したリソースに関する情報。 resource.labelsオブジェクト リソースに関する追加の識別情報を提供する Key-Value ペア。 resource.type文字列 ログを生成したリソースのタイプ。 objectMetadataBeforeオブジェクト バッチ オペレーションが試行される前のオブジェクトのメタデータが含まれます。 objectMetadataBefore.gcsObjectオブジェクト オブジェクトに関する詳細。 objectMetadataBefore.gcsObject.bucket文字列 オブジェクトが存在するバケットの名前。 objectMetadataBefore.gcsObject.generation文字列 オペレーション前のオブジェクトの世代番号。 objectMetadataBefore.gcsObject.objectKey文字列 バケット内のオブジェクトのフルパス。 オペレーション固有の
jsonPayloadコンテンツ異なるバッチ オペレーションのログエントリの違いは、
jsonPayload内にネストされたトップレベル オブジェクトにあります。特定のログエントリで使用できるのは、実行された特定のバッチ オペレーションに対応する次のオブジェクトのいずれか 1 つのみです。オブジェクトを削除する(
DeleteObject)jsonPayload: { "DeleteObject": { "objectMetadataBefore": { "gcsObject": { "bucket": "test-bucket", "generation": "1678912345678901", "objectKey": "test_object.txt" } } } }オブジェクト保持を設定する(
PutObjectHold)jsonPayload: { "PutObjectHold": { "objectMetadataBefore": { "gcsObject": { "bucket": "test-bucket", "generation": "1678912345678901", "objectKey": "test_object.txt" } }, "temporaryHoldAfter": True, "eventBasedHoldAfter": True } }オブジェクトを書き換える(
RewriteObject)jsonPayload: { "RewriteObject": { "objectMetadataBefore": { "gcsObject": { "bucket": "test-bucket", "generation": "1678912345678901", "objectKey": "test_object.txt" } }, "kmsKeyVersionAfter": "projects/my-gcp-project/locations/us-central1/keyRings/my-keyring-01/cryptoKeys/my-encryption-key/cryptoKeyVersions/1" } }メタデータを配置する(
PutMetadata)jsonPayload: { "PutMetadata": { "objectMetadataBefore": { "gcsObject": { "bucket": "test-bucket", "generation": "1678912345678901", "objectKey": "test_object.txt" } }, "content_disposition_after": "attachment; filename=\"report_final.pdf\"", "content_encoding_after": "gzip", "content_language_after": "en-US", "content_type_after": "application/pdf", "cache_control_after": "public, max-age=3600", "custom_time_after": "2025-06-27T10:00:00Z", "custom_metadata_after": { "project": "marketing", "version": "2.0", "approvedBy": "Admin" } } }
次の表に、オペレーション固有のログフィールドを示します。
オペレーション固有のログフィールド タイプ 説明 PutObjectHoldオブジェクト オブジェクトの保持オペレーションを示します。 PutObjectHold.temporaryHoldAfterブール値 値が Trueの場合、ストレージ バッチ オペレーション ジョブの完了後にオブジェクトに一時的な保持が適用されたことを示します。有効な値はTrueまたはFalseです。PutObjectHold.eventBasedHoldAfterブール値 値が Trueの場合、ストレージ バッチ オペレーション ジョブの完了後にオブジェクトにイベントベースの保持が適用されたことを示します。有効な値はTrueまたはFalseです。RewriteObjectオブジェクト オブジェクトの書き換えオペレーションを示します。 RewriteObject.kmsKeyVersionAfter文字列 書き換えジョブの後に使用される Cloud Key Management Service 鍵バージョン。オブジェクトの暗号鍵が書き換えの結果として変更された場合、 kmsKeyVersionAfterフィールドに値が表示されます。これは省略可能なフィールドです。つまり、書き換え後に Cloud KMS 鍵バージョンが変更されていない場合は、このフィールドが存在しない可能性があります。PutMetadataオブジェクト オブジェクトのメタデータ更新オペレーションを示します。 PutMetadata.content_disposition_after文字列 PutMetadataジョブの完了後にContent-Dispositionヘッダー値を指定します。これは省略可能なフィールドで、コンテンツの配置が設定または変更された場合にのみ値が表示されます。PutMetadata.content_encoding_after文字列 PutMetadataジョブの完了後にContent-Encodingヘッダー値を指定します。これは省略可能なフィールドで、コンテンツのエンコードが設定または変更された場合にのみ値が表示されます。PutMetadata.content_language_after文字列 PutMetadataジョブの完了後にContent-Languageヘッダー値を指定します。これは省略可能なフィールドで、コンテンツの言語が設定または変更された場合にのみ値が表示されます。PutMetadata.content_type_after文字列 PutMetadataジョブの完了後にContent-Typeヘッダー値を指定します。これは省略可能なフィールドで、コンテンツ タイプが設定または変更された場合にのみ値が表示されます。PutMetadata.cache_control_after文字列 PutMetadataジョブの完了後にCache-Controlヘッダー値を指定します。これは省略可能なフィールドで、キャッシュ制御が設定または変更された場合にのみ値が表示されます。PutMetadata.custom_time_after文字列 PutMetadataジョブの完了後にCustom-Timeヘッダー値を指定します。これは省略可能なフィールドで、カスタム期間が設定または変更された場合にのみ値が表示されます。PutMetadata.custom_metadata_afterマップ(キー: 文字列、値: 文字列) 変換後の Custom- MetadataKey-Value ペアのマップが含まれます。このフィールドには、オブジェクトで設定または変更されたユーザー定義のメタデータが含まれます。これにより、追加のメタデータを柔軟に保存できます。