リンクされた BigQuery データセットに対してクエリを実行する

このドキュメントでは、ログバケットにリンクされたデータセットを作成する方法と、そのデータセット内のログをクエリして表示する方法について説明します。たとえば、リンクされたデータセットを作成して、予約済みの BigQuery スロットを使用してログ分析でクエリを実行できます。同様に、リンクされたデータセットを使用すると、BigQuery または Looker Studio でクエリを記述して、ログデータを他のビジネスデータと結合できます。

分析ビューには、リンクされた BigQuery データセットは作成できません。

ログ分析について詳しくは、ログ分析の概要をご覧ください。

リンクされたデータセットが必要な場合

デフォルトの Cloud Logging サービスを使用する場合、[ログ分析] ページのログビューをクエリするために、リンクされた BigQuery データセットは必要ありません。クエリを保存して共有したり、結果をカスタム ダッシュボードに保存できます。

次のいずれかを行う場合は、リンクされた BigQuery データセットが必要です。

ログバケットにリンクされた BigQuery データセットを使用すると、BigQuery はログバケット内のデータを読むことができます。

予約済みの BigQuery スロットでクエリを実行する場合、クエリには容量コンピューティングの料金が適用されます。また、ログ分析以外のサービスを使用してデータをクエリする場合は、そのサービスに基づいてクエリに対して追加料金が発生することがあります。使用しているサービスの料金ページをご覧ください。

ログバケットとログビューが BigQuery オブジェクトにマッピングされる仕組み

ログバケットにリンクされた BigQuery データセットを作成すると、BigQuery で新しいデータセットを使用できるようになります。リンクされたデータセットの名前は、リンクプロセス中に指定します。ログバケット内のログビューは、データセット内の仮想ビューに自動的にマッピングされます。仮想ビューの名前は、対応するログビューと同じです。

たとえば、プロジェクト my_projectexample という名前のログバケットがあり、このログバケットに _AllLogs という名前のログビューがあるとします。そのログバケットに my_dataset という名前でリンクされたデータセットを作成すると、BigQuery の [エクスプローラ] ページに my_project エントリが表示されます。my_project エントリの子エントリは、my_dataset という名前のデータセットです。このデータセットには、_AllLogs という名前の仮想ビューが一覧表示されます。

リンクされたデータセットを使用する場合のアクセス制御の影響

プリンシパルが、リンクされた BigQuery データセットのビューをクエリすると、そのクエリは Cloud Logging 権限レイヤではなく BigQuery 権限レイヤで実行されます。したがって、リンクされたデータセットについてプリンシパルに付与されている BigQuery ロールと権限により、データセットをクエリできるかどうかが決まります。

リンクされたデータセット内の特定の仮想ビューにプリンシパルを制限することはできません。リンクされたデータセットへのアクセス権がプリンシパルに付与されている場合、そのプリンシパルはデータセット内のすべてのビューをクエリできます。

始める前に

このセクションでは、ログ分析を使用する前に完了しておく必要のある手順について説明します。

ログバケットを構成する

ログ分析を使用できるようにログバケットがアップグレードされていることを確認します。

  1. Google Cloud コンソールで、[ログストレージ] ページに移動します。

    [ログストレージ] に移動

    このページを検索バーで検索する場合は、小見出しが「Logging」の結果を選択します。

  2. クエリを実行するログビューを含む各ログバケットで、[Log Analytics を使用可能] 列に [開く] が表示されていることを確認します。[アップグレード] が表示されている場合は、[アップグレード] をクリックしてダイアログを完了します。

IAM のロールと権限を構成する

このセクションでは、ログ分析の使用に必要な IAM ロールまたは権限について説明します。

  • ログ分析の使用とログビューへのクエリ実行に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

    • _Required および _Default のログバケットに対してクエリを実行する: ログ閲覧者roles/logging.viewer
    • プロジェクトのすべてのログビューに対してクエリを実行する: ログ表示アクセス者roles/logging.viewAccessor

    プリンシパルを特定のログビューに制限するには、プロジェクト レベルで付与されたログ表示アクセス者ロールに IAM 条件を追加するか、ログビューのポリシー ファイルに IAM バインディングを追加します。詳細については、ログビューへのアクセスを制御するをご覧ください。

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

  • リンクされたデータセットの作成とクエリに必要な権限を取得するには、ログバケットを保存するプロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

    • リンクされたデータセットを作成して表示する: ログ構成書き込みroles/logging.configWriter
    • 予約済みの BigQuery スロットを使用してリンクされたデータセットをクエリする:
    • BigQuery Studio でリンクされたデータセットを表示するには、この手順で説明したすべてのロールと次のロールを付与します。次のロールは、データセットまたはプロジェクトに付与できます。 BigQuery データ閲覧者 roles/bigquery.dataViewer

BigQuery のエディションを確認する

予約済みの BigQuery スロットを使用して [ログ分析] ページからログデータをクエリするときに、Virtual Private Cloud(VPC)Service Controls でプロジェクトを使用している場合は、BigQuery の Enterprise Edition を使用していることを確認してください。詳細については、BigQuery のエディションについてをご覧ください。

BigQuery の機能を使用してログデータを分析する場合は、ログ分析を使用するようにログバケットをアップグレードし、リンクされたデータセットを作成します。この構成では、ログデータの保存は Logging が行いますが、ログデータの読み取りは BigQuery で行うことができます。

Google Cloud コンソール

既存のログバケットに BigQuery データセットへのリンクを作成するには、次の操作を行います。

  1. Google Cloud コンソールで、[ログストレージ] ページに移動します。

    [ログストレージ] に移動

    このページを検索バーで検索する場合は、小見出しが「Logging」の結果を選択します。

  2. ログバケットを見つけ、[Log Analytics を使用可能] 列に「開く」が表示されていることを確認します。

    この列に「アップグレード」と表示されている場合、ログバケットはログ分析を使用するようにアップグレードされていません。ログ分析を構成します。

    1. [アップグレード] をクリックします。
    2. ダイアログで [確認] をクリックします。

    アップグレードが完了したら、次のステップに進みます。

  3. ログバケットで、[その他] をクリックし、[バケットを編集] をクリックします。

    [ログバケットの編集] ダイアログが開きます。

  4. [このバケットにリンクする新しい BigQuery データセットを作成する] を選択し、新しいデータセットの名前を入力します。

    データセット名は、各 Google Cloud プロジェクトで一意である必要があります。既存のデータセットの名前を入力すると、「Dataset name must be unique in the selected region.」というエラーが返されます。

  5. [完了]、[バケットを更新] の順にクリックします。

    リンクされたデータセット名が Logging の [ログストレージ] ページに表示されてから BigQuery がデータセットを認識するまでに数分かかることがあります。

gcloud

ログ分析を使用するようにアップグレードされたログバケットに、リンクされたデータセットを作成するには、gcloud logging links create コマンドを実行します。

gcloud logging links create LINK_ID --bucket=BUCKET_ID --location=LOCATION

指定した LINK_ID は BigQuery データセットの名前として使用されます。このフィールドの値は、 Google Cloud プロジェクトで固有である必要があります。

links create コマンドは非同期です。非同期メソッドからは、メソッドの進行状況に関する情報が格納されている Operation オブジェクトが返されます。メソッドが完了すると、Operation オブジェクトにステータスが含まれます。詳細については、非同期 API メソッドをご覧ください。

links create コマンドが完了するまでに数分かかります。

たとえば、次のコマンドは、my-bucket という名前のログバケットに、mylink という名前でリンクされたデータセットを作成します。

gcloud logging links create mylink --bucket=my-bucket --location=global

データセット名は、各 Google Cloud プロジェクトで一意である必要があります。既存のデータセットと同じ名前のデータセットを作成しようとすると、次のエラーを受信します。

BigQuery dataset with name "LINK_ID" already exists.

ログ分析を使用するようにアップグレードされていないログバケットに、リンクされたデータセットを作成しようとすると、次のエラーが報告されます。

A link can only be created for an analytics-enabled bucket.

REST

アップグレードされた既存のログバケットに、リンクされた BigQuery データセットを作成するには、ログ分析を使用します。Cloud Logging API の非同期 projects.locations.buckets.links.create メソッドを呼び出します。

次のように、メソッドの引数を準備します。

  1. create コマンドのリクエスト本文を作成します。リクエスト本文は Link オブジェクトの形式です。
  2. コマンドのクエリ パラメータには linkId=LINK_ID を使用します。指定した LINK_ID は BigQuery データセットの名前として使用されます。このフィールドの値は、 Google Cloud プロジェクトで固有である必要があります。

非同期メソッドのレスポンスは、Operation オブジェクトです。このオブジェクトには、メソッドの進行状況に関する情報が格納されています。メソッドが完了すると、Operation オブジェクトにステータスが含まれます。詳細については、非同期 API メソッドをご覧ください。

links.create メソッドが完了するまでに数分かかります。

データセット名は、各 Google Cloud プロジェクトで一意である必要があります。既存のデータセットと同じ名前のデータセットを作成しようとすると、次のエラーを受信します。

BigQuery dataset with name "LINK_ID" already exists.

ログ分析を使用するようにアップグレードされていないログバケットに、リンクされたデータセットを作成しようとすると、次のエラーが報告されます。

A link can only be created for an analytics-enabled bucket.

BigQuery からクエリを実行する

ログ分析とリンクされたデータセットを使用するログバケットがある場合は、[BigQuery Studio] ページで、リンクされたデータセットを表示してクエリできます。この構成では、BigQuery Studio でのみ使用可能なコマンド、ワークフロー、データセットを使用してデータセットを分析できます。

ログ分析から BigQuery を開き、リンクされたデータセットをクエリするには、次の操作を行います。

  1. クエリするログビューをホストするログバケットにリンクされたデータセットが存在することを確認します。

    1. Google Cloud コンソールで、[ログストレージ] ページに移動します。

      [ログストレージ] に移動

      このページを検索バーで検索する場合は、小見出しが「Logging」の結果を選択します。

    2. ログバケットを見つけて、[BigQuery のリンクされたデータセット] 列に URL が表示されていることを確認します。エントリが空の場合は、リンクされたデータセットを作成する必要があります。これらの手順については、リンクされた BigQuery データセットを作成するをご覧ください。

  2. Google Cloud コンソールで、[ログ分析] ページに移動します。

    [ログ分析] に移動

    このページを検索バーで検索する場合は、小見出しが「Logging」の結果を選択します。

  3. [ログビュー] リストで、ログビューを見つけて選択します。

  4. [スキーマ] ペインで [クエリ] を選択します。

    [クエリ] ペインには、デフォルトのクエリが入力されます。[クエリ] ペインでクエリを入力することや、表示されているクエリを編集することもできます。

  5. ツールバーで、[クエリを実行] または [BigQuery で実行] ボタンを開き、[BigQuery で開く] を選択します。

    [BigQuery Studio] ページが開きます。クエリの FROM ステートメントは、BigQuery のテーブルパスの構文を従って、リンクされたデータセットのログビューのパスを指定するように変更されます。

    表示されているクエリを編集することもできます。

  6. [BigQuery Studio] ページで、[クエリを実行] をクリックします。

予約済みの BigQuery スロットでログ分析クエリを実行する

ログ分析クエリの実行時間を最小限に抑えるには、予約済みの BigQuery スロットで実行します。[ログ分析] ページは、デフォルトのログ分析サービスを使用するように事前構成されています。つまり、クエリは限られたスロット容量を他のクエリと競合して使用する必要があります。使用可能なスロットがない場合、クエリの実行が遅延します。予約済みの BigQuery スロットでクエリを実行すると、これらの遅延を排除できます。

ログビューに SQL クエリを発行するには、次の操作を行います。

  1. クエリするログビューをホストするログバケットにリンクされたデータセットが存在することを確認します。

    1. Google Cloud コンソールで、[ログストレージ] ページに移動します。

      [ログストレージ] に移動

      このページを検索バーで検索する場合は、小見出しが「Logging」の結果を選択します。

    2. ログバケットを見つけて、[BigQuery のリンクされたデータセット] 列に URL が表示されていることを確認します。エントリが空の場合は、リンクされたデータセットを作成する必要があります。これらの手順については、リンクされた BigQuery データセットを作成するをご覧ください。

  2. 予約済みの BigQuery スロットが構成されていることを確認します。

    1. 専用スロットを使用して予約を作成する
    2. 予約割り当てを作成する
  3. 予約済みの BigQuery スロットでクエリを実行するようにログ分析を構成します。

    1. Google Cloud コンソールで、[ログ分析] ページに移動します。

      [ログ分析] に移動

      このページを検索バーで検索する場合は、小見出しが「Logging」の結果を選択します。

    2. [ログビュー] リストでビューを見つけて、[クエリ] を選択するか、クエリを入力します。

      クエリペインに FROM ステートメントを参照するエラー メッセージが表示される場合、特定のログビューに解決されません。このエラーの解決方法については、エラー FROM clause must contain exactly one log view をご覧ください。

    3. ツールバーに移動し、[BigQuery で実行] というボタンが表示されていることを確認します。

      ツールバーに [クエリを実行] と表示されている場合は、[ 設定] をクリックして [BigQuery] を選択します。

      [BigQuery で実行] ボタンが無効になっている場合は、リンクされたデータセットを作成する必要があります。

    4. クエリを実行します。

      ツールバー オプションを使用して、クエリをフォーマットし、クエリを消去して、BigQuery SQL リファレンス ドキュメントを開くことができます。

次のステップ