您可以使用 REST API 或 Google Cloud CLI 以编程方式运行查询,以关联 Google Cloud 中的数据。
概览
运行 App Topology API 查询时,该 API 会返回与您的查询匹配的图节点(资源)和边(关系)列表。App Topology 会整合 Google Cloud 服务(例如以下服务)中的数据:
- 来自 Cloud Asset Inventory、App Hub、代理注册表的资源元数据
- 部署数据,例如 Git 提交或容器映像的 build 出处
- Security Command Center 中的安全数据,例如漏洞或 Identity and Access Management (IAM) 所有权
- Google Cloud Observability 数据,例如跟踪记录和提醒
如需运行查询,您需要提供以下信息:
- 您要查询的网域。
SRE网域包含所有受支持的数据。如需了解如何列出可用的网域,请参阅列出网域。 - 您可以包含在查询中的受支持的图节点、边和属性。您可以获取网域的完整或部分架构。如需了解详情,请参阅获取架构。
- 要搜索的包含节点和边的查询句式。请参阅运行查询。
准备工作
选择标签页以了解您打算如何使用本页面上的示例:
gcloud
安装 Google Cloud CLI,然后 使用联合身份登录 gcloud CLI。 登录后,运行以下命令来初始化 Google Cloud CLI:
gcloud initREST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭证。
安装 Google Cloud CLI,然后 使用联合身份登录 gcloud CLI。
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
如需了解如何为生产环境设置身份验证,请参阅 Google Cloud 身份验证文档中的 为在 Google Cloud上运行的代码设置应用默认凭据 。
所需的角色
如需获得使用 App Topology API 所需的权限,请让您的管理员为您授予以下 IAM 角色:
-
运行查询:您要使用 App Topology 的项目的 App Topology Viewer (
roles/apptopology.viewer)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色包含使用 App Topology API 所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
如需使用 App Topology API,需要以下权限:
-
获取网域:
-
apptopology.domains.get -
apptopology.domains.list
-
-
获取架构:
apptopology.schemas.get -
获取发现的资源数据:
apptopology.discoveredResourcesTopologies.generate -
获取 DevOps 网域数据:
apptopology.devOpsDomainTopologies.generate -
获取安全网域数据:
apptopology.securityDomainTopologies.generate -
获取 SRE 网域数据(所有受支持的数据):
apptopology.sreDomainTopologies.generate
列出网域
网域是专注于特定类型查询的资源数据集。
- 如需查询 App Topology 支持的所有数据,请使用
SRE网域。 - 如需获取有关智能体资源的数据,您必须使用
SRE网域。 - 本文档中的所有请求响应示例均使用
SRE网域。
如有需要,您可以列出项目中的可用网域。
gcloud
在使用下面的命令数据之前,请先进行以下替换:
- PROJECT_ID:您的项目 ID
执行 gcloud app-topology domains list 命令:
Linux、macOS 或 Cloud Shell
gcloud app-topology domains list --project=PROJECT_ID
Windows (PowerShell)
gcloud app-topology domains list --project=PROJECT_ID
Windows (cmd.exe)
gcloud app-topology domains list --project=PROJECT_ID
您应该会收到类似如下所示的响应:
NAME DEVOPS SECURITY SRE
REST
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:您的项目 ID
HTTP 方法和网址:
GET https://apptopology.googleapis.com/v1/projects/PROJECT_ID/locations/global/domains
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{
"domains": [
{
"name": "projects/PROJECT_ID/locations/global/domains/DEVOPS"
},
{
"name": "projects/PROJECT_ID/locations/global/domains/SECURITY"
},
{
"name": "projects/PROJECT_ID/locations/global/domains/SRE"
}
]
}
获取架构
为了帮助您构建查询,您可以获取网域的所有受支持的节点、边和属性的列表。您还可以通过 REST API 获取部分架构。
由于架构中的项数量较多,因此请求完整架构可能比请求部分架构花费的时间长得多。
获取完整架构
gcloud
在使用下面的命令数据之前,请先进行以下替换:
- PROJECT_ID:您的项目 ID
- DOMAIN:您要查询的网域。
SRE网域包含所有受支持的数据。
执行 gcloud app-topology domains schema describe 命令:
Linux、macOS 或 Cloud Shell
gcloud app-topology domains schema describe DOMAIN --project=PROJECT_ID
Windows (PowerShell)
gcloud app-topology domains schema describe DOMAIN --project=PROJECT_ID
Windows (cmd.exe)
gcloud app-topology domains schema describe DOMAIN --project=PROJECT_ID
以下示例摘自某个响应,仅包含节点类型、边类型、边规则和标签属性的架构中的第一个项。
{
"nodeTypes": [
{
"type": "Base/compute.googleapis.com/UrlMap",
"labels": [
"Base/Resource",
"Base/compute.googleapis.com/UrlMap"
],
"description": "Represents a Compute UrlMap."
}
],
"edgeTypes": [
{
"type": "Observability/SENDS_TRAFFIC/Base/geminidataanalytics.googleapis.com/DataAgent:Base/apps.k8s.io/DaemonSet",
"labels": [
"Observability/SENDS_TRAFFIC"
]
}
],
"labelProperties": [
{
"label": "Base/compute.googleapis.com/InstanceSettings",
"description": "Classifies a node as a Compute Instance Settings."
}
],
"edgeRules": [
{
"edgeType": "Observability/SENDS_TRAFFIC/Base/geminidataanalytics.googleapis.com/DataAgent:Base/apps.k8s.io/DaemonSet",
"srcNodeType": "Base/geminidataanalytics.googleapis.com/DataAgent",
"destNodeType": "Base/apps.k8s.io/DaemonSet"
}
]
}
REST
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:您的项目 ID
- DOMAIN:您要查询的网域。
SRE网域包含所有受支持的数据。
HTTP 方法和网址:
GET https://apptopology.googleapis.com/v1/projects/PROJECT_ID/locations/global/domains/DOMAIN/schema
如需发送您的请求,请展开以下选项之一:
以下示例摘自某个响应,其中仅包含节点类型、边类型、边规则和标签属性的架构中的第一个项。
{
"nodeTypes": [
{
"type": "Base/compute.googleapis.com/UrlMap",
"labels": [
"Base/Resource",
"Base/compute.googleapis.com/UrlMap"
],
"description": "Represents a Compute UrlMap."
}
],
"edgeTypes": [
{
"type": "Observability/SENDS_TRAFFIC/Base/geminidataanalytics.googleapis.com/DataAgent:Base/apps.k8s.io/DaemonSet",
"labels": [
"Observability/SENDS_TRAFFIC"
]
}
],
"labelProperties": [
{
"label": "Base/compute.googleapis.com/InstanceSettings",
"description": "Classifies a node as a Compute Instance Settings."
}
],
"edgeRules": [
{
"edgeType": "Observability/SENDS_TRAFFIC/Base/geminidataanalytics.googleapis.com/DataAgent:Base/apps.k8s.io/DaemonSet",
"srcNodeType": "Base/geminidataanalytics.googleapis.com/DataAgent",
"destNodeType": "Base/apps.k8s.io/DaemonSet"
}
]
}
获取部分架构
您可以获取指定起始标签在指定跳数内的部分网域架构。
这些说明中的示例命令会获取从 Base/Agent 节点开始的部分架构,深度为 1,页面大小为 5。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:您的项目 ID
- DOMAIN:您要查询的网域。
SRE网域包含所有受支持的数据。
HTTP 方法和网址:
POST https://apptopology.googleapis.com/v1/projects/PROJECT_ID/locations/global/domains/DOMAIN/schema:explore
请求 JSON 正文:
{
"startLabels": [
"Base/Agent"
],
"depth": 1,
"pageSize": 5
}如需发送您的请求,请展开以下选项之一:
在响应中,nodeTypes 和 edgeTypes 的顺序是一致的,但 labelProperties 的顺序可能会因请求而异。
展开回答标题即可查看回答示例。
运行查询
运行查询时,您需要指定一个查询句式,其中包含要搜索的节点、边和属性。
查询句式基于 AIP-160 过滤语法。如需大致了解查询模式和查询限制,请参阅关于查询。以下说明假定您已阅读查询结构和限制信息。
以下说明使用了一个示例查询,用于查询指定项目中的所有 App Hub 服务和工作负载,包括已注册 (Base/apphub.googleapis.com/Service、Base/apphub.googleapis.com/Workload) 和已发现 (Base/DiscoveredService、Base/DiscoveredWorkload) 的服务和工作负载。
这些命令在 JSON 文件中指定查询句式。在这些说明中,该文件对于 gcloud CLI 和 REST 请求略有不同。
- 对于 gcloud CLI,请将要查询的网域指定为命令的参数。相应网域未包含在查询模式文件中。
- 对于 REST 请求,请在请求的 JSON 正文中同时指定网域和查询句式。在
topologyDomains字段中设置网域,并在filter对象下指定查询句式。
gcloud
在使用下面的命令数据之前,请先进行以下替换:
- PROJECT_ID:您的项目 ID
- DOMAIN:您要查询的网域。
SRE网域包含所有受支持的数据。
将以下内容保存在名为 request.json 的文件中:
{ "startingNode": { "alias": "sw", "labelPropertiesPattern": { "labelMatcherExpr": "Base/apphub.googleapis.com/Service OR Base/apphub.googleapis.com/Workload OR Base/DiscoveredService OR Base/DiscoveredWorkload" } } }
执行 gcloud app-topology resources-graph generate 命令:
Linux、macOS 或 Cloud Shell
gcloud app-topology resources-graph generate --domains=DOMAIN --project=PROJECT_ID --pattern-file=request.json --format=json
Windows (PowerShell)
gcloud app-topology resources-graph generate --domains=DOMAIN --project=PROJECT_ID --pattern-file=request.json --format=json
Windows (cmd.exe)
gcloud app-topology resources-graph generate --domains=DOMAIN --project=PROJECT_ID --pattern-file=request.json --format=json
以下示例响应摘录显示了前 2 个节点。这些节点是 MCP 服务器。Google MCP 服务器具有标签 Base/DiscoveredService,该标签是查询模式中的标签之一。
在输出中,以下变量表示与您通过 PROJECT_ID 指定的项目相关联的值:
PROJECT_NUMBER- 指定项目的项目编号。ORGANIZATION_NUMBER- 包含指定项目的 Google Cloud 组织的组织编号。
{
"graph": {
"nodes": [
{
"properties": {
"project": "projects/PROJECT_NUMBER",
"Base/location": "global",
"createTime": "2026-08-13T15:14:53.477680Z",
"Base/agentregistry/urn": "urn:mcp:googleapis.com:projects:PROJECT_NUMBER:locations:global:storage",
"Base/resourceType": "agentregistry.googleapis.com/GoogleMcpServer",
"organization": "organizations/ORGANIZATION_NUMBER"
},
"name": "urn:mcp:googleapis.com:projects:PROJECT_NUMBER:locations:global:storage",
"labels": [
"Base/MCPServer",
"Base/DiscoveredService",
"Base/Resource",
"Base/agentregistry.googleapis.com/GoogleMcpServer"
],
"context": {
"type": "Base/agentregistry.googleapis.com/GoogleMcpServer"
}
},
{
"properties": {
"createTime": "2026-08-13T16:22:24.732600Z",
"Base/resourceType": "agentregistry.googleapis.com/GoogleMcpServer",
"Base/agentregistry/urn": "urn:mcp:googleapis.com:projects:PROJECT_NUMBER:locations:global:pubsub",
"Base/location": "global",
"organization": "organizations/ORGANIZATION_NUMBER",
"project": "projects/PROJECT_NUMBER"
},
"name": "urn:mcp:googleapis.com:projects:PROJECT_NUMBER:locations:global:pubsub",
"labels": [
"Base/agentregistry.googleapis.com/GoogleMcpServer",
"Base/Resource",
"Base/DiscoveredService",
"Base/MCPServer"
],
"context": {
"type": "Base/agentregistry.googleapis.com/GoogleMcpServer"
}
}
]
}
}
REST
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:您的项目 ID
- DOMAIN:您要查询的网域。
SRE网域包含所有受支持的数据。
HTTP 方法和网址:
POST https://apptopology.googleapis.com/v1/projects/PROJECT_ID/locations/global/discoveredResourcesTopology:generate
请求 JSON 正文:
{
"topologyDomains": [
"projects/PROJECT_ID/locations/global/domains/DOMAIN"
],
"filter": {
"startingNode": {
"alias": "sw",
"labelPropertiesPattern": {
"labelMatcherExpr": "Base/apphub.googleapis.com/Service OR Base/apphub.googleapis.com/Workload OR Base/DiscoveredService OR Base/DiscoveredWorkload"
}
}
}
}
如需发送您的请求,请展开以下选项之一:
以下示例响应摘录显示了前 2 个节点。这些节点是 MCP 服务器。Google MCP 服务器具有标签 Base/DiscoveredService,该标签是查询模式中的标签之一。
在输出中,以下变量表示与您通过 PROJECT_ID 指定的项目相关联的值:
PROJECT_NUMBER- 指定项目的项目编号。ORGANIZATION_NUMBER- 包含指定项目的 Google Cloud 组织的组织编号。
{
"graph": {
"nodes": [
{
"properties": {
"project": "projects/PROJECT_NUMBER",
"Base/location": "global",
"createTime": "2026-08-13T15:14:53.477680Z",
"Base/agentregistry/urn": "urn:mcp:googleapis.com:projects:PROJECT_NUMBER:locations:global:storage",
"Base/resourceType": "agentregistry.googleapis.com/GoogleMcpServer",
"organization": "organizations/ORGANIZATION_NUMBER"
},
"name": "urn:mcp:googleapis.com:projects:PROJECT_NUMBER:locations:global:storage",
"labels": [
"Base/MCPServer",
"Base/DiscoveredService",
"Base/Resource",
"Base/agentregistry.googleapis.com/GoogleMcpServer"
],
"context": {
"type": "Base/agentregistry.googleapis.com/GoogleMcpServer"
}
},
{
"properties": {
"createTime": "2026-08-13T16:22:24.732600Z",
"Base/resourceType": "agentregistry.googleapis.com/GoogleMcpServer",
"Base/agentregistry/urn": "urn:mcp:googleapis.com:projects:PROJECT_NUMBER:locations:global:pubsub",
"Base/location": "global",
"organization": "organizations/ORGANIZATION_NUMBER",
"project": "projects/PROJECT_NUMBER"
},
"name": "urn:mcp:googleapis.com:projects:PROJECT_NUMBER:locations:global:pubsub",
"labels": [
"Base/agentregistry.googleapis.com/GoogleMcpServer",
"Base/Resource",
"Base/DiscoveredService",
"Base/MCPServer"
],
"context": {
"type": "Base/agentregistry.googleapis.com/GoogleMcpServer"
}
}
]
}
}
如需查看其他查询句式示例,请参阅查询模式示例。
查询句式示例
使用以下查询句式示例,帮助您构建自己的查询句式以运行查询。本部分中的所有示例均使用 JSON 格式。
包含实例组、网络和磁盘的虚拟机
查询实例组中具有网络和磁盘的 Compute Engine 实例。
该模式从 Base/compute.googleapis.com/Instance 开始,在顶层 neighbors 对象下有三个主要 edge 分支,用于定义以下条件:
- 属于代管式实例组的实例
- 具有已连接网络的实例
- 具有 Persistent Disk 的实例
由于分支与 AND 合并,因此响应仅包含属于代管式实例组且同时具有网络和磁盘的实例。
{
"startingNode": {
"alias": "instance",
"labelPropertiesPattern": {
"labelMatcherExpr": "Base/compute.googleapis.com/Instance"
}
},
"neighbors": [
{
"edge": {
"direction": "FROM",
"labelPropertiesPattern": {
"labelMatcherExpr": "CONTAINS"
}
},
"graph": {
"startingNode": {
"alias": "instance_group",
"labelPropertiesPattern": {
"labelMatcherExpr": "Base/compute.googleapis.com/InstanceGroup"
}
},
"neighbors": [
{
"edge": {
"direction": "FROM",
"labelPropertiesPattern": {
"labelMatcherExpr": "DEPENDS_ON"
}
},
"graph": {
"startingNode": {
"alias": "instance_group_manager",
"labelPropertiesPattern": {
"labelMatcherExpr": "Base/compute.googleapis.com/InstanceGroupManager"
}
}
}
}
]
}
},
{
"edge": {
"direction": "TO",
"labelPropertiesPattern": {
"labelMatcherExpr": "DEPENDS_ON"
}
},
"graph": {
"startingNode": {
"alias": "network",
"labelPropertiesPattern": {
"labelMatcherExpr": "Base/compute.googleapis.com/Network"
}
}
}
},
{
"edge": {
"direction": "TO",
"labelPropertiesPattern": {
"labelMatcherExpr": "DEPENDS_ON"
}
},
"graph": {
"startingNode": {
"alias": "disk",
"labelPropertiesPattern": {
"labelMatcherExpr": "Base/compute.googleapis.com/Disk"
}
}
}
}
]
}
智能体资源
使用来自 Agent Registry 的信息(包括智能体、MCP 服务器、端点和技能的数据)查询代理资源及其关系。
{
"startingNode": {
"alias": "resource",
"labelPropertiesPattern": {
"labelMatcherExpr": "Base/Agent OR Base/MCPServer OR Base/agentregistry.googleapis.com/Skill OR Base/agentregistry.googleapis.com/SkillRevision OR Base/agentregistry.googleapis.com/AiApplication OR Base/agentregistry.googleapis.com/GoogleMcpServer OR Base/agentregistry.googleapis.com/McpEnablement OR Base/agentregistry.googleapis.com/Publisher OR Base/agentregistry.googleapis.com/Binding OR Base/agentregistry.googleapis.com/Service OR Base/aiplatform.googleapis.com/Endpoint"
}
}
}
App Topology 支持两种类型的端点:
Base/aiplatform.googleapis.com/Endpoint是 Gemini Enterprise Agent Platform 模型端点。Base/Endpoint是Agent Endpoint 的目标网址,也是 Agent Registry 服务 (Base/agentregistry.googleapis.com/Service) 上的标签。由于查询模式中包含Base/agentregistry.googleapis.com/Service,因此 Agent Endpoint 会包含在查询响应结果中。
智能体流量
使用 Cloud Trace 中的数据查询代理与其他代理或 MCP 服务器之间的流量。每个边缘都包含错误率和 p95 延迟时间数据。
{
"startingNode": {
"alias": "agent",
"labelPropertiesPattern": {
"labelMatcherExpr": "Base/Agent"
}
},
"neighbors": [
{
"edge": {
"direction": "ANY",
"labelPropertiesPattern": {
"labelMatcherExpr": "Observability/SENDS_TRAFFIC"
}
},
"graph": {
"startingNode": {
"alias": "peer",
"labelPropertiesPattern": {
"labelMatcherExpr": "Base/Agent OR Base/MCPServer"
}
}
}
}
]
}
后续步骤
- 了解如何使用远程 MCP 服务器。
- 了解如何在 Cloud Hub 中运行查询。
- 了解如何在 Gemini Enterprise Agent Platform 中运行查询。