分析视图简介

本文档介绍了分析视图以及您可能需要创建分析视图的情况。它还介绍了分析视图与已保存的查询之间的区别。

概览

分析视图是一种可查询的资源。也就是说,定义分析视图后,您可以编写查询,并在 FROM 子句中指定分析视图。

使用分析视图的主要好处是,您不必受限于以 API 或系统定义的格式查询数据。借助分析视图,您可以定义架构,从而简化查询或减少编写查询所花费的时间。分析视图中的查询可以执行以下操作:仅保留特定字段、重命名字段、将嵌套字段移至顶级列,以及执行分组和汇总。

分析视图不是物化视图。分析视图不是定期缓存查询结果的预计算视图。因此,查询分析视图等同于查询分析视图的查询中列出的视图。

分析视图比已保存的查询更强大,已保存的查询是指您在 Log Analytics 页面上运行,然后保存的查询。您可以重新运行已保存的查询,但无法查询已保存的查询的结果。

分析视图的类型

分析视图分为两种类型:用户定义的分析视图和系统定义的分析视图:

  • 用户定义的分析视图是您创建的任何分析视图。您可以查询、修改和删除用户定义的分析视图。

  • 系统定义的分析视图是由Google Cloud 服务创建的分析视图。您可以查询系统定义的分析视图。不过,您无法修改或删除这些视图。

如需了解如何列出Google Cloud 项目中的分析视图,请参阅列出分析视图

分析视图的位置

分析视图的位置由其查询的资源的位置决定。例如,如果某个分析视图查询位于 global 位置的日志视图或可观测性视图,则该分析视图的位置也必须是 global。当您使用 Google Cloud 控制台创建分析视图时,系统会自动设置位置。

应用场景示例

分析视图的主要优势在于,您不必受限于以系统定义的格式查询数据。借助分析视图,您可以定义架构,从而简化查询或减少编写查询所需的时间。

查询网络详情

您想使用 VPC 流日志分析网络性能。您需要分析整体网络性能,还要能够识别特定网络、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:项目的标识符。
  • LOCATION:日志视图的位置。
  • BUCKET_ID:日志存储桶的名称或 ID。
  • LOG_VIEW_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 函数来确定 span 的服务名称。该函数会按顺序评估一系列表达式,并返回第一个评估结果不为 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。

使用 trace ID 联接跟踪数据和日志数据

分析应用时,您可能需要将日志数据与跟踪数据相关联。一种方法是创建一个执行联接并报告所选字段的分析视图。

以下查询使用 span ID 和 trace 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:项目的标识符。
  • BUCKET_ID:日志存储桶的名称或 ID。
  • LOG_VIEW_ID:日志视图的标识符,长度不得超过 100 个字符,并且只能包含字母、数字、下划线和连字符。

在示例中,请注意日志视图和可观测性视图都位于同一位置 us。一个分析视图可以查询多个视图,但这些视图必须位于同一位置。

限制

以下限制适用于分析视图:

  • 分析视图只能查询日志视图和可观测性视图。
  • 分析视图的父级资源必须是 Google Cloud 项目。
  • 您只能使用 Log Analytics 页面查询分析视图,并且只能在使用 Log Analytics(默认)查询引擎时进行查询。
  • 分析视图查询的所有视图都必须位于同一位置。
  • 您必须使用 Google Cloud 控制台来创建或管理分析视图。
  • 每个 Google Cloud 项目最多可以创建 100 个分析视图。
  • 每个区域最多可创建 50 个分析视图。
  • 每个 Google Cloud 项目中最多有 10 个区域可以包含分析视图。

后续步骤