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
- Assurez-vous d'utiliser une version Avro compatible. Les formats non compatibles ne sont pas traités.
À 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 :
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.
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
-
Dans la console Google Cloud, accédez à la page Topics (Sujets).
Cliquez sur Create topic (Créer un sujet).
La page des détails du sujet s'ouvre.
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.
Sélectionnez Ajouter un abonnement par défaut.
Sélectionnez Activer l'ingestion.
- Spécifiez les options d'ingestion en suivant les instructions de la section Créer un sujet d'importation Cloud Storage.
- Sélectionnez Activer les journaux de la plate-forme.
- Conservez les autres paramètres par défaut.
- Cliquez sur Create topic (Créer un sujet).
gcloud
-
In the Google Cloud console, 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.
Pour activer les journaux de la plate-forme, assurez-vous que l'indicateur
--ingestion-log-severity
est défini surWARNING
ou une valeur supérieure. Exécutez la commandegcloud 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
oupubsub_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
Dans la console Google Cloud, accédez à la page Topics (Sujets).
Cliquez sur le sujet "Importer depuis Cloud Storage".
Sur la page des détails de l'article, cliquez sur Modifier.
- Sélectionnez Activer les journaux de la plate-forme.
Cliquez sur Mettre à jour.
gcloud
-
In the Google Cloud console, 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.
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 commandegcloud 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
oupubsub_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
esttext
. 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
Dans la console Google Cloud, accédez à la page Topics (Sujets).
Cliquez sur le sujet "Importer depuis Cloud Storage".
Sur la page des détails de l'article, cliquez sur Modifier.
- Désactivez l'option Activer les journaux de plate-forme.
Cliquez sur Mettre à jour.
gcloud
-
In the Google Cloud console, 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.
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 commandegcloud 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
oupubsub_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
esttext
. 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
Dans la console Google Cloud, accédez à l'explorateur de journaux.
Sélectionnez un projet Google Cloud.
Si nécessaire, 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 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.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. |