Puoi eseguire query in modo programmatico per correlare i dati tra Google Cloud utilizzando l'API REST o Google Cloud CLI.
Panoramica
Quando esegui una query dell'API App Topology, l'API restituisce un elenco di nodi (risorse) e archi (relazioni) del grafico che corrispondono alla query. App Topology combina i dati di Google Cloud servizi come:
- Metadati delle risorse da Cloud Asset Inventory, App Hub e Agent Registry
- Dati di deployment, ad esempio un commit Git o la provenienza della build di un'immagine container
- Dati di sicurezza di Security Command Center, come vulnerabilità o proprietà di Identity and Access Management (IAM)
- Dati di Google Cloud Observability, come tracce e avvisi
Per eseguire una query, sono necessarie le seguenti informazioni:
- Il dominio per cui vuoi eseguire la query. Il dominio
SREinclude tutti i dati supportati. Consulta Elenca domini per scoprire come elencare i domini disponibili. - I nodi, gli archi e le proprietà del grafico supportati che puoi includere in una query. Puoi ottenere lo schema completo o parziale di un dominio. Per maggiori dettagli, vedi Recuperare lo schema.
- Il pattern di query con i nodi e gli archi che vuoi cercare. Consulta Eseguire query.
Prima di iniziare
Seleziona la scheda relativa a come prevedi di utilizzare i campioni in questa pagina:
gcloud
Nella console Google Cloud , attiva Cloud Shell.
Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installata e con valori già impostati per il progetto corrente. L'inizializzazione della sessione può richiedere alcuni secondi.
REST
Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, utilizzi le credenziali che fornisci a gcloud CLI.
Installa Google Cloud CLI.
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
Per saperne di più, consulta Autenticati per usare REST nella documentazione sull'autenticazione di Google Cloud .
Per informazioni sulla configurazione dell'autenticazione per un ambiente di produzione, consulta Configura le Credenziali predefinite dell'applicazione per il codice in esecuzione su Google Cloud nella documentazione sull'autenticazione di Google Cloud .
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per utilizzare l'API App Topology, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Esegui query:
App Topology Viewer (
roles/apptopology.viewer) sui progetti in cui vuoi utilizzare App Topology
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Questi ruoli predefiniti contengono le autorizzazioni necessarie per utilizzare l'API App Topology. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:
Autorizzazioni obbligatorie
Per utilizzare l'API App Topology sono richieste le seguenti autorizzazioni:
-
Ottieni domini:
-
apptopology.domains.get -
apptopology.domains.list
-
-
Ottieni schemi:
apptopology.schemas.get -
Recupera i dati delle risorse rilevate:
apptopology.discoveredResourcesTopologies.generate -
Recupera i dati del dominio DevOps:
apptopology.devOpsDomainTopologies.generate -
Recupera i dati del dominio di sicurezza:
apptopology.securityDomainTopologies.generate -
Ottieni i dati del dominio SRE (tutti i dati supportati):
apptopology.sreDomainTopologies.generate
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
Elenca domini
I domini sono insiemi di dati delle risorse incentrati su tipi specifici di query.
- Per eseguire query su tutti i dati supportati da App Topology, utilizza il dominio
SRE. - Per ottenere dati sulle risorse di agenzia, devi utilizzare il dominio
SRE. - Tutti gli esempi di risposte alle richieste in questo documento utilizzano il dominio
SRE.
Se necessario, puoi elencare i domini disponibili in un progetto.
gcloud
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
- PROJECT_ID: il tuo ID progetto
Esegui il comando gcloud app-topology domains list:
Linux, macOS o 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
Dovresti ricevere una risposta simile alla seguente:
NAME DEVOPS SECURITY SRE
REST
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
- PROJECT_ID: il tuo ID progetto
Metodo HTTP e URL:
GET https://apptopology.googleapis.com/v1/projects/PROJECT_ID/locations/global/domains
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{
"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"
}
]
}
Ottieni lo schema
Per aiutarti a creare le query, puoi ottenere un elenco di tutti i nodi, gli archi e le proprietà supportati per un dominio. L'API REST consente anche di ottenere una parte dello schema.
Le richieste dello schema completo possono richiedere molto più tempo rispetto a quelle di uno schema parziale a causa del numero elevato di elementi nello schema.
Ottieni lo schema completo
gcloud
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
- PROJECT_ID: il tuo ID progetto
- DOMAIN: il dominio per cui vuoi eseguire la query. Il dominio
SREinclude tutti i dati supportati.
Esegui il comando gcloud app-topology domains schema describe:
Linux, macOS o 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
Il seguente estratto di esempio di una risposta include solo il primo elemento dello schema per i tipi di nodi, i tipi di archi, le regole degli archi e le proprietà delle etichette.
{
"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
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
- PROJECT_ID: il tuo ID progetto
- DOMAIN: il dominio per cui vuoi eseguire la query. Il dominio
SREinclude tutti i dati supportati.
Metodo HTTP e URL:
GET https://apptopology.googleapis.com/v1/projects/PROJECT_ID/locations/global/domains/DOMAIN/schema
Per inviare la richiesta, espandi una di queste opzioni:
Il seguente estratto di esempio di una risposta include solo il primo elemento nello schema per i tipi di nodi, i tipi di archi, le regole degli archi e le proprietà delle etichette.
{
"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"
}
]
}
Ottenere uno schema parziale
Puoi ottenere una parte di uno schema di dominio entro un numero specificato di hop di un'etichetta iniziale specificata.
Il comando di esempio in queste istruzioni recupera una parte dello schema a partire
dal nodo Base/Agent, con una profondità di 1 e una dimensione della pagina di 5.
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
- PROJECT_ID: il tuo ID progetto
- DOMAIN: il dominio per cui vuoi eseguire la query. Il dominio
SREinclude tutti i dati supportati.
Metodo HTTP e URL:
POST https://apptopology.googleapis.com/v1/projects/PROJECT_ID/locations/global/domains/DOMAIN/schema:explore
Corpo JSON della richiesta:
{
"startLabels": [
"Base/Agent"
],
"depth": 1,
"pageSize": 5
}Per inviare la richiesta, espandi una di queste opzioni:
In una risposta, l'ordine di nodeTypes e
edgeTypes è coerente, ma l'ordine di
labelProperties può variare da richiesta a richiesta.
Espandi l'intestazione Risposta per visualizzare una risposta di esempio.
Esegui delle query
Quando esegui una query, specifichi un pattern di query che include i nodi, gli archi e le proprietà che vuoi cercare.
I pattern di query si basano sulla sintassi di filtro AIP-160. Per una panoramica dei pattern di query e delle limitazioni delle query, consulta Informazioni sulle query. Queste istruzioni presuppongono che tu abbia letto le informazioni sulla struttura e sulle limitazioni delle query.
Le seguenti istruzioni utilizzano una query di esempio per tutti i servizi e i carichi di lavoro di App Hub nel progetto specificato, inclusi quelli registrati (Base/apphub.googleapis.com/Service, Base/apphub.googleapis.com/Workload) e quelli rilevati (Base/DiscoveredService, Base/DiscoveredWorkload).
I comandi specificano il pattern di query in un file JSON. Il file è leggermente diverso per gcloud CLI e le richieste REST in queste istruzioni.
- Per gcloud CLI, specifica il dominio da interrogare come parametro del comando. Il dominio non è incluso nel file del pattern di query.
- Per le richieste REST, specifica sia il dominio sia il pattern di query nel corpo JSON della richiesta. Imposta il dominio nel campo
topologyDomainse specifica il pattern di query nell'oggettofilter.
gcloud
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
- PROJECT_ID: il tuo ID progetto
- DOMAIN: il dominio per cui vuoi eseguire la query. Il dominio
SREinclude tutti i dati supportati.
Salva i seguenti contenuti in un file denominato request.json:
{ "startingNode": { "alias": "sw", "labelPropertiesPattern": { "labelMatcherExpr": "Base/apphub.googleapis.com/Service OR Base/apphub.googleapis.com/Workload OR Base/DiscoveredService OR Base/DiscoveredWorkload" } } }
Esegui il comando gcloud app-topology resources-graph generate:
Linux, macOS o 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
Il seguente estratto di risposta di esempio mostra i primi due nodi. Questi nodi
sono server MCP. I server MCP di Google hanno l'etichetta
Base/DiscoveredService, che è una delle etichette nel pattern
della query.
Nell'output, le seguenti variabili rappresentano i valori associati al progetto specificato con PROJECT_ID:
PROJECT_NUMBER: il numero di progetto per il progetto specificato.ORGANIZATION_NUMBER: il numero dell'organizzazione per l'organizzazione Google Cloud che contiene il progetto specificato.
{
"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
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
- PROJECT_ID: il tuo ID progetto
- DOMAIN: il dominio per cui vuoi eseguire la query. Il dominio
SREinclude tutti i dati supportati.
Metodo HTTP e URL:
POST https://apptopology.googleapis.com/v1/projects/PROJECT_ID/locations/global/discoveredResourcesTopology:generate
Corpo JSON della richiesta:
{
"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"
}
}
}
}
Per inviare la richiesta, espandi una di queste opzioni:
Il seguente estratto di risposta di esempio mostra i primi due nodi. Questi nodi
sono server MCP. I server MCP di Google hanno l'etichetta
Base/DiscoveredService, che è una delle etichette nel pattern
della query.
Nell'output, le seguenti variabili rappresentano i valori associati al progetto specificato con PROJECT_ID:
PROJECT_NUMBER: il numero di progetto per il progetto specificato.ORGANIZATION_NUMBER: il numero dell'organizzazione per l'organizzazione Google Cloud che contiene il progetto specificato.
{
"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"
}
}
]
}
}
Per altri esempi di pattern di query, vedi Pattern di query di esempio.
Pattern di query di esempio
Utilizza i seguenti esempi di pattern di query per creare i tuoi pattern di query per eseguire query. Tutti gli esempi in questa sezione utilizzano il formato JSON.
VM con gruppi di istanze, reti e dischi
Esegui query per le istanze Compute Engine in un gruppo di istanze con networking e disco.
Il pattern inizia da Base/compute.googleapis.com/Instance e ha tre
rami edge principali sotto l'oggetto neighbors di livello superiore che definiscono
questi criteri:
- Istanze che appartengono a un gruppo di istanze gestite
- Istanze con una rete connessa
- Istanze con Persistent Disk
Poiché i rami vengono combinati con AND, la risposta include solo le istanze
che appartengono a un gruppo di istanze gestite e hanno sia una rete che un disco.
{
"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"
}
}
}
}
]
}
Risorse agentiche
Esegui query per risorse agentiche e le loro relazioni utilizzando le informazioni di Agent Registry, inclusi i dati per agenti, server MCP, endpoint e skill.
{
"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 supporta due tipi di endpoint:
Base/aiplatform.googleapis.com/Endpointè un endpoint del modello di Gemini Enterprise Agent Platform.Base/Endpointè l'URL di destinazione di un Agent Endpoint ed è un'etichetta su un servizio di Agent Registry (Base/agentregistry.googleapis.com/Service). PoichéBase/agentregistry.googleapis.com/Serviceè incluso nel pattern di query, gli Agent Endpoint sono inclusi nei risultati della risposta alla query.
Traffico dell'agente
Esegui query per il traffico tra agenti e altri agenti o server MCP utilizzando i dati di Cloud Trace. Ogni perimetro include dati sulla percentuale di errori e sulla latenza 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"
}
}
}
}
]
}
Passaggi successivi
- Scopri di più sull'utilizzo del server MCP remoto.
- Scopri come eseguire query in Cloud Hub.
- Scopri di più sull'esecuzione di query in Gemini Enterprise Agent Platform.