本文档介绍了分析视图以及您可能需要创建分析视图的情况。它还介绍了分析视图与您可能熟悉的概念(例如日志视图和已保存的查询)之间的区别。
如需了解如何创建、查询和管理分析视图,请参阅创建和查询分析视图。
概览
分析视图是一种可查询的资源。此资源包含一个 SQL 查询,用于查询一个或多个日志视图。
日志存储桶中的日志视图用于控制您可以查看日志存储桶中的哪些日志条目。您可以使用 Logs Explorer 和 Log Analytics 页面查询日志视图。在这两种情况下,所查询数据的格式都由 LogEntry
数据结构决定。
分析视图中包含的 SQL 查询使您可以将一个或多个日志视图中的日志数据转换为自定义格式。也就是说,您可以过滤日志视图中归入查询结果的日志条目,并定义结果的各列。例如,您可以舍弃列、将数据从嵌套 JSON 字段移至列或是添加列。
分析视图不是物化视图。分析视图不是定期缓存查询结果的预计算视图。因此,查询分析视图等同于查询分析视图所查询的日志视图。
分析视图和已保存的查询都包含 SQL 查询。不过,分析视图是一种可查询的资源。您可以重新运行已保存的查询,但无法查询已保存的查询的结果。
分析视图的类型
分析视图分为两种类型:用户定义的分析视图和系统定义的分析视图:
用户定义的分析视图是您创建的任何分析视图。您可以查询、修改和删除用户定义的分析视图。
系统定义的分析视图是由Google Cloud 服务创建的分析视图。您可以查询用户定义的分析视图。不过,您无法修改或删除这些视图。
如需了解如何列出Google Cloud 项目中的分析视图,请参阅列出分析视图。
分析视图的位置
分析视图的位置由其查询的资源的位置决定。例如,如果某个分析视图查询位于 global
位置的日志视图,则该分析视图的位置也必须是 global
。当您使用 Google Cloud 控制台创建分析视图时,系统会自动设置位置。
分析视图的优势
分析视图的主要优势在于,您可以转换日志数据并创建一致的架构以用于其他查询。不过,您可能还会发现,通过创建分析视图,您可以减少编写查询所需的工作量或改进查询的结构。由于分析视图不是物化视图,因此使用分析视图不一定会缩短查询时间。
示例:数据转换
假设您要使用 VPC 流日志分析网络性能。您需要分析整体网络性能,还要能够识别特定网络、IP 地址或主机。遗憾的是,您需要的信息包含在日志条目 json_payload
字段中的嵌套字段中。
如需从日志条目中提取这些信息,请编写以下查询,然后将查询保存为名为 network_details
的分析视图:
SELECT
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 `TABLE_NAME_OF_LOG_VIEW`
WHERE
log_id = "compute.googleapis.com/vpc_flows"
AND SEARCH(json_payload.reporter, "SRC")
现在,如果您想分析网络性能,可以查询您的分析视图。例如,如果您只对实例名称和发送的数据量感兴趣,则可以编写以下查询:
SELECT vm_name, bytes_sent, packets_sent,
FROM `analytics_view.my_project.global.network_details`
ORDER BY bytes_sent DESC
LIMIT 100
示例:用于 API 延迟时间分析的基本查询
假设您的任务是以一周为间隔来评估和汇总请求延迟时间。其他团队将使用每周性能分析数据作为其他分析的基础。
您创建的分析视图(可供其他团队查询)会报告已完成请求的最短、最长和平均延迟时间(由特定日志视图中的日志条目进行记录):
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 `TABLE_NAME_OF_LOG_VIEW`
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
所需的 IAM 角色和权限
由于分析视图会查询日志视图,因此如需创建和查询分析视图,您的 IAM 角色还必须允许您查询日志视图和使用 Log Analytics。本部分列出了创建分析视图所需的 IAM 角色,以及查询日志视图和使用 Log Analytics 所需的 IAM 角色:
-
如需获得创建、管理和使用分析视图所需的权限,请让您的管理员为您授予项目的 Observability Analytics User (
roles/observability.analyticsUser
) IAM 角色。此预定义角色包含创建、管理和使用分析视图所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
您需要具备以下权限才能创建、管理和使用分析视图:
-
observability.analyticsViews.get
-
observability.analyticsViews.list
-
observability.analyticsViews.create
-
observability.analyticsViews.update
-
observability.analyticsViews.delete
-
-
如需获得查询日志视图和使用 Log Analytics 所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:
-
查询
_Required
和_Default
日志存储桶:Logs Viewer (roles/logging.viewer
) -
查询项目中的所有日志视图:Logs View Accessor (
roles/logging.viewAccessor
)
您可以通过以下方式将主账号限制为访问特定日志视图:向在项目级上进行的 Logs View Accessor 角色授予添加 IAM 条件,或者向日志视图的政策文件添加 IAM 绑定。如需了解详情,请参阅控制对日志视图的访问权限。
如需了解您需要哪些额外角色才能查询用户定义的存储桶的视图,或者查询
_Default
日志存储桶的_AllLogs
视图,请参阅 Cloud Logging 角色。 -
查询
限制
以下限制适用于分析视图:
- 一个分析视图无法查询另一个分析视图。
- 一个分析视图可以查询多个日志视图。不过,托管所查询的日志视图的日志存储桶必须位于一个位置。例如,假设您有两个日志存储桶,一个位于
us-east1
,另一个位于asia-east1
。您无法创建一个分析视图来查询这些日志存储桶中的日志视图。 - 分析视图的父级资源必须是 Google Cloud 项目。您无法在文件夹或组织中创建分析视图。
- 分析视图不支持关联的数据集。因此,您只能使用 Log Analytics 页面查询分析视图。此外,您必须对默认的 Cloud Logging 服务运行这些查询。
- 没有用于创建或管理分析视图的 API。
以下数量限制适用于分析视图:
- 每个 Google Cloud 项目的分析视图数量上限:100
- 每个 Google Cloud 项目中每个区域的分析视图数量上限:50
- 每个 Google Cloud 项目中可以存储分析视图的区域数量上限:10