アナリティクス ビューについて

このドキュメントでは、分析ビューと、分析ビューを作成するタイミングについて説明します。また、分析ビューと保存済みクエリの違いについても説明します。

概要

分析ビューはクエリ可能なリソースです。つまり、分析ビューを定義した後は、FROM 句で分析ビューを指定するクエリを作成できます。

分析ビューを使用する主な利点は、API やシステムで定義された形式に制約されずにデータをクエリできることです。分析ビューではスキーマを定義できるため、クエリを簡素化したり、クエリの作成にかかる時間を短縮したりできます。分析ビューのクエリでは、特定のフィールドのみを保持する、フィールドの名前を変更する、ネストされたフィールドを最上位の列に移動する、グループ化と集計を実行する、などの操作を行えます。

分析ビューはマテリアライズド ビューではありません。分析ビューは、クエリ結果を定期的にキャッシュに保存する事前計算ビューではありません。したがって、分析ビューをクエリすることは、分析ビューのクエリでリストされているビューをクエリすることと同等です。

分析ビューは、保存済みクエリ([ログ分析] ページで実行して保存したクエリ)よりも強力です。保存済みクエリは再実行できますが、保存済みクエリの結果をクエリすることはできません。

分析ビューの種類

分析ビューには、ユーザー定義とシステム定義の 2 種類があります。

  • ユーザー定義の分析ビューとは、ユーザーが作成した分析ビューです。ユーザー定義の分析ビューに対してクエリを実行したり、編集や削除を行うことができます。

  • システム定義の分析ビューは、Google Cloud サービスによって作成される分析ビューです。システム定義の分析ビューに対してクエリを実行できます。ただし、編集や削除はできません。

Google Cloud プロジェクト内の分析ビューを一覧表示する方法については、分析ビューを一覧表示するをご覧ください。

分析ビューのロケーション

分析ビューのロケーションは、クエリするリソースのロケーションによって決まります。たとえば、アナリティクス ビューが global ロケーションにあるログビューまたはオブザーバビリティ ビューをクエリする場合、アナリティクス ビューのロケーションも global にする必要があります。 Google Cloud コンソールを使用して分析ビューを作成すると、ロケーションが自動的に設定されます。

サンプル ユースケース

分析ビューの主な利点は、システムで定義された形式に制約されずにデータをクエリできることです。分析ビューではスキーマを定義できるため、クエリを簡素化したり、クエリの作成にかかる時間を短縮したりできます。

ネットワークの詳細に関するクエリ

VPC Flow Logs を使用してネットワーク パフォーマンスを分析したいとします。全体的なネットワーキング パフォーマンスを分析し、特定のネットワーク、IP アドレス、ホストを確認する必要があります。この情報は、ログエントリの json_payload フィールドのネストされたフィールドに保存されています。

分析クエリを簡素化するために、次の分析ビューを作成して network_details という名前を付けます。

SELECT
  -- Create a column for each network field.
  JSON_VALUE(resource.labels.subnetwork_name) subnetwork_name,
  JSON_VALUE(json_payload.src_instance.vm_name) vm_name,
  JSON_VALUE(json_payload.connection.src_ip) as src_ip,
  JSON_VALUE(json_payload.connection.src_port) as src_port,
  JSON_VALUE(json_payload.connection.dest_ip) as dest_ip,
  JSON_VALUE(json_payload.connection.dest_port) as dest_port,
  CAST(JSON_VALUE(json_payload.bytes_sent) as INT64) as bytes_sent,
  CAST(JSON_VALUE(json_payload.packets_sent) as INT64) as packets_sent
FROM
  -- Query one log view.
  `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
  -- Only query the VPC Flow Logs log.
  log_id = "compute.googleapis.com/vpc_flows"
  AND SEARCH(json_payload.reporter, "SRC")

このクエリを使用する前に、次の変数の値を設定します。

  • PROJECT_ID: プロジェクトの ID。
  • LOCATION: ログビューのロケーション。
  • BUCKET_ID: ログバケットの名前または ID。
  • LOG_VIEW_ID: ログビューの ID。100 文字に制限され、英字、数字、アンダースコア、ハイフンのみを使用できます。

ネットワーク パフォーマンスを分析したいときは、分析ビューをクエリします。たとえば、インスタンスの名前と送信されたデータの量のみに関心がある場合は、次のクエリを作成します。

SELECT vm_name, bytes_sent, packets_sent,
FROM `analytics_view.my_project.global.network_details`
ORDER BY bytes_sent DESC
LIMIT 100

API レイテンシ分析のベースクエリ

複数のチームが分析を完了するために週次のパフォーマンス データを必要としているとします。各チームに週次データを生成させる代わりに、週次データを抽出する分析ビューを作成します。他のチームはこの分析ビューをクエリして分析を実行できます。

次のクエリは、SQL を使用して最小、最大、平均のリクエスト レイテンシを計算する方法を示しています。

SELECT week, MIN(took_ms) as min, MAX(took_ms) AS max, AVG(took_ms) AS avg
FROM (
  SELECT TIMESTAMP_TRUNC(timestamp, WEEK) AS week,
  CAST( JSON_VALUE(json_payload, '$."http.resp.took_ms"') AS INT64) as took_ms
  FROM
    -- Query one log view.
    `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
  WHERE json_payload IS NOT NULL
    AND SEARCH(labels,"frontend")
    AND JSON_VALUE(json_payload.message) = "request complete"
  ORDER BY took_ms DESC, timestamp ASC
)
GROUP BY week ORDER BY week

トレース サービス名を抽出する

トレースデータを分析するクエリを作成し、合成されたサービス名で表示またはグループ化するとします。分析ビューのクエリは、COALESCE 関数を使用してスパンのサービス名を決定します。この関数は、式のリストを順番に評価し、NULL と評価されない最初の式の値を返します。

SELECT
  start_time,
  -- Set the value of service name based on the first non-null value in the list.
  COALESCE(
    JSON_VALUE(resource.attributes, '$."service.name"'),
    JSON_VALUE(attributes, '$."service.name"'),
    JSON_VALUE(attributes, '$."g.co/gae/app/module"')) AS service_name,
  name AS span_name,
  duration_nano,
  status.code AS status,
  trace_id,
  span_id
FROM
  `PROJECT_ID.us._Trace.Spans._AllSpans`
LIMIT 10

クエリを使用する前に、PROJECT_ID をGoogle Cloud プロジェクトの ID に置き換えます。

トレース ID を使用してトレースデータとログデータを結合する

アプリケーションを分析する際に、ログデータとトレースデータを関連付けることが必要になる場合があります。1 つの方法は、結合を実行して選択フィールドをレポートする分析ビューを作成することです。

次のクエリは、スパン ID とトレース ID を使用してログデータとトレースデータを結合します。

SELECT
  T.trace_id,
  T.span_id,
  T.name,
  T.start_time,
  T.duration_nano,
  L.log_name,
  L.severity,
  L.json_payload,
  L.text_payload,
  L.proto_payload,
  L.insert_id
FROM
  `PROJECT_ID.us._Trace.Spans._AllSpans` AS T
JOIN
  `PROJECT_ID.us.BUCKET_ID.LOG_VIEW_ID` AS L
ON
  -- Join log and trace data by both the span ID and trace ID.
  -- Don't join only on span ID, this field isn't globally unique.
  T.span_id = L.span_id
  -- A regular expression is required because the storage format of the trace ID
  -- differs between a log view and a trace view.
  AND T.trace_id = REGEXP_EXTRACT(L.trace, r'/([^/]+)$')

このクエリを使用する前に、次の変数の値を設定します。

  • PROJECT_ID: プロジェクトの ID。
  • BUCKET_ID: ログバケットの名前または ID。
  • LOG_VIEW_ID: ログビューの ID。100 文字に制限され、英字、数字、アンダースコア、ハイフンのみを使用できます。

この例では、ログビューとオブザーバビリティ ビューの両方が同じロケーション us にあることに注意してください。アナリティクス ビューでは複数のビューをクエリできますが、それらのビューは同じロケーションに存在する必要があります。

制限事項

アナリティクス ビューには次の制限が適用されます。

  • 分析ビューでクエリできるのは、ログビューとオブザーバビリティ ビューのみです。
  • アナリティクス ビューの親リソースは Google Cloud プロジェクトである必要があります。
  • アナリティクス ビューをクエリできるのは、[ログ分析] ページで [ログ分析(デフォルト)] クエリエンジンを使用する場合のみです。
  • アナリティクス ビューでクエリするすべてのビューは、同じロケーションに存在する必要があります。
  • アナリティクス ビューの作成と管理には、 Google Cloud コンソールを使用する必要があります。
  • 作成できるアナリティクス ビューの数は Google Cloud プロジェクトあたり 100 個までです。
  • 作成できるアナリティクス ビューの数はリージョンあたり 50 個までです。
  • 各 Google Cloud プロジェクトでアナリティクス ビューを含めることができるリージョンの数は 10 個までです。

次のステップ