Cette page explique comment configurer et afficher les journaux des opérations de stockage par lot à l'aide de Cloud Logging. Un job de stockage par lot peut être configurée pour générer des entrées de journal Cloud Logging pour chaque job de transformation. Chaque entrée de journal correspond à une tentative de transformation d'un objet.
Les opérations de stockage par lot sont compatibles avec la journalisation dans Cloud Logging et les journaux d'audit cloud pour Cloud Storage. Bien que les deux options permettent de consigner les actions des opérations de stockage par lot, nous vous recommandons d'utiliser Cloud Logging. Cloud Logging fournit une plate-forme centralisée pour l'analyse des journaux, la surveillance en temps réel et le filtrage avancé. C'est une solution robuste pour gérer et comprendre l'activité de vos opérations par lot.
Avant de commencer
Vérifiez que vous avez accès à Cloud Logging. Pour utiliser Cloud Logging, nous vous recommandons l'attribution du rôle Identity and Access Management Logs Viewer (roles/logging.viewer). Le rôle Identity and Access Management Logs Viewer (roles/logging.viewer) fournit les autorisations IAM requises pour afficher vos données Cloud Logging.
Pour en savoir plus sur les autorisations d'accès à Logging, consultez Contrôle des accès avec IAM.
Pour vérifier et accorder les autorisations IAM, procédez comme suit :
- Affichez l'accès défini actuellement pour vérifier l'accès de chaque compte principal.
- Attribuez un rôle aux comptes principaux appropriés dans votre projet.
Comprendre les détails de la journalisation
Lorsque la journalisation est activée, les opérations de stockage par lot capturent les informations suivantes :
Action pouvant être consignée : la valeur de l'action journalisable est toujours
transform.États pouvant être consignés : pour chaque action, vous pouvez choisir de consigner un ou plusieurs des états suivants :
SUCCEEDED: l'action a réussi.FAILED: l'action a échoué.
Activer la journalisation
Pour activer la journalisation, spécifiez les actions et les états à consigner.
Ligne de commande
Lorsque vous créez un job d'opérations de stockage par lot avec gcloud
storage batch-operations jobs create, utilisez les flags --log-actions et --log-action-states pour activer la journalisation.
gcloud storage batch-operations jobs create JOB_NAME \ --manifest-location=MANIFEST_LOCATION \ --delete-object \ --log-actions=transform \ --log-action-states=LOG_ACTION_STATES
Où :
JOB_NAMEest le nom que vous souhaitez donner à votre job. Par exemple,my-job.MANIFEST_LOCATIONest l'emplacement de votre fichier manifeste. Par exemple,gs://my-bucket/manifest.csv.LOG_ACTION_STATESest une liste d'états à consigner, séparés par une virgule. Par exemple,succeeded,failed.
API REST
Create a storage batch operations
job avec une LoggingConfig.
{ "loggingConfig": { "logActions": ["TRANSFORM"], "logActionStates": ["LOG_ACTION_STATES"], } }
Où :
LOG_ACTION_STATES est une liste d'états à consigner, séparés par une virgule. Par exemple, "SUCCEEDED","FAILED".
Afficher les journaux
Pour afficher les journaux des opérations de stockage par lot, procédez comme suit :
Console
Accédez au menu de navigation Google Cloud menu, puis sélectionnez Journalisation > Explorateur de journaux :<br\></br\>
Sélectionnez un projet Google Cloud .
Dans le menu Mettre à niveau, passez de l'ancienne visionneuse de journaux à l'explorateur de journaux.
Pour filtrer vos journaux afin de n'afficher que les entrées des opérations de stockage par lot, saisissez
storage_batch_operations_jobdans le champ de requête, puis cliquez sur Exécuter la requête.Dans le volet Résultats de la requête, cliquez sur Modifier l'heure pour modifier la période pour laquelle les résultats doivent être renvoyés.
Pour en savoir plus sur l'utilisation de l'explorateur de journaux, consultez Utiliser l'explorateur de journaux.
Ligne de commande
Pour rechercher des journaux d'opérations de stockage par lot à l'aide de la gcloud CLI, utilisez la commande gcloud logging read.
Spécifiez un filtre pour limiter les résultats aux journaux des opérations de stockage par lot.
gcloud logging read "resource.type=storage_batch_operations_job"
API REST
Utilisez la méthode API Cloud Logging entries.list.
Pour filtrer vos résultats afin de n'inclure que les entrées liées aux opérations de stockage par lot, utilisez le champ filter. Voici un exemple d'objet de requête JSON :
{
"resourceNames":
[
"projects/my-project-name"
],
"orderBy": "timestamp desc",
"filter": "resource.type=\"storage_batch_operations_job\""
}
Où :
my-project-name est le nom de votre projet.
Format des journaux d'opérations de stockage par lot
Tous les champs spécifiques aux opérations de stockage par lot sont contenus dans un objet jsonPayload. Bien que le contenu exact de jsonPayload varie en fonction du type de job, il existe une structure commune à toutes les entrées TransformActivityLog. Cette section présente les champs de journal communs, puis décrit en détail les champs spécifiques aux opérations.
Champs de journal communs
Les champs suivants apparaissent dans tous les journaux :
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" // } // } }Le tableau suivant décrit chacun des champs de journal communs :
Champs de journal communs Type Description @typeChaîne Spécifie le type de charge utile de l'entrée de journal et indique que le journal représente un TransformActivityLogpour les opérations de stockage par lot.completeTimeCode temporel Code temporel conforme à la norme ISO 8601 indiquant quand l'opération s'est terminée. statusObjet Fournit des informations sur le résultat de l'activité d'opération par lot. status.errorMessageChaîne Message d'erreur généré si l'opération échoue. Le message d'erreur ne s'affiche que si la valeur status.statusCoden'est pasOK.status.errorTypeChaîne Type d'erreur. Le type d'erreur ne s'affiche que si la valeur status.statusCoden'est pasOK.status.statusCodeChaîne Code d'état de l'opération. L'opération réussit si la valeur est OK. Toute autre valeur indique un échec.logNameChaîne Nom complet de la ressource du journal, indiquant le projet et le flux de journal. receiveTimestampCode temporel Code temporel indiquant quand l'entrée de journal a été reçue par le système de journalisation. resourceObjet Informations sur la ressource qui a généré l'entrée de journal. resource.labelsObjet Paires clé/valeur fournissant des informations d'identification supplémentaires sur la ressource. resource.typeChaîne Type de ressource ayant généré le journal. objectMetadataBeforeObjet Contient les métadonnées d'objet présentes avant la tentative d'opération par lot. objectMetadataBefore.gcsObjectObjet Détails sur l'objet. objectMetadataBefore.gcsObject.bucketChaîne Nom du bucket où se trouve l'objet. objectMetadataBefore.gcsObject.generationChaîne Numéro de génération de l'objet avant l'opération. objectMetadataBefore.gcsObject.objectKeyChaîne Chemin d'accès complet de l'objet dans le bucket. Contenu
jsonPayloadspécifique à l'opérationLa différence entre les entrées de journal pour différentes opérations par lot réside dans l'objet de premier niveau imbriqué dans la charge utile
jsonPayload. Un seul des objets suivants est disponible dans une entrée de journal donnée (correspond à l'opération par lot spécifique effectuée) :Supprimer l'objet (
DeleteObject)jsonPayload: { "DeleteObject": { "objectMetadataBefore": { "gcsObject": { "bucket": "test-bucket", "generation": "1678912345678901", "objectKey": "test_object.txt" } } } }Placer une obligation de conservation de l'objet (
PutObjectHold)jsonPayload: { "PutObjectHold": { "objectMetadataBefore": { "gcsObject": { "bucket": "test-bucket", "generation": "1678912345678901", "objectKey": "test_object.txt" } }, "temporaryHoldAfter": True, "eventBasedHoldAfter": True } }Réécrire l'objet (
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" } }Placer des métadonnées (
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" } } }
Le tableau suivant décrit les champs de journal spécifiques aux opérations :
Champs de journal spécifiques aux opérations Type Description PutObjectHoldObjet Indique une opération d'application d'obligation de conservation sur un objet. PutObjectHold.temporaryHoldAfterBooléen Si la valeur est True, cela indique qu'une obligation de conservation temporaire a été appliquée à l'objet une fois le job d'opérations de stockage par lot terminé. Les valeurs valides sontTrueouFalse.PutObjectHold.eventBasedHoldAfterBooléen Si la valeur est True, cela indique qu'une obligation de conservation basée sur des événements a été appliquée à l'objet une fois le job d'opérations de stockage par lot terminé. Les valeurs valides sontTrueouFalse.RewriteObjectObjet Indique une opération de réécriture sur un objet. RewriteObject.kmsKeyVersionAfterChaîne Version de la clé Cloud Key Management Service utilisée après le job de réécriture. Le champ kmsKeyVersionAfterest renseigné si la clé de chiffrement de l'objet a été modifiée en raison de la réécriture. Il s'agit d'un champ facultatif, qui peut ne pas être présent si la version de clé Cloud KMS est restée inchangée après la réécriture.PutMetadataObjet Indique une opération de mise à jour des métadonnées sur un objet. PutMetadata.content_disposition_afterChaîne Spécifie la valeur de l'en-tête Content-Dispositionune fois le jobPutMetadataterminé. Il s'agit d'un champ facultatif qui n'est renseigné que si la disposition du contenu a été définie ou modifiée.PutMetadata.content_encoding_afterChaîne Spécifie la valeur de l'en-tête Content-Encodingune fois le jobPutMetadataterminé. Il s'agit d'un champ facultatif qui n'est renseigné que si l'encodage du contenu a été défini ou modifié.PutMetadata.content_language_afterChaîne Spécifie la valeur de l'en-tête Content-Languageune fois le jobPutMetadataterminé. Il s'agit d'un champ facultatif qui n'est renseigné que si la langue du contenu a été définie ou modifiée.PutMetadata.content_type_afterChaîne Spécifie la valeur de l'en-tête Content-Typeune fois le jobPutMetadataterminé. Il s'agit d'un champ facultatif qui n'est renseigné que si le type de contenu a été défini ou modifié.PutMetadata.cache_control_afterChaîne Spécifie la valeur de l'en-tête Cache-Controlune fois le jobPutMetadataterminé. Il s'agit d'un champ facultatif qui n'est renseigné que si le contrôle du cache a été défini ou modifié.PutMetadata.custom_time_afterChaîne Spécifie la valeur de l'en-tête Custom-Timeune fois le jobPutMetadataterminé. Il s'agit d'un champ facultatif qui n'est renseigné que si la période personnalisée a été définie ou modifiée.PutMetadata.custom_metadata_afterMap (key: string, value: string) Contient une carte de paires clé/valeur Custom- Metadataaprès la transformation. Ce champ inclut toutes les métadonnées définies par l'utilisateur qui ont été définies ou modifiées sur l'objet. Il permet de stocker de manière flexible des métadonnées supplémentaires.