プラットフォームのログを使用してインポート トピックのトラブルシューティングを行う

このガイドでは、 Google Cloud プラットフォーム ログを使用して、Cloud Storage インポート トピック、Azure Event Hubs インポート トピック、Amazon MSK インポート トピック、Confluent Cloud インポート トピックなどのインポート トピックを使用する際の問題のトラブルシューティングを行う方法について説明します。

プラットフォーム ログについて

サポートされている Google Cloud サービスは、独自のプラットフォーム ログセットを生成し、そのサービスのオペレーションに関連するイベントとアクティビティをキャプチャします。これらのプラットフォーム ログには、オペレーションの成功、エラー、警告、その他の注目すべきイベントなど、サービス内で発生した事象に関する詳細情報が含まれます。

プラットフォーム ログは Cloud Logging の一部であり、同じ機能を共有します。たとえば、プラットフォーム ログの重要な機能のリストは次のとおりです。

  • 通常、ログは JSON オブジェクトとして構造化され、さらにクエリとフィルタリングが可能です。

  • プラットフォーム ログは、コンソールの Logging を使用して表示できます。

  • プラットフォーム ログを Cloud Monitoring やその他のモニタリング ツールと統合して、ダッシュボード、アラート、その他のモニタリング メカニズムを作成することもできます。

  • ログ ストレージには、取り込まれた量と保持期間に基づく費用が発生します。

プラットフォームのログの詳細については、Google Cloud プラットフォーム ログをご覧ください。

始める前に

使用するトピックの作成の前提条件を満たしていることを確認します。

必要なロールと権限

始める前に、Logging にアクセスできることを確認してください。ログ閲覧者 (roles/logging.viewer) Identity and Access Management(IAM)ロールが必要です。Logging のアクセスの詳細については、IAM によるアクセス制御をご覧ください。

以下では、IAM アクセス権を確認して付与する方法を説明します。

インポート トピックの取り込みエラーについて

トピックのインポートで、データが正常に取り込まれない問題が発生することがあります。

Cloud Storage インポートのトピック

Cloud Storage インポート トピックでは、データが正常に取り込まれない問題が発生することがあります。たとえば、Cloud Storage インポート トピックを使用すると、Cloud Storage オブジェクトまたはオブジェクトの一部を取り込む際に問題が発生することがあります。

次のリストに、プラットフォーム ログを生成する Cloud Storage インポート トピックで取り込みに失敗する理由を示します。

  • メッセージのサイズ

    • 個々のメッセージのサイズは 10 MB 以下にする必要があります。一致した場合、メッセージ全体がスキップされます。

    • Avro 形式または Pub/Sub Avro 形式を使用している場合、Avro ブロックのサイズは 16 MB 以下にする必要があります。サイズの大きい Avro ブロックはスキップされます。

  • メッセージ属性

    • メッセージに設定できる属性は最大 100 個です。メッセージの取り込み時に、余分な属性は破棄されます。

    • 属性キーは 256 バイト以下にする必要があります。値は 1,024 バイト以下にする必要があります。値が最大サイズより大きい場合、取り込み時に Key-Value ペア全体がメッセージから破棄されます。

      メッセージキーと属性の使用に関するガイドラインの詳細については、属性を使用してメッセージをパブリッシュするをご覧ください。

  • Avro のフォーマット

    • Avro オブジェクトの形式が正しいことを確認します。形式が正しくないと、メッセージは取り込まれません。
  • データ形式

Azure Event Hubs、Amazon MSK、Confluent Cloud のトピックのインポート

Azure Event Hubs、Amazon MSK、Confluent Cloud のインポート トピックで、データが正常に取り込まれない問題が発生することがあります。

次のリストに、プラットフォーム ログを生成するインポート トピックで取り込みに失敗する理由を示します。

  • メッセージのサイズ

    • 個々のメッセージのサイズは 10 MB 以下にする必要があります。一致した場合、メッセージ全体がスキップされます。
  • メッセージ属性

    • メッセージに設定できる属性は最大 100 個です。メッセージの取り込み時に、余分な属性は破棄されます。

    • 属性キーは 256 バイト以下にする必要があります。値は 1,024 バイト以下にする必要があります。値が最大サイズより大きい場合、取り込み時に Key-Value ペア全体がメッセージから破棄されます。

      メッセージキーと属性の使用に関するガイドラインの詳細については、属性を使用してメッセージをパブリッシュするをご覧ください。

プラットフォームのログを有効にする

インポート トピックでは、プラットフォーム ログはデフォルトで無効になっています。プラットフォーム ログは、インポート トピックの作成時または更新時に有効にできます。プラットフォーム ログを無効にするには、インポート トピックを更新します。

インポート トピックの作成時にプラットフォーム ログを有効にする

インポート トピックの作成時にプラットフォーム ログを有効にするには、次の操作を行います。

Console

  1. Google Cloud コンソールの トピック ページに移動します。

    [トピック] に移動

  2. [トピックを作成] をクリックします。

    トピックの詳細ページが開きます。

  3. [トピック ID] フィールドに、インポート トピックの ID を入力します。

    トピックの命名の詳細については、命名ガイドラインをご覧ください。

  4. [デフォルトのサブスクリプションを追加する] を選択します。

  5. [取り込みを有効にする] を選択します。

  6. 他のデフォルト設定はそのままにします。
  7. [トピックを作成] をクリックします。

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. プラットフォーム ログを有効にするには、--ingestion-log-severity フラグが WARNING またはそれより低い重大度レベル(INFODEBUG など)に設定されていることを確認します。使用しているトピックごとに gcloud pubsub topics create コマンドを実行します。

    たとえば、Cloud Storage インポート トピックでプラットフォーム ログを有効にするには、gcloud pubsub topics create コマンドに --ingestion-log-severity=WARNING フラグを追加します。

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

インポート トピックの更新中にプラットフォーム ログを有効にする

インポート トピックの更新時にプラットフォーム ログを有効にするには、次の操作を行います。

Console

  1. Google Cloud コンソールの トピック ページに移動します。

    [トピック] に移動

  2. 使用しているインポート トピック(Cloud Storage インポート トピック、Azure Event Hubs インポート トピック、Amazon MSK インポート トピック、Confluent Cloud インポート トピック)をクリックします。

  3. [トピックの詳細] ページで、[編集] をクリックします。

  4. [プラットフォーム ログを有効にする] を選択します。
  5. [更新] をクリックします。

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. プラットフォーム ログを有効にするには、ingestion-log-severity が WARNING またはそれより低い重大度レベル(INFODEBUG など)に設定されていることを確認します。使用している各トピックの設定を指定するすべてのフラグを指定して、gcloud pubsub topics update コマンドを実行します。

    たとえば、既存の Cloud Storage インポート トピックのログを更新するには、gcloud pubsub topics create コマンドに --ingestion-log-severity=WARNING フラグを含め、Cloud Storage インポート トピックの設定を指定するすべてのフラグ値を含めます。

    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

プラットフォームのログを無効にする

使用しているインポート トピックのプラットフォーム ログを無効にするには、次の操作を行います。

Console

  1. Google Cloud コンソールの トピック ページに移動します。

    [トピック] に移動

  2. 使用しているインポート トピック(Cloud Storage インポート トピック、Azure Event Hubs インポート トピック、Amazon MSK インポート トピック、Confluent Cloud インポート トピック)をクリックします。

  3. [トピックの詳細] ページで、[編集] をクリックします。

  4. [プラットフォーム ログを有効にする] をオフにします。
  5. [更新] をクリックします。

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. プラットフォーム ログを無効にするには、ingestion-log-severity が DISABLED に設定されていることを確認します。使用している各トピックの設定を指定するすべてのフラグを指定して、gcloud pubsub topics update コマンドを実行します。

    たとえば、既存の Cloud Storage インポート トピックでログを無効にするには、gcloud pubsub topics update コマンドに --ingestion-log-severity=DISABLED フラグを指定し、Cloud Storage インポート トピックの設定を指定するすべてのフラグを指定します。

    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

プラットフォーム ログを表示する

使用しているインポート トピックのプラットフォーム ログを表示する手順は次のとおりです。

Google Cloud コンソール

  1. Google Cloud コンソールで、[ログ エクスプローラ] に移動します。

    [ログ エクスプローラ] に移動

  2. Google Cloud プロジェクトを選択します。

  3. 必要に応じて、[アップグレード] メニューで [以前のログビューア] から [ログ エクスプローラ] に切り替えます。

  4. [クエリを表示] をクリックします。

  5. ログをフィルタリングして、使用しているインポート トピック(Cloud Storage インポート トピック、Azure Event Hubs インポート トピック、Amazon MSK インポート トピック、Confluent Cloud インポート トピック)のエントリのみを表示するには、クエリ フィールドに「resource.type="resource.type=pubsub_topic AND severity=WARNING"」と入力して [クエリを実行] をクリックします。

  6. [クエリ結果] ペインで [日時を編集する] をクリックし、結果を返す期間を変更します。

ログ エクスプローラの使用方法については、ログ エクスプローラの使用をご覧ください。

gcloud CLI

gcloud CLI を使用して、使用している各インポート トピックのプラットフォーム ログを検索するには、gcloud logging read コマンドを使用します。

フィルタを指定して、使用している各インポート トピック(Cloud Storage インポート トピック、Azure Event Hubs インポート トピック、Amazon MSK インポート トピック、Confluent Cloud インポート トピック)のプラットフォーム ログに結果を限定します。

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

Cloud Logging API

entries.list Cloud Logging API メソッドを使用します。

Cloud Storage インポート トピックのプラットフォーム ログのみを含むように結果をフィルタするには、filter フィールドを使用します。次の JSON リクエスト オブジェクトの例を示します。

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

プラットフォーム ログの形式を表示して理解する

次のセクションでは、プラットフォーム ログの例と、プラットフォーム ログのフィールドについて説明します。

プラットフォーム ログ固有のフィールドはすべて、jsonPayload オブジェクトに格納されます。

Cloud Storage

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/my-project/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": "my-project",
      "topic_id": "avro_bucket_topic"
    }
  },
  "timestamp": "2024-10-07T18:55:45.650103193Z",
  "severity": "WARNING",
  "logName": "projects/my-project/logs/pubsub.googleapis.com%2Fingestion_failures",
  "receiveTimestamp": "2024-10-07T18:55:46.678221398Z"
}
ログフィールド 説明
insertId ログエントリの一意の識別子。
jsonPayload.@type イベントタイプを識別します。常に type.googleapis.com/google.pubsub.v1.IngestionFailureEvent です。
jsonPayload.cloudStorageFailure.objectGeneration Cloud Storage オブジェクトの世代番号。
jsonPayload.cloudStorageFailure.bucket オブジェクトを含む Cloud Storage バケット。
jsonPayload.cloudStorageFailure.objectName Cloud Storage オブジェクトの名前。
jsonPayload.cloudStorageFailure.avroFailureReason Avro 解析エラーの詳細が含まれます。このフィールドは空白のままにします。
jsonPayload.topic メッセージの宛先となる Pub/Sub トピック。
jsonPayload.errorMessage 人が読めるエラー メッセージ。
resource.type リソースの型。 常に pubsub_topic です。
resource.labels.project_id Google Cloud プロジェクト ID。
resource.labels.topic_id Pub/Sub トピック ID。
timestamp ログエントリの生成タイムスタンプ。
severity 重大度レベル(WARNING)。
logName ログの名前。
receiveTimestamp ログエントリの受信タイムスタンプ。

テキストエラー

{
  "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/my-project/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": "my-project"
    }
  },
  "timestamp": "2024-10-09T14:09:07.760488386Z",
  "severity": "WARNING",
  "logName": "projects/my-project/logs/pubsub.googleapis.com%2Fingestion_failures",
  "receiveTimestamp": "2024-10-09T14:09:08.483589656Z"
}
ログフィールド 説明
insertId ログエントリの一意の識別子。
jsonPayload.@type イベントタイプを識別します。常に type.googleapis.com/google.pubsub.v1.IngestionFailureEvent です。
jsonPayload.cloudStorageFailure.objectGeneration Cloud Storage オブジェクトの世代番号。
jsonPayload.cloudStorageFailure.bucket オブジェクトを含む Cloud Storage バケット。
jsonPayload.cloudStorageFailure.objectName Cloud Storage オブジェクトの名前。
jsonPayload.cloudStorageFailure.apiViolationReason API 違反の詳細が含まれます。このフィールドは空白のままにします。
jsonPayload.topic Pub/Sub トピック。
jsonPayload.errorMessage 人が読めるメッセージ。
resource.type リソースタイプ(常に pubsub_topic)。
resource.labels.project_id Google Cloud プロジェクト ID。
resource.labels.topic_id Pub/Sub トピック ID。
timestamp ログエントリの生成タイムスタンプ。
severity 重大度レベル(WARNING)。
logName ログの名前。
receiveTimestamp Cloud Logging がログエントリを受信した時刻。

Amazon MSK

API 違反

  {
  "insertId": "k3breb2q",
  "jsonPayload": {
    "@type": "type.googleapis.com/google.pubsub.v1.IngestionFailureEvent",
    "awsMskFailure": {
      "apiViolationReason": {},
      "clusterArn": "arn:aws:kafka:us-east-1:291552718126:cluster/cluster-ingestion/abb9faea-4070-4eb76-9c21-f98abca92eaf-2",
      "kafkaTopic": "msk-topic",
      "partitionId": "1",
      "offset": "11"
    },
    "errorMessage": "The value of an attribute in the message exceeded the maximum allowed size of 1024 bytes. Number of bytes in the value: 1025. Key: my header. Value: my very large value …",
    "topic": "projects/my-project/topics/msk-import-topic"
  },
  "resource": {
    "type": "pubsub_topic",
    "labels": {
      "topic_id": "msk-import-topic",
      "project_id": "my-project"
    }
  },
  "timestamp": "2025-02-03T16:18:14.693357960Z",
  "severity": "WARNING",
  "logName": "projects/my-project/logs/pubsub.googleapis.com%2Fingestion_failures",
  "receiveTimestamp": "2025-02-03T16:18:16.241643258Z"
}
ログフィールド 説明
insertId ログエントリの一意の識別子。
jsonPayload.@type イベントタイプを識別します。常に type.googleapis.com/google.pubsub.v1.IngestionFailureEvent です。
jsonPayload.awsMskFailure.clusterArn 取り込まれるトピックのクラスタの ARN。
jsonPayload.awsMskFailure.kafkaTopic 取り込む Kafka トピックの名前。
jsonPayload.awsMskFailure.partitionId 取り込みに失敗したメッセージを含むパーティションの ID。
jsonPayload.awsMskFailure.offset 取り込みに失敗したメッセージのパーティション内のオフセット。
jsonPayload.awsMskFailure.apiViolationReason API 違反の詳細が含まれます。このフィールドは空白のままにします。
jsonPayload.topic Pub/Sub トピック。
jsonPayload.errorMessage 人が読めるメッセージ。
resource.type リソースタイプ(常に pubsub_topic)。
resource.labels.project_id Google Cloud プロジェクト ID。
resource.labels.topic_id Pub/Sub トピック ID。
timestamp ログエントリの生成タイムスタンプ。
severity 重大度レベル(WARNING)。
logName ログの名前。
receiveTimestamp Cloud Logging がログエントリを受信した時刻。

Azure Event Hubs

API 違反

{
  "insertId": "i1fbqnb12",
  "jsonPayload": {
    "@type": "type.googleapis.com/google.pubsub.v1.IngestionFailureEvent",
    "azureEventHubsFailure": {
      "apiViolationReason": {},
      "namespace": "my-namespace",
      "eventHub": "my-event-hub",
      "partitionId": "1",
      "offset": "15"
    },
    "errorMessage": "The value of an attribute in the message exceeded the maximum allowed size of 1024 bytes. Number of bytes in the value: 1025. Key: my header. Value: my very large value …",
    "topic": "projects/my-project/topics/event-hubs-import-topic"
  },
  "resource": {
    "type": "pubsub_topic",
    "labels": {
      "topic_id": "event-hubs-import-topic",
      "project_id": "my-project"
    }
  },
  "timestamp": "2025-02-03T16:18:14.693357960Z",
  "severity": "WARNING",
  "logName": "projects/my-project/logs/pubsub.googleapis.com%2Fingestion_failures",
  "receiveTimestamp": "2025-02-03T14:05:12.338211450Z"
}
ログフィールド 説明
insertId ログエントリの一意の識別子。
jsonPayload.@type イベントタイプを識別します。常に type.googleapis.com/google.pubsub.v1.IngestionFailureEvent です。
jsonPayload.azureEventHubsFailure.namespace 取り込み元のイベントハブを含む名前空間。
jsonPayload.azureEventHubsFailure.eventHub 取り込まれるイベントハブの名前。
jsonPayload.azureEventHubsFailure.partitionId 取り込みに失敗したメッセージを含むパーティションの ID。
jsonPayload.azureEventHubsFailure.offset 取り込みに失敗したメッセージのパーティション内のオフセット。
jsonPayload.azureEventHubsFailure.apiViolationReason API 違反の詳細が含まれます。このフィールドは空白のままにします。
jsonPayload.topic Pub/Sub トピック。
jsonPayload.errorMessage 人が読めるメッセージ。
resource.type リソースタイプ(常に pubsub_topic)。
resource.labels.project_id Google Cloud プロジェクト ID。
resource.labels.topic_id Pub/Sub トピック ID。
timestamp ログエントリの生成タイムスタンプ。
severity 重大度レベル(WARNING)。
logName ログの名前。
receiveTimestamp Cloud Logging がログエントリを受信した時刻。

Confluent Cloud

テキストエラー

{
  "insertId": "i1fbqnb14",
  "jsonPayload": {
    "@type": "type.googleapis.com/google.pubsub.v1.IngestionFailureEvent",
    "confluentCloudFailure": {
      "apiViolationReason": {},
      "clusterId": "lma-1x18ae",
      "kafkaTopic": "confluent-topic",
      "partitionId": "1",
      "offset": "19"
    },
    "errorMessage": "The value of an attribute in the message exceeded the maximum allowed size of 1024 bytes. Number of bytes in the value: 1025. Key: my header. Value: my very large value …",
    "topic": "projects/my-project/topics/confluent-import-topic"
  },
  "resource": {
    "type": "pubsub_topic",
    "labels": {
      "topic_id": "confluent-import-topic",
      "project_id": "my-project"
    }
  },
  "timestamp": "2025-02-03T16:18:14.693357960Z",
  "severity": "WARNING",
  "logName": "projects/my-project/logs/pubsub.googleapis.com%2Fingestion_failures",
  "receiveTimestamp": "2025-02-03T17:03:11.428221440Z"
}
ログフィールド 説明
insertId ログエントリの一意の識別子。
jsonPayload.@type イベントタイプを識別します。常に type.googleapis.com/google.pubsub.v1.IngestionFailureEvent です。
jsonPayload.confluentCloudFailure.clusterId 取り込み元のトピックを含むクラスタ ID。
jsonPayload.confluentCloudFailure.kafkaTopic 取り込む Kafka トピックの名前。
jsonPayload.confluentCloudFailure.partitionId 取り込みに失敗したメッセージを含むパーティションの ID。
jsonPayload.confluentCloudFailure.offset 取り込みに失敗したメッセージのパーティション内のオフセット。
jsonPayload.confluentCloudFailure.apiViolationReason API 違反の詳細が含まれます。このフィールドは空白のままにします。
jsonPayload.topic Pub/Sub トピック。
jsonPayload.errorMessage 人が読めるメッセージ。
resource.type リソースタイプ(常に pubsub_topic)。
resource.labels.project_id Google Cloud プロジェクト ID。
resource.labels.topic_id Pub/Sub トピック ID。
timestamp ログエントリの生成タイムスタンプ。
severity 重大度レベル(WARNING)。
logName ログの名前。
receiveTimestamp Cloud Logging がログエントリを受信した時刻。
Apache Kafka® は、Apache Software Foundation または米国その他の諸国における関連会社の登録商標です。