Log Analytics 構成のトラブルシューティング

このドキュメントでは、 Google Cloud コンソールの [ログ分析] ページを使用するときに発生する可能性のあるエラーを解決する方法について説明します。

エラー メッセージ

このセクションでは、表示される可能性があるエラー メッセージと、対応するエラー条件の解決方法について説明します。

No completion signal within allotted timeframe エラー メッセージ

SQL クエリを入力し、[クエリを実行] を選択します。クエリが完了せず、次のエラー メッセージが表示されます。

The query failed to execute and return results due to error: No completion signal within allotted timeframe.

このエラーを解決するには、以下のいずれかを行います。

  • ログがクエリされる期間を短くしてから、クエリを再試行します。 たとえば、クエリ間隔が 14 日の場合は、間隔を 7 日に短縮してからクエリを実行します。

  • リンクされた BigQuery データセットを作成し、BigQuery インターフェースからクエリを実行します。BigQuery インターフェースは、Cloud Logging インターフェースよりも長い実行の時間を必要とするクエリをサポートしています。詳細については、リンクされた BigQuery データセットに対してクエリを実行するをご覧ください。

異なる CMEK キーを持つバケットに対するクエリのエラー メッセージ

複数のログバケットに対してクエリを実行する SQL クエリを入力し、[クエリを実行] を選択します。クエリが完了せず、次のエラー メッセージが表示されます。

Queries against buckets with distinct CMEK keys must have a key configured in the LogSettings.

この問題を解決するには、以下のいずれかを行います。

  • 同じ Cloud Key Management Service(Cloud KMS)鍵を使用するようにログバケットを構成します。
  • ログバケットが同じロケーションにある場合は、デフォルトの Cloud KMS 鍵を使用して、ログバケットの親リソースであるフォルダまたは組織を構成できます。親のデフォルトキーは、ログバケットと同じロケーションに配置する必要があります。この構成では、親のデフォルトキーによって、ログ分析クエリによって生成された一時データが暗号化されます。詳細については、ログ分析の概要をご覧ください。

FROM 句にはビューエラー メッセージを 1 つだけ含める必要がある

Google Cloud コンソールの [ログ分析] ページのクエリペインに SQL クエリを入力しますが、SQL パーサーは次のエラーを表示します。

FROM clause must contain exactly one log view

上記のエラーは、FROM ステートメントで指定されたテーブルを特定のログビューに対して解決できない場合に報告されます。

このエラーを解決するには、テーブル名の構文が正しいことを確認します。

  • テーブル名がログ分析の命名規則で必要な構文に従っていることを確認します。BigQuery とログ分析では、テーブル名の要件が異なります。テーブル名に必要な構文は、デフォルトのクエリを表示することで確認できます。

  • ログバケットの Google Cloud プロジェクト ID、リージョン、バケット ID、またはビュー ID にピリオド((.))が含まれている場合は、各フィールドが単一バッククォート((`))で囲まれていることを確認します。

    たとえば、 Google Cloud プロジェクト ID が example.com:bluebird の場合、_Default ログバケットの _AllLogs ビューをクエリするには、次の構文を使用してテーブルを指定します。

    
    SELECT *
    FROM `example.com:bluebird`.`global`.`_Default`.`_AllLogs`
    

    前のクエリは、_Default バケットが global リージョンにあることを前提としています。

クエリを保存できない

現在のクエリを保存するため、クエリを実行して [] [保存] をクリックしましたが、[クエリを保存] オプションが無効になっているか、ダイアログの手順を完了できません。

[クエリを保存] オプションが無効になっている場合、組織またはフォルダのデフォルトのリソース設定により、組織のポリシーで許可されていないロケーションが定義されます。このエラーを解決するには、組織のポリシーで許可されているロケーションと一致するロケーションをデフォルトのリソース設定で定義するよう、組織の管理者に依頼してください。詳しくは、組織とフォルダのデフォルト設定を構成するをご覧ください。

[クエリを保存] オプションが有効になっているが、ダイアログを完了してクエリを保存できない場合は、次の手順を行います。

  1. クエリに構文エラーが含まれていないことを確認します。 保存できるのは有効なクエリのみです。
  2. 省略可: クエリをクリップボードにコピーします。
  3. ページを再読み込みします。
  4. クエリをクリップボードにコピーした場合は、クエリを [クエリ] ペインに貼り付け、クエリを実行してから保存を行います。

アナリティクス ビューを作成できない

アナリティクス ビューを作成するために SQL クエリを入力して実行し、[] [保存] をクリックしても、[Save as analytic view] オプションが無効になっています。

この状況を解決するには、IAM ロールに次の権限が含まれていることを確認します。

  • observability.analyticsViews.{get, list, create, update, delete}

これらの権限は、事前定義された Cloud Logging ロールには含まれていません。必要なロールについては、アナリティクス ビューの作成とクエリ: 始める前にをご覧ください。

アナリティクス ビューをクエリできない

アナリティクス ビューをクエリする際に、[ログ分析] ページの [ビュー] ペインにアナリティクス ビューが表示されません。

この問題を解決するには、次のことを試してください。

  • IAM ロールに次の権限が含まれていることを確認します。

    • observability.analyticsViews.{get, list}

    これらの権限は、事前定義された Cloud Logging ロールには含まれていません。必要なロールについては、アナリティクス ビューの作成とクエリ: 始める前にをご覧ください。

  • アナリティクス ビューが Google Cloud プロジェクトに存在することを確認します。

[ログ分析] ページへのアクセスが拒否された

Google Cloud コンソールで [ログ分析] ページを開くと、権限拒否のエラー メッセージが表示されます。

[ログ分析] ページの読み込み、クエリの実行およびログの表示に必要な権限を取得するには、プロジェクトに対する次の IAM ロールの付与を管理者に依頼してください。

必要な権限は、カスタムロールや Logging 事前定義ロールから取得することもできます。

[ログ分析] ページでログエントリを表示してクエリを実行するために必要な権限は、[ログ エクスプローラ] ページでログを表示するために必要な権限と同じです。ユーザー定義バケットに対するビューのクエリ実行、または _Default ログバケットの _AllLogs ビューのクエリ実行のために必要な追加のロールについて詳しくは、Cloud Logging のロールをご覧ください。

ログ分析を使用するためのログバケットのアップグレードが失敗する

ログバケットを作成して、ログ分析を使用するオプションを選択するか、既存のログバケットをアップグレードして、ログ分析を使用します。次のようなエラー状態でアップグレードに失敗します。

Failed precondition (HTTP 400): Constraint "my-constraint" violated for PROJECT_ID  with location global.

上記のエラー メッセージは、使用可能なリージョンを制限する組織のポリシーが組織によって構成されていることを示しています。ログ分析を使用するようにアップグレードできるログバケットは、global リージョンを使用する必要があります。global リージョンの使用を制限する組織のポリシーを削除できる場合は、ログバケットをアップグレードできます。そうでなければ、ログバケットをアップグレードできません。

リンクされた BigQuery データセットの作成に失敗する

ログバケットを編集してリンクされた BigQuery データセットを作成するか、新しいログバケットを作成して、リンクされたデータセットを作成するオプションを選択しますが、リンクされたデータセットが作成されません。

このエラーを解決するには、次の権限を含む IAM ロールの付与を Google Cloud プロジェクトのシステム管理者に依頼してください。

  • logging.links.create

上記の権限は、Logging 管理者(roles/logging.admin)のロールとログ構成書き込み(roles/logging.configWriter)のロールに含まれています。

ロールと権限の詳細については、IAM を使用したアクセス制御をご覧ください。

リンクされた BigQuery データセットの削除に失敗する

リンクされたデータセットは不要になりましたが、そのデータセットを削除するオプションが無効になっています。

このエラーを解決するには、次の権限を含む IAM ロールの付与を Google Cloud プロジェクトのシステム管理者に依頼してください。

  • logging.links.delete

上記の権限は、Logging 管理者(roles/logging.admin)のロールとログ構成書き込み(roles/logging.configWriter)のロールに含まれています。

この権限があると、 Google Cloud コンソールの [ログストレージ] ページからリンクされたデータセットを削除できます。ロールと権限の詳細については、IAM を使用したアクセス制御をご覧ください。

クエリエンジンの設定ボタンが表示されない

[クエリを実行] ボタンの横に [設定] ボタンが表示されない場合、 Google Cloud プロジェクトで予約済みの BigQuery スロットが有効になっていません。 [設定] ボタンを有効にするには、プロジェクトに予約済みの BigQuery スロットを構成します。

BigQuery で実行 ボタンが無効になっている

[BigQuery で実行] ボタンが表示されているが無効になっている場合、クエリで参照されているログビューにリンクされたデータセットがありません。BigQuery スロット予約でクエリを実行するには、ログビューでリンクされた BigQuery データセットを作成します。

モニタリング サービス アカウントがない

SQL クエリの結果をモニタリングするアラート ポリシーを作成します。設定手順では、Monitoring サービス アカウントに IAM ロールを付与する必要がありますが、そのアカウントが存在しません。

Monitoring サービス アカウント は、Google Cloudによって作成および管理されるため、サービス エージェントと呼ばれます。アカウントは、アカウントを必要とするリソースまたはサービスを構成すると自動的に作成されます。たとえば、Pub/Sub 通知チャンネルを作成すると、そのアクションによって Monitoring サービス アカウントが作成される場合があります。

Monitoring サービス アカウントを作成して、SQL ベースのアラート ポリシーに必要な権限を付与する手順は次のとおりです。

  1. Monitoring サービス アカウントを作成します。詳細については、ロールを作成してサービス エージェントに付与するをご覧ください。

  2. Monitoring サービス アカウントに次のロールを付与します。

モニタリング サービス アカウントの権限拒否エラー

SQL クエリの結果をモニタリングするアラート ポリシーを作成したものの、Error authenticating service account で始まるメッセージとともに PermissionDenied エラーが表示される場合があります。

このエラーを解決するには、Monitoring サービス アカウントに次のロールを付与します。

ログ分析の結果に重複するログエントリがある

重複するエントリをカウントまたはレポートするクエリを実行します。ログ エクスプローラは、ログ名、タイムスタンプ、挿入 ID に基づいて重複エントリを削除するため、ログ分析はクエリの実行前にログエントリの重複を除去することが期待されます。

ログ分析では、ログ エクスプローラで実行されるタイプの重複除去は実行されません。

重複するログエントリを解決するには、次の操作を行います。

  1. 重複するログエントリの受信タイムスタンプ値が異なるかどうかを確認します。タイムスタンプが異なる場合、同じデータが Logging に複数回書き込まれたことを示します。

    重複する書き込みを解決するには、ロギングの統合でエラー メッセージや構成ミスがないか調査します。

  2. バケットが Cloud Key Management Service 鍵を使用するように構成されている場合は、割り当て内にあり、鍵に常にアクセス可能であることを確認します。割り当てを超えた場合や、鍵へのアクセス権が失われた場合、ログエントリが重複する可能性があります。

    これらのエラーを解決するには、割り当てを超えていないこと、鍵にアクセスできることを確認します。

  3. 重複するログエントリを削除するようにクエリを変更します。

    たとえば、JSON ペイロードに fieldAfieldB が含まれているとします。前者は文字列で、後者は数値です。また、JSON ペイロードに server というラベルのフィールドがあり、文字列が含まれているとします。次に、次のクエリについて考えてみましょう。

    SELECT
      JSON_VALUE(json_payload.fieldA) AS fieldA
      SUM(IFNULL(SAFE_CAST(JSON_VALUE(json_payload.fieldB) AS INT64), 0)) AS sum_fieldB
    FROM
      `TABLE_NAME_OF_LOG_VIEW`
    WHERE
      JSON_VALUE(json_payload.server) = "test"
    GROUP BY
      fieldA;
    

    重複するログエントリを削除するようにクエリを変更できます。この場合、ログ名、タイムスタンプ、挿入 ID が調べられ、ログエントリが重複かどうかが判断されます。

    WITH
      deduplicated AS (
      SELECT
        JSON_VALUE(json_payload.fieldA) AS fieldA
        IFNULL(SAFE_CAST(JSON_VALUE(json_payload.fieldB) AS INT64), 0) AS fieldB
      FROM
        `TABLE_NAME_OF_LOG_VIEW` a
      WHERE
        JSON_VALUE(json_payload.server) = "test"
      QUALIFY
        ROW_NUMBER() OVER (PARTITION BY a.log_name, a.timestamp, a.insert_id ) = 1 )
    
    SELECT
      fieldA,
      SUM(fieldB) AS sum_fieldB
    FROM
      deduplicated
    GROUP BY
      fieldA;