Cloud Logging pour les opérations par lot de stockage

Cette page explique comment configurer et afficher les journaux des opérations par lot de stockage à l'aide de Cloud Logging. Une tâche d'opérations par lot de stockage peut être configurée pour générer des entrées de journal Cloud Logging pour chaque tâche de transformation. Chaque entrée de journal correspond à la tentative de transformation d'un objet.

Les opérations par lot de stockage sont compatibles avec la journalisation dans Cloud Logging et les journaux d'audit Cloud Storage. Bien que les deux options capturent les actions des opérations par lot de stockage, 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é. Il s'agit d'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 d'attribuer le rôle Identity and Access Management Logs Viewer (roles/logging.viewer). Le rôle Logs Viewer (roles/logging.viewer) Identity and Access Management fournit les autorisations Identity and Access Management requises pour afficher vos données Cloud Logging. Pour en savoir plus sur les autorisations d'accès à Logging, consultez la section Contrôle des accès avec IAM.

Pour vérifier et accorder les autorisations IAM, procédez comme suit :

Comprendre les informations de journalisation

Lorsque la journalisation est activée, les opérations Storage par lot capturent les informations suivantes :

  • Action enregistrable : la valeur de l'action enregistrable est toujours transform.

  • États pouvant être consignés : pour chaque action, vous pouvez choisir de consigner un ou les deux é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 par lot de stockage avec gcloud storage batch-operations jobs create, utilisez les options --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. Exemple :my-job
  • MANIFEST_LOCATION est l'emplacement de votre fichier manifeste. Exemple :gs://my-bucket/manifest.csv
  • LOG_ACTION_STATES est une liste d'états à consigner, séparés par une virgule. Exemple :succeeded,failed

API REST

Create a storage batch operations job avec un LoggingConfig.

{
   "loggingConfig": {
      "logActions": ["TRANSFORM"],
      "logActionStates": ["LOG_ACTION_STATES"],
        }
}

Où :

LOG_ACTION_STATES est une liste d'états à consigner, séparés par une virgule. Exemple :"SUCCEEDED","FAILED"

Afficher les journaux

Pour afficher les journaux des opérations par lot de stockage, 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 par lot de stockage, 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 pendant laquelle les résultats doivent être renvoyés.

Pour en savoir plus sur l'utilisation de l'explorateur de journaux, consultez la page Utiliser l'explorateur de journaux.

Ligne de commande

Pour rechercher des journaux d'opérations par lot de stockage à l'aide de gcloud CLI, utilisez la commande gcloud logging read.

Spécifiez un filtre pour limiter les résultats aux journaux des opérations par lot de stockage.

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 par lot de stockage, 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 des opérations Storage par lot

Tous les champs spécifiques aux opérations par lot de stockage sont contenus dans un objet jsonPayload. Bien que le contenu exact de jsonPayload varie en fonction du type de tâche, il existe une structure commune à toutes les entrées TransformActivityLog. Cette section présente les champs de journaux courants, puis décrit en détail les champs spécifiques aux opérations.

  • Champs de journaux courants

    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 journaux courants :

    Champs de journaux courants 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 par lot de stockage.
    completeTime Horodatage Horodatage 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 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 journaux.
    receiveTimestamp Horodatage 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 de l'objet 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 jsonPayload. Un seul des objets suivants est disponible dans une entrée de journal donnée, correspondant à l'opération par lot spécifique effectuée :

    • Supprimer un objet (DeleteObject)

      jsonPayload:
      {
      "DeleteObject": {
        "objectMetadataBefore": {
          "gcsObject": {
            "bucket": "test-bucket",
            "generation": "1678912345678901",
            "objectKey": "test_object.txt"
          }
        }
        }
      }
      
    • Placer une préservation d'objet (PutObjectHold)

      jsonPayload:
      {
      "PutObjectHold": {
        "objectMetadataBefore": {
          "gcsObject": {
            "bucket": "test-bucket",
            "generation": "1678912345678901",
            "objectKey": "test_object.txt"
          }
        },
        "temporaryHoldAfter": True,
        "eventBasedHoldAfter": True
      }
      }
      
    • Réécrire un 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 journaux spécifiques aux opérations :

    Champs de journaux spécifiques aux opérations Type Description
    PutObjectHold Objet Indique une opération de préservation sur un objet.
    PutObjectHold.temporaryHoldAfter Booléen Si la valeur est True, cela signifie qu'une conservation temporaire a été appliquée à l'objet une fois la tâche d'opérations par lot de stockage terminée. Les valeurs valides sont True ou False.
    PutObjectHold.eventBasedHoldAfter Booléen Si la valeur est True, cela indique qu'une préservation basée sur des événements a été appliquée à l'objet une fois le job d'opérations par lot de stockage 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 à la suite de la réécriture. Il s'agit d'un champ facultatif, ce qui signifie qu'il 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 la tâche PutMetadata terminée. 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 la tâche PutMetadata terminée. Il s'agit d'un champ facultatif qui n'est renseigné que si l'heure 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.