Cloud Logging pour les opérations de stockage par lot

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 :

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_NAME est le nom que vous souhaitez donner à votre job. Par exemple, my-job.
  • MANIFEST_LOCATION est l'emplacement de votre fichier manifeste. Par exemple, gs://my-bucket/manifest.csv.
  • LOG_ACTION_STATES est 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

  1. Accédez au menu de navigation Google Cloud , puis sélectionnez Journalisation > Explorateur de journaux :<br\></br\>

    Accéder à l'explorateur de journaux

  2. Sélectionnez un projet Google Cloud .

  3. Dans le menu Mettre à niveau, passez de l'ancienne visionneuse de journaux à l'explorateur de journaux.

  4. Pour filtrer vos journaux afin de n'afficher que les entrées des opérations de stockage par lot, saisissez storage_batch_operations_job dans le champ de requête, puis cliquez sur Exécuter la requête.

  5. 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
    @type Chaîne Spécifie le type de charge utile de l'entrée de journal et indique que le journal représente un TransformActivityLog pour les opérations de stockage par lot.
    completeTime Code temporel Code temporel conforme à la norme ISO 8601 indiquant quand l'opération s'est terminée.
    status Objet Fournit des informations sur le résultat de l'activité d'opération par lot.
    status.errorMessage Chaîne Message d'erreur généré si l'opération échoue. Le message d'erreur ne s'affiche que si la valeur status.statusCode n'est pas OK.
    status.errorType Chaîne Type d'erreur. Le type d'erreur ne s'affiche que si la valeur status.statusCode n'est pas OK.
    status.statusCode Chaîne Code d'état de l'opération. L'opération réussit si la valeur est OK. Toute autre valeur indique un échec.
    logName Chaîne Nom complet de la ressource du journal, indiquant le projet et le flux de journal.
    receiveTimestamp Code temporel Code temporel indiquant quand l'entrée de journal a été reçue par le système de journalisation.
    resource Objet Informations sur la ressource qui a généré l'entrée de journal.
    resource.labels Objet Paires clé/valeur fournissant des informations d'identification supplémentaires sur la ressource.
    resource.type Chaîne Type de ressource ayant généré le journal.
    objectMetadataBefore Objet Contient les métadonnées d'objet présentes avant la tentative d'opération par lot.
    objectMetadataBefore.gcsObject Objet Détails sur l'objet.
    objectMetadataBefore.gcsObject.bucket Chaîne Nom du bucket où se trouve l'objet.
    objectMetadataBefore.gcsObject.generation Chaîne Numéro de génération de l'objet avant l'opération.
    objectMetadataBefore.gcsObject.objectKey Chaîne Chemin d'accès complet de l'objet dans le bucket.
  • Contenu jsonPayload spécifique à l'opération

    La 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
    PutObjectHold Objet Indique une opération d'application d'obligation de conservation sur un objet.
    PutObjectHold.temporaryHoldAfter Boolé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 sont True ou False.
    PutObjectHold.eventBasedHoldAfter Boolé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 sont True ou False.
    RewriteObject Objet Indique une opération de réécriture sur un objet.
    RewriteObject.kmsKeyVersionAfter Chaîne Version de la clé Cloud Key Management Service utilisée après le job de réécriture. Le champ kmsKeyVersionAfter est 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.
    PutMetadata Objet Indique une opération de mise à jour des métadonnées sur un objet.
    PutMetadata.content_disposition_after Chaîne Spécifie la valeur de l'en-tête Content-Disposition une fois le job PutMetadata terminé. 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_after Chaîne Spécifie la valeur de l'en-tête Content-Encoding une fois le job PutMetadata terminé. 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_after Chaîne Spécifie la valeur de l'en-tête Content-Language une fois le job PutMetadata terminé. 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_after Chaîne Spécifie la valeur de l'en-tête Content-Type une fois le job PutMetadata terminé. 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_after Chaîne Spécifie la valeur de l'en-tête Cache-Control une fois le job PutMetadata terminé. 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_after Chaîne Spécifie la valeur de l'en-tête Custom-Time une fois le job PutMetadata terminé. 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_after Map (key: string, value: string) Contient une carte de paires clé/valeur Custom- Metadata aprè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.