Utiliser les journaux de la plate-forme pour résoudre les problèmes liés aux sujets d'importation Cloud Storage

Ce guide explique comment utiliser les journaux de la plate-forme Google Cloud pour résoudre les problèmes lorsque vous utilisez des thèmes d'importation Cloud Storage pour ingérer des données.

À propos des échecs d'ingestion dans les sujets d'importation Cloud Storage

Les sujets d'importation Cloud Storage peuvent rencontrer des problèmes qui empêchent l'ingestion des données. Par exemple, lorsque vous utilisez un sujet d'importation Cloud Storage, vous pouvez rencontrer des problèmes d'ingestion d'un objet Cloud Storage ou d'une partie d'un objet.

La liste suivante décrit les raisons d'échec de l'ingestion dans les sujets d'importation Cloud Storage qui génèrent des journaux de plate-forme:

  • Taille du message

    • Chaque message ne doit pas dépasser 10 Mo. Si c'est le cas, l'intégralité du message est ignorée.

    • Si vous utilisez le format Avro ou le format Avro Pub/Sub, les blocs de messages ne doivent pas dépasser 16 Mo. Les blocs de messages plus volumineux sont ignorés.

  • Attributs du message

    • Les messages peuvent comporter jusqu'à 100 attributs. Tout attribut supplémentaire est supprimé lors de l'ingestion du message.

    • Les clés d'attribut ne peuvent pas dépasser 256 octets et les valeurs ne peuvent pas dépasser 1 024 octets. Les clés ou valeurs plus grandes sont supprimées du message lors de son ingestion.

      Pour en savoir plus sur les consignes d'utilisation des clés de message et des attributs, consultez la section Utiliser des attributs pour publier un message.

  • Mise en forme Avro

    • Assurez-vous que vos objets Avro sont correctement formatés. Un format incorrect empêche l'ingestion du message.
  • Format des données

À propos des journaux de plate-forme

Un service Google Cloud compatible génère son propre ensemble de journaux de plate-forme, qui capture les événements et les activités pertinents pour le fonctionnement de ce service. Ces journaux de plate-forme contiennent des informations détaillées sur ce qui se passe dans un service, y compris les opérations réussies, les erreurs, les avertissements et d'autres événements notables.

Les journaux de plate-forme font partie de Cloud Logging et partagent les mêmes fonctionnalités. Voici, par exemple, une liste de fonctionnalités importantes pour les journaux de la plate-forme:

  • Les journaux sont généralement structurés en tant qu'objets JSON qui permettent d'effectuer des requêtes et des filtrages supplémentaires.

  • Vous pouvez afficher les journaux de la plate-forme à l'aide de la journalisation dans la console.

  • Les journaux de la plate-forme peuvent également être intégrés à Cloud Monitoring et à d'autres outils de surveillance pour créer des tableaux de bord, des alertes et d'autres mécanismes de surveillance.

  • Le stockage des journaux entraîne des frais basés sur le volume ingéré et la durée de conservation.

Pour en savoir plus sur les journaux de la plate-forme, consultez la page Journaux Google Cloud Platform.

Rôles et autorisations requis pour utiliser les journaux de la plate-forme

Avant de commencer, vérifiez que vous avez accès à la journalisation. Vous devez disposer du rôle IAM (Identity and Access Management) (roles/logging.viewer) Visionneuse de journaux. Pour en savoir plus sur l'accès à Logging, consultez la section Contrôle des accès avec IAM.

La section suivante explique comment vérifier et accorder l'accès IAM :

Activer les journaux de plate-forme

Les journaux de la plate-forme sont désactivés par défaut pour les sujets d'importation. Vous pouvez activer les journaux de la plate-forme lorsque vous créez ou mettez à jour un sujet d'importation Cloud Storage.

Pour désactiver les journaux de la plate-forme, modifiez le sujet d'importation Cloud Storage.

Activer les journaux de la plate-forme lors de la création d'un sujet d'importation Cloud Storage

Assurez-vous de remplir les conditions préalables à la création d'un sujet d'importation Cloud Storage.

Pour créer un sujet d'importation Cloud Storage avec les journaux de la plate-forme activés, procédez comme suit:

Console

  1. Dans la console Google Cloud, accédez à la page Topics (Sujets).

    Accéder aux sujets

  2. Cliquez sur Create topic (Créer un sujet).

    La page des détails du sujet s'ouvre.

  3. Dans le champ ID du sujet, saisissez un ID pour votre sujet d'importation Cloud Storage.

    Pour en savoir plus sur l'attribution de noms aux sujets, consultez les consignes d'attribution de noms.

  4. Sélectionnez Ajouter un abonnement par défaut.

  5. Sélectionnez Activer l'ingestion.

  6. Spécifiez les options d'ingestion en suivant les instructions de la section Créer un sujet d'importation Cloud Storage.
  7. Sélectionnez Activer les journaux de la plate-forme.
  8. Conservez les autres paramètres par défaut.
  9. Cliquez sur Create topic (Créer un sujet).

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Pour activer les journaux de la plate-forme, assurez-vous que l'indicateur --ingestion-log-severity est défini sur WARNING ou une valeur supérieure. Exécutez la commande gcloud pubsub topics create:

    gcloud pubsub topics create TOPIC_ID\
        --cloud-storage-ingestion-bucket=BUCKET_NAME\
        --cloud-storage-ingestion-input-format=INPUT_FORMAT\
        --ingestion-log-severity=WARNING

    Remplacez les éléments suivants :

    • TOPIC_ID: nom ou ID de votre sujet.

    • BUCKET_NAME: spécifie le nom d'un bucket existant. Exemple :prod_bucket Le nom du bucket ne doit pas inclure l'ID du projet. Pour créer un bucket, consultez la page Créer des buckets.

    • INPUT_FORMAT: spécifie le format des objets ingérés. Il peut être défini sur text, avro ou pubsub_avro. Pour en savoir plus sur ces options, consultez la section Format d'entrée.

Si vous rencontrez des problèmes, consultez Résoudre les problèmes d'importation Cloud Storage.

Activer les journaux de plate-forme lors de la mise à jour d'un sujet d'importation Cloud Storage

Procédez comme suit :

Console

  1. Dans la console Google Cloud, accédez à la page Topics (Sujets).

    Accéder aux sujets

  2. Cliquez sur le sujet "Importer depuis Cloud Storage".

  3. Sur la page des détails de l'article, cliquez sur Modifier.

  4. Sélectionnez Activer les journaux de la plate-forme.
  5. Cliquez sur Mettre à jour.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Pour éviter de perdre vos paramètres pour le sujet d'importation, veillez à les inclure tous chaque fois que vous mettez à jour le sujet. Si vous omettez quelque chose, Pub/Sub rétablit le paramètre sur sa valeur par défaut d'origine.

    Pour activer les journaux de la plate-forme, assurez-vous que la gravité du journal d'ingestion est définie sur WARNING. Exécutez la commande gcloud pubsub topics update avec toutes les options mentionnées dans l'exemple suivant:

    gcloud pubsub topics update TOPIC_ID \
        --cloud-storage-ingestion-bucket=BUCKET_NAME\
        --cloud-storage-ingestion-input-format=INPUT_FORMAT\
        --cloud-storage-ingestion-text-delimiter=TEXT_DELIMITER\
        --cloud-storage-ingestion-minimum-object-create-time=MINIMUM_OBJECT_CREATE_TIME\
        --cloud-storage-ingestion-match-glob=MATCH_GLOB
        --ingestion-log-severity=WARNING

    Remplacez les éléments suivants :

    • TOPIC_ID correspond à l'ID ou au nom du sujet. Ce champ ne peut pas être modifié.

    • BUCKET_NAME: spécifie le nom d'un bucket existant. Exemple :prod_bucket Le nom du bucket ne doit pas inclure l'ID du projet.

    • INPUT_FORMAT: spécifie le format des objets ingérés. Il peut être défini sur text, avro ou pubsub_avro. Pour en savoir plus sur ces options, consultez la section Format d'entrée.

    • TEXT_DELIMITER: spécifie le séparateur à utiliser pour diviser les objets texte en messages Pub/Sub. Il doit s'agir d'un seul caractère et ne doit être défini que lorsque INPUT_FORMAT est text. La valeur par défaut est le caractère de nouvelle ligne (\n).

      Lorsque vous utilisez gcloud CLI pour spécifier le délimiteur, soyez particulièrement attentif à la gestion des caractères spéciaux tels que la nouvelle ligne \n. Utilisez le format '\n' pour vous assurer que le séparateur est correctement interprété. L'utilisation simple de \n sans guillemets ni échappement entraîne un séparateur "n".

    • MINIMUM_OBJECT_CREATE_TIME: spécifie le délai minimal au cours duquel un objet a été créé pour qu'il soit ingéré. au format UTC YYYY-MM-DDThh:mm:ssZ. Par exemple, 2024-10-14T08:30:30Z.

      Toute date, passée ou future, de 0001-01-01T00:00:00Z à 9999-12-31T23:59:59Z inclus, est valide.

    • MATCH_GLOB: spécifie le modèle glob à faire correspondre pour qu'un objet soit ingéré. Lorsque vous utilisez gcloud CLI, le caractère * d'un caractère générique de correspondance avec des caractères * doit être formaté en tant qu'expression \*\*.txt ou l'ensemble du caractère générique de correspondance doit être placé entre guillemets "**.txt" ou '**.txt'. Pour en savoir plus sur les syntaxes acceptées pour les modèles glob, consultez la documentation Cloud Storage.

Désactiver les journaux de plate-forme

Procédez comme suit :

Console

  1. Dans la console Google Cloud, accédez à la page Topics (Sujets).

    Accéder aux sujets

  2. Cliquez sur le sujet "Importer depuis Cloud Storage".

  3. Sur la page des détails de l'article, cliquez sur Modifier.

  4. Désactivez l'option Activer les journaux de plate-forme.
  5. Cliquez sur Mettre à jour.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Pour éviter de perdre vos paramètres pour le sujet d'importation, veillez à les inclure tous chaque fois que vous mettez à jour le sujet. Si vous omettez quelque chose, Pub/Sub rétablit le paramètre sur sa valeur par défaut d'origine.

    Pour désactiver les journaux de la plate-forme, assurez-vous que la gravité de journalisation d'ingestion est définie sur DISABLED. Exécutez la commande gcloud pubsub topics update avec tous les indicateurs mentionnés dans l'exemple suivant:

    gcloud pubsub topics update TOPIC_ID \
        --cloud-storage-ingestion-bucket=BUCKET_NAME\
        --cloud-storage-ingestion-input-format=INPUT_FORMAT\
        --cloud-storage-ingestion-text-delimiter=TEXT_DELIMITER\
        --cloud-storage-ingestion-minimum-object-create-time=MINIMUM_OBJECT_CREATE_TIME\
        --cloud-storage-ingestion-match-glob=MATCH_GLOB
        --ingestion-log-severity=DISABLED

    Remplacez les éléments suivants :

    • TOPIC_ID correspond à l'ID ou au nom du sujet. Ce champ ne peut pas être modifié.

    • BUCKET_NAME: spécifie le nom d'un bucket existant. Exemple :prod_bucket Le nom du bucket ne doit pas inclure l'ID du projet.

    • INPUT_FORMAT: spécifie le format des objets ingérés. Il peut être défini sur text, avro ou pubsub_avro. Pour en savoir plus sur ces options, consultez la section Format d'entrée.

    • TEXT_DELIMITER: spécifie le séparateur à utiliser pour diviser les objets texte en messages Pub/Sub. Il doit s'agir d'un seul caractère et ne doit être défini que lorsque INPUT_FORMAT est text. La valeur par défaut est le caractère de nouvelle ligne (\n).

      Lorsque vous utilisez gcloud CLI pour spécifier le délimiteur, soyez particulièrement attentif à la gestion des caractères spéciaux tels que la nouvelle ligne \n. Utilisez le format '\n' pour vous assurer que le séparateur est correctement interprété. L'utilisation simple de \n sans guillemets ni échappement entraîne un séparateur "n".

    • MINIMUM_OBJECT_CREATE_TIME: spécifie le délai minimal au cours duquel un objet a été créé pour qu'il soit ingéré. au format UTC YYYY-MM-DDThh:mm:ssZ. Par exemple, 2024-10-14T08:30:30Z.

      Toute date, passée ou future, de 0001-01-01T00:00:00Z à 9999-12-31T23:59:59Z inclus, est valide.

    • MATCH_GLOB: spécifie le modèle glob à faire correspondre pour qu'un objet soit ingéré. Lorsque vous utilisez gcloud CLI, le caractère * d'un caractère générique de correspondance avec des caractères * doit être formaté en tant qu'expression \*\*.txt ou l'ensemble du caractère générique de correspondance doit être placé entre guillemets "**.txt" ou '**.txt'. Pour en savoir plus sur les syntaxes acceptées pour les modèles glob, consultez la documentation Cloud Storage.

Afficher les journaux de la plate-forme

Pour afficher les journaux de la plate-forme pour le sujet d'importation Cloud Storage, procédez comme suit:

Console Google Cloud

  1. Dans la console Google Cloud, accédez à l'explorateur de journaux.

    Accéder à l'explorateur de journaux

  2. Sélectionnez un projet Google Cloud.

  3. Si nécessaire, 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 pour les sujets d'importation Cloud Storage, saisissez resource.type="resource.type=pubsub_topic AND severity=WARNING 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.

CLI gcloud

Pour rechercher des journaux de plate-forme pour les sujets d'importation Cloud Storage à l'aide de gcloud CLI, utilisez la commande gcloud logging read.

Spécifiez un filtre pour limiter vos résultats aux journaux de la plate-forme pour les sujets d'importation Cloud Storage.

gcloud logging read "resource.type=pubsub_topic AND severity=WARNING"

API Cloud Logging

Utilisez la méthode API Cloud Logging entries.list.

Pour filtrer vos résultats afin de n'inclure que les journaux de la plate-forme pour les sujets d'importation Cloud Storage, utilisez le champ filter. Vous trouverez ci-dessous un exemple d'objet de requête JSON.

{
"resourceNames":
  [
    "projects/my-project-name"
  ],
  "orderBy": "timestamp desc",
  "filter": "resource.type=\"pubsub_topic\" AND severity=WARNING"
}

Afficher et comprendre le format des journaux de la plate-forme

La section suivante inclut des exemples de journaux de plate-forme et décrit les champs des journaux de plate-forme.

Tous les champs spécifiques aux journaux de la plate-forme sont contenus dans un objet jsonPayload.

Échec Avro

{
  "insertId": "1xnzx8md4768",
  "jsonPayload": {
    "@type": "type.googleapis.com/google.pubsub.v1.IngestionFailureEvent",
    "cloudStorageFailure": {
      "objectGeneration": "1661148924738910",
      "bucket": "bucket_in_avro_format",
      "objectName": "counts/taxi-2022-08-15T06:10:00.000Z-2022-08-15T06:15:00.000Z-pane-0-last-00-of-01",
      "avroFailureReason": {}
    },
    "topic": "projects/interpod-p2-management/topics/avro_bucket_topic",
    "errorMessage": "Unable to parse the header of the object. The object won't be ingested."
  },
  "resource": {
    "type": "pubsub_topic",
    "labels": {
      "project_id": "interpod-p2-management",
      "topic_id": "avro_bucket_topic"
    }
  },
  "timestamp": "2024-10-07T18:55:45.650103193Z",
  "severity": "WARNING",
  "logName": "projects/interpod-p2-management/logs/pubsub.googleapis.com%2Fingestion_failures",
  "receiveTimestamp": "2024-10-07T18:55:46.678221398Z"
}
Champ du journal Description
insertId Identifiant unique pour l'entrée de journal.
jsonPayload.@type Identifie le type d'événement. Toujours type.googleapis.com/google.pubsub.v1.IngestionFailureEvent.
jsonPayload.cloudStorageFailure.objectGeneration Numéro de génération de l'objet Cloud Storage.
jsonPayload.cloudStorageFailure.bucket Bucket Cloud Storage contenant l'objet.
jsonPayload.cloudStorageFailure.objectName Nom de l'objet Cloud Storage.
jsonPayload.cloudStorageFailure.avroFailureReason Contient des informations plus spécifiques sur les erreurs d'analyse Avro. Ce champ est laissé vide.
jsonPayload.topic Sujet Pub/Sub auquel le message était destiné.
jsonPayload.errorMessage Message d'erreur lisible par l'utilisateur.
resource.type Type de la ressource Toujours pubsub_topic.
resource.labels.project_id ID de projet Google Cloud.
resource.labels.topic_id ID du sujet Pub/Sub.
timestamp Horodatage de la génération de l'entrée de journal.
severity Niveau de gravité : WARNING.
logName Nom du journal.
receiveTimestamp Code temporel de l'entrée de journal reçue.

Échec du texte

{
  "insertId": "1kc4puoag",
  "jsonPayload": {
    "@type": "type.googleapis.com/google.pubsub.v1.IngestionFailureEvent",
    "cloudStorageFailure": {
      "bucket": "bucket_in_text_format",
      "apiViolationReason": {},
      "objectName": "counts/taxi-2022-08-15T06:10:00.000Z-2022-08-15T06:15:00.000Z-pane-0-last-00-of-01",
      "objectGeneration": "1727990048026758"
    },
    "topic": "projects/interpod-p2-management/topics/large_text_bucket_topic",
    "errorMessage": "The message has exceeded the maximum allowed size of 10000000 bytes. The message won't be published."
  },
  "resource": {
    "type": "pubsub_topic",
    "labels": {
      "topic_id": "large_text_bucket_topic",
      "project_id": "interpod-p2-management"
    }
  },
  "timestamp": "2024-10-09T14:09:07.760488386Z",
  "severity": "WARNING",
  "logName": "projects/interpod-p2-management/logs/pubsub.googleapis.com%2Fingestion_failures",
  "receiveTimestamp": "2024-10-09T14:09:08.483589656Z"
}
Champ du journal Description
insertId Identifiant unique pour l'entrée de journal.
jsonPayload.@type Identifie le type d'événement. Toujours type.googleapis.com/google.pubsub.v1.IngestionFailureEvent.
jsonPayload.cloudStorageFailure.objectGeneration Numéro de génération de l'objet Cloud Storage.
jsonPayload.cloudStorageFailure.bucket Bucket Cloud Storage contenant l'objet.
jsonPayload.cloudStorageFailure.objectName Nom de l'objet Cloud Storage.
jsonPayload.cloudStorageFailure.apiViolationReason Contient des informations sur le non-respect des règles concernant l'API. Ce champ est laissé vide.
jsonPayload.topic Sujet Pub/Sub
jsonPayload.errorMessage Message lisible par l'utilisateur.
resource.type Type de ressource, toujours pubsub_topic.
resource.labels.project_id ID de projet Google Cloud
resource.labels.topic_id ID du sujet Pub/Sub.
timestamp Code temporel de génération de l'entrée de journal.
severity Niveau de gravité : WARNING.
logName Nom du journal.
receiveTimestamp Heure à laquelle l'entrée de journal a été reçue par Logging.