In diesem Leitfaden erfahren Sie, wie Sie mithilfe von Google Cloud-Plattformprotokollen Probleme beheben, die beim Aufnehmen von Daten mit Cloud Storage-Importthemen auftreten.
Fehler bei der Datenaufnahme in Cloud Storage-Importthemen
Bei Cloud Storage-Importthemen können Probleme auftreten, die verhindern, dass Daten erfolgreich aufgenommen werden. Wenn Sie beispielsweise ein Cloud Storage-Importthema verwenden, kann es zu Problemen beim Aufnehmen eines Cloud Storage-Objekts oder eines Teils eines Objekts kommen.
In der folgenden Liste werden Gründe für die Aufnahmefehler in Cloud Storage-Importthemen beschrieben, die Plattformprotokolle generieren:
Nachrichtengröße
Einzelne Nachrichten dürfen nicht größer als 10 MB sein. In diesem Fall wird die gesamte Nachricht übersprungen.
Wenn Sie das Avro- oder das Pub/Sub Avro-Format verwenden, dürfen Nachrichtenblöcke nicht größer als 16 MB sein. Größere Nachrichtenblöcke werden übersprungen.
Nachrichtenattribute
Nachrichten können maximal 100 Attribute haben. Alle zusätzlichen Attribute werden beim Aufnehmen der Nachricht gelöscht.
Attributschlüssel dürfen nicht größer als 256 Byte und Werte nicht größer als 1.024 Byte sein. Größere Schlüssel oder Werte werden bei der Datenaufnahme aus der Nachricht entfernt.
Weitere Informationen zu den Richtlinien für die Verwendung von Nachrichtenschlüsseln und ‑attributen finden Sie unter Attribute zum Veröffentlichen einer Nachricht verwenden.
Avro-Formatierung
- Prüfen Sie, ob Ihre Avro-Objekte richtig formatiert sind. Eine falsche Formatierung verhindert die Aufnahme der Nachricht.
Datenformat
- Verwenden Sie eine unterstützte Avro-Version. Nicht unterstützte Formate werden nicht verarbeitet.
Plattform-Logs
Ein unterstützter Google Cloud-Dienst generiert eigene Plattformprotokolle, in denen Ereignisse und Aktivitäten erfasst werden, die für den Betrieb dieses Dienstes relevant sind. Diese Plattformprotokolle enthalten detaillierte Informationen zu den Vorgängen in einem Dienst, einschließlich erfolgreicher Vorgänge, Fehlern, Warnungen und anderen bemerkenswerten Ereignissen.
Plattformprotokolle sind Teil von Cloud Logging und bieten dieselben Funktionen. Im Folgenden finden Sie beispielsweise eine Liste wichtiger Funktionen für Plattformprotokolle:
Protokolle sind in der Regel als JSON-Objekte strukturiert, die eine weitere Abfrage und Filterung ermöglichen.
Sie können sich Plattformprotokolle mithilfe der Protokollierung in der Konsole ansehen.
Plattformprotokolle können auch in Cloud Monitoring und andere Monitoring-Tools eingebunden werden, um Dashboards, Benachrichtigungen und andere Monitoringmechanismen zu erstellen.
Für die Speicherung von Protokollen fallen Kosten an, die vom aufgenommenen Volumen und der Aufbewahrungsdauer abhängen.
Weitere Informationen zu Plattformprotokollen finden Sie unter Google Cloud-Plattformprotokolle.
Erforderliche Rollen und Berechtigungen für die Verwendung von Plattformprotokollen
Prüfen Sie zuerst, ob Sie Zugriff auf die Protokollierung haben.
Sie benötigen die IAM-Rolle (Identity and Access Management) Logbetrachter (roles/logging.viewer)
. Weitere Informationen zum Logging-Zugriff finden Sie unter Zugriffssteuerung mit IAM.
Im Folgenden wird beschrieben, wie Sie den IAM-Zugriff überprüfen und gewähren:
Sehen Sie sich die aktuellen Zugriffsrechte an, um den Zugriff der einzelnen Hauptkonten zu prüfen.
Weisen Sie den entsprechenden Hauptkonten in Ihrem Projekt eine Rolle zu.
Plattformlogs aktivieren
Plattformprotokolle sind für importierte Themen standardmäßig deaktiviert. Sie können Plattformprotokolle aktivieren, wenn Sie ein Cloud Storage-Importthema erstellen oder aktualisieren.
Wenn Sie Plattformlogs deaktivieren möchten, aktualisieren Sie das Cloud Storage-Importthema.
Plattformprotokolle beim Erstellen eines Cloud Storage-Importthemas aktivieren
Sie müssen die Voraussetzungen für das Erstellen eines Cloud Storage-Importthemas erfüllen.
So erstellen Sie ein Cloud Storage-Importthema mit aktivierten Plattformprotokollen:
Console
-
Rufen Sie in der Google Cloud Console die Seite Themen auf.
Klicken Sie auf Thema erstellen.
Die Seite mit den Themendetails wird geöffnet.
Geben Sie im Feld Themen-ID eine ID für das Cloud Storage-Importthema ein.
Weitere Informationen zur Benennung von Themen finden Sie in den Benennungsrichtlinien.
Wählen Sie Standardabo hinzufügen aus.
Wählen Sie Aufnahme aktivieren aus.
- Geben Sie die Optionen für die Datenaufnahme an. Folgen Sie dazu der Anleitung unter Cloud Storage-Importthema erstellen.
- Wählen Sie Plattformprotokolle aktivieren aus.
- Behalten Sie die anderen Standardeinstellungen bei.
- Klicken Sie auf Thema erstellen.
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.
Wenn Sie Plattformprotokolle aktivieren möchten, muss das Flag
--ingestion-log-severity
aufWARNING
oder höher gesetzt sein. Führen Sie den Befehlgcloud pubsub topics create
aus:gcloud pubsub topics create TOPIC_ID\ --cloud-storage-ingestion-bucket=BUCKET_NAME\ --cloud-storage-ingestion-input-format=INPUT_FORMAT\ --ingestion-log-severity=WARNING
Ersetzen Sie Folgendes:
TOPIC_ID: Der Name oder die ID des Themas.
BUCKET_NAME: Gibt den Namen eines vorhandenen Buckets an. Beispiel:
prod_bucket
. Der Bucket-Name darf keine Projekt-ID enthalten. Informationen zum Erstellen eines Buckets finden Sie unter Buckets erstellen.INPUT_FORMAT: Gibt das Format der aufgenommenen Objekte an. Das kann
text
,avro
oderpubsub_avro
sein. Weitere Informationen zu diesen Optionen finden Sie unter Eingabeformat.
Falls Probleme auftreten, lesen Sie den Hilfeartikel Probleme beim Importieren von Daten aus Google Cloud Storage beheben.
Plattformprotokolle beim Aktualisieren eines Cloud Storage-Importthemas aktivieren
Führen Sie diese Schritte aus:
Console
Rufen Sie in der Google Cloud Console die Seite Themen auf.
Klicken Sie auf das Thema „Cloud Storage-Import“.
Klicken Sie auf der Seite mit den Themendetails auf Bearbeiten.
- Wählen Sie Plattformprotokolle aktivieren aus.
Klicken Sie auf Aktualisieren.
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.
Damit die Einstellungen für das importierte Thema nicht verloren gehen, sollten Sie sie jedes Mal angeben, wenn Sie das Thema aktualisieren. Wenn du etwas auslässt, wird die Einstellung von Pub/Sub auf den ursprünglichen Standardwert zurückgesetzt.
Wenn Sie Plattformlogs aktivieren möchten, muss „ingestion-log-severity“ auf
WARNING
gesetzt sein. Führen Sie den Befehlgcloud pubsub topics update
mit allen im folgenden Beispiel genannten Flags aus: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
Ersetzen Sie Folgendes:
TOPIC_ID ist die ID oder der Name des Themas. Dieses Feld kann nicht aktualisiert werden.
BUCKET_NAME: Gibt den Namen eines vorhandenen Buckets an. Beispiel:
prod_bucket
. Der Bucket-Name darf keine Projekt-ID enthalten.INPUT_FORMAT: Gibt das Format der aufgenommenen Objekte an. Das kann
text
,avro
oderpubsub_avro
sein. Weitere Informationen zu diesen Optionen finden Sie unter Eingabeformat.-
TEXT_DELIMITER: Gibt das Trennzeichen an, mit dem Textobjekte in Pub/Sub-Nachrichten aufgeteilt werden. Dies sollte ein einzelnes Zeichen sein und nur festgelegt werden, wenn
INPUT_FORMAT
text
ist. Standardmäßig ist das Zeilenumbruchzeichen (\n
) festgelegt.Achten Sie bei der Verwendung der gcloud CLI zum Angeben des Trennzeichens genau auf die Behandlung von Sonderzeichen wie dem Zeilenumbruch
\n
. Verwenden Sie das Format'\n'
, damit das Trennzeichen richtig interpretiert wird. Wenn Sie\n
ohne Anführungszeichen oder Escape-Zeichen verwenden, wird das Trennzeichen"n"
verwendet. -
MINIMUM_OBJECT_CREATE_TIME: Gibt die Mindestzeit an, zu der ein Objekt erstellt wurde, damit es aufgenommen werden kann. Sie muss im UTC-Format
YYYY-MM-DDThh:mm:ssZ
vorliegen. Beispiel:2024-10-14T08:30:30Z
Gültig sind alle Datumsangaben zwischen
0001-01-01T00:00:00Z
und9999-12-31T23:59:59Z
, sowohl in der Vergangenheit als auch in der Zukunft. -
MATCH_GLOB: Gibt das Glob-Muster an, das mit einem Objekt übereinstimmen muss, damit es aufgenommen wird. Wenn Sie die gcloud CLI verwenden, muss das Zeichen
*
in einem Matchglob mit*
-Zeichen in Form von\*\*.txt
formatiert sein oder der gesamte Matchglob muss in Anführungszeichen"**.txt"
oder'**.txt'
stehen. Informationen zur unterstützten Syntax für Glob-Muster finden Sie in der Cloud Storage-Dokumentation.
Plattformlogs deaktivieren
Führen Sie diese Schritte aus:
Console
Rufen Sie in der Google Cloud Console die Seite Themen auf.
Klicken Sie auf das Thema „Cloud Storage-Import“.
Klicken Sie auf der Seite mit den Themendetails auf Bearbeiten.
- Entfernen Sie das Häkchen bei Plattformlogs aktivieren.
Klicken Sie auf Aktualisieren.
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.
Damit die Einstellungen für das importierte Thema nicht verloren gehen, sollten Sie sie jedes Mal angeben, wenn Sie das Thema aktualisieren. Wenn du etwas auslässt, wird die Einstellung von Pub/Sub auf den ursprünglichen Standardwert zurückgesetzt.
Wenn Sie Plattformprotokolle deaktivieren möchten, muss „ingestion-log-severity“ auf
DISABLED
gesetzt sein. Führen Sie den Befehlgcloud pubsub topics update
mit allen im folgenden Beispiel genannten Flags aus: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
Ersetzen Sie Folgendes:
TOPIC_ID ist die ID oder der Name des Themas. Dieses Feld kann nicht aktualisiert werden.
BUCKET_NAME: Gibt den Namen eines vorhandenen Buckets an. Beispiel:
prod_bucket
. Der Bucket-Name darf keine Projekt-ID enthalten.INPUT_FORMAT: Gibt das Format der aufgenommenen Objekte an. Das kann
text
,avro
oderpubsub_avro
sein. Weitere Informationen zu diesen Optionen finden Sie unter Eingabeformat.-
TEXT_DELIMITER: Gibt das Trennzeichen an, mit dem Textobjekte in Pub/Sub-Nachrichten aufgeteilt werden. Dies sollte ein einzelnes Zeichen sein und nur festgelegt werden, wenn
INPUT_FORMAT
text
ist. Standardmäßig ist das Zeilenumbruchzeichen (\n
) festgelegt.Achten Sie bei der Verwendung der gcloud CLI zum Angeben des Trennzeichens genau auf die Behandlung von Sonderzeichen wie dem Zeilenumbruch
\n
. Verwenden Sie das Format'\n'
, damit das Trennzeichen richtig interpretiert wird. Wenn Sie\n
ohne Anführungszeichen oder Escape-Zeichen verwenden, wird das Trennzeichen"n"
verwendet. -
MINIMUM_OBJECT_CREATE_TIME: Gibt die Mindestzeit an, zu der ein Objekt erstellt wurde, damit es aufgenommen werden kann. Sie muss im UTC-Format
YYYY-MM-DDThh:mm:ssZ
vorliegen. Beispiel:2024-10-14T08:30:30Z
Gültig sind alle Datumsangaben zwischen
0001-01-01T00:00:00Z
und9999-12-31T23:59:59Z
, sowohl in der Vergangenheit als auch in der Zukunft. -
MATCH_GLOB: Gibt das Glob-Muster an, das mit einem Objekt übereinstimmen muss, damit es aufgenommen wird. Wenn Sie die gcloud CLI verwenden, muss das Zeichen
*
in einem Matchglob mit*
-Zeichen in Form von\*\*.txt
formatiert sein oder der gesamte Matchglob muss in Anführungszeichen"**.txt"
oder'**.txt'
stehen. Informationen zur unterstützten Syntax für Glob-Muster finden Sie in der Cloud Storage-Dokumentation.
Plattformprotokolle ansehen
So rufen Sie Plattformprotokolle für das Cloud Storage-Importthema auf:
Google Cloud Console
Öffnen Sie in der Google Cloud Console den Log-Explorer.
Wählen Sie ein Google Cloud-Projekt aus.
Wechseln Sie bei Bedarf im Menü Upgrade von Legacy-Loganzeige zu Log-Explorer.
Wenn Sie Ihre Logs so filtern möchten, dass nur Einträge zu Cloud Storage-Importthemen angezeigt werden, geben Sie in das Abfragefeld
resource.type="resource.type=pubsub_topic AND severity=WARNING
ein und klicken Sie auf Abfrage ausführen.Klicken Sie im Bereich Abfrageergebnisse auf Zeit bearbeiten, um den Zeitraum zu ändern, für den Ergebnisse zurückgegeben werden sollen.
Weitere Informationen zur Verwendung des Log-Explorers finden Sie unter Log-Explorer verwenden.
gcloud-CLI
Wenn Sie mit der gcloud CLI nach Plattformprotokollen für Cloud Storage-Importthemen suchen möchten, verwenden Sie den Befehl gcloud logging read
.
Geben Sie einen Filter an, um Ihre Ergebnisse auf Plattformprotokolle für Cloud Storage-Importthemen zu beschränken.
gcloud logging read "resource.type=pubsub_topic AND severity=WARNING"
Cloud Logging API
Verwenden Sie die Cloud Logging API-Methode entries.list
.
Verwenden Sie das Feld filter
, um Ihre Ergebnisse so zu filtern, dass nur Plattformprotokolle für Cloud Storage-Importthemen enthalten sind. Unten finden Sie ein Beispiel für ein JSON-Anfrageobjekt.
{
"resourceNames":
[
"projects/my-project-name"
],
"orderBy": "timestamp desc",
"filter": "resource.type=\"pubsub_topic\" AND severity=WARNING"
}
Plattformprotokollformat ansehen und verstehen
Im folgenden Abschnitt finden Sie Beispielplattformprotokolle und eine Beschreibung der Felder für Plattformprotokolle.
Alle plattformspezifischen Felder für Protokolle sind in einem jsonPayload
-Objekt enthalten.
Avro-Fehler
{
"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"
}
Logfeld | Beschreibung |
---|---|
insertId |
Eindeutige Kennung des Logeintrags. |
jsonPayload.@type |
Gibt den Ereignistyp an. Immer type.googleapis.com/google.pubsub.v1.IngestionFailureEvent . |
jsonPayload.cloudStorageFailure.objectGeneration |
Die Generierungsnummer des Cloud Storage-Objekts. |
jsonPayload.cloudStorageFailure.bucket |
Der Cloud Storage-Bucket, der das Objekt enthält. |
jsonPayload.cloudStorageFailure.objectName |
Der Name des Cloud Storage-Objekts. |
jsonPayload.cloudStorageFailure.avroFailureReason |
Enthält genauere Details zum Avro-Parsing-Fehler. Dieses Feld bleibt leer. |
jsonPayload.topic |
Das Pub/Sub-Thema, für das die Nachricht bestimmt war. |
jsonPayload.errorMessage |
Eine für Menschen lesbare Fehlermeldung. |
resource.type |
Der Ressourcentyp. Immer pubsub_topic . |
resource.labels.project_id |
Die Google Cloud-Projekt-ID. |
resource.labels.topic_id |
Die Pub/Sub-Themen-ID. |
timestamp |
Zeitstempel der Erstellung des Logeintrags. |
severity |
Schweregrad: WARNING |
logName |
Name des Logs. |
receiveTimestamp |
Zeitstempel für den Empfang des Logeintrags. |
Textfehler
{
"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"
}
Logfeld | Beschreibung |
---|---|
insertId |
Eindeutige Kennung des Logeintrags. |
jsonPayload.@type |
Gibt den Ereignistyp an. Immer type.googleapis.com/google.pubsub.v1.IngestionFailureEvent . |
jsonPayload.cloudStorageFailure.objectGeneration |
Die Generierungsnummer des Cloud Storage-Objekts. |
jsonPayload.cloudStorageFailure.bucket |
Der Cloud Storage-Bucket, der das Objekt enthält. |
jsonPayload.cloudStorageFailure.objectName |
Der Name des Cloud Storage-Objekts. |
jsonPayload.cloudStorageFailure.apiViolationReason |
Enthält Details zum API-Verstoß. Dieses Feld bleibt leer. |
jsonPayload.topic |
Das Pub/Sub-Thema. |
jsonPayload.errorMessage |
Eine für Menschen lesbare Nachricht. |
resource.type |
Ressourcentyp, immer pubsub_topic . |
resource.labels.project_id |
Google Cloud-Projekt-ID |
resource.labels.topic_id |
Pub/Sub-Themen-ID. |
timestamp |
Zeitstempel der Erstellung des Logeintrags. |
severity |
Schweregrad: WARNING |
logName |
Name des Logs. |
receiveTimestamp |
Zeitpunkt, zu dem der Logeintrag von Logging empfangen wurde. |