
Dt Obs Gcp
- 933 installs
- 119 repo stars
- Updated July 29, 2026
- dynatrace/dynatrace-for-ai
dt-obs-gcp is a Dynatrace observability skill that instruments Google Cloud GKE, Cloud Run, and GCP services with dashboards, SLOs, and AI workload telemetry for developers operating production cloud deployments.
About
dt-obs-gcp is a dynatrace-for-ai skill that configures Dynatrace observability across Google Cloud Platform workloads including GKE clusters, Cloud Run services, and native GCP integrations. Developers invoke it when production or staging environments on GCP need unified dashboards, service-level objectives, and AI-specific workload telemetry beyond default Cloud Monitoring. The skill guides Dynatrace agent deployment, GCP service instrumentation, and SLO configuration so engineering teams gain full-stack visibility into containerized and serverless AI pipelines running on Google Cloud.
- GCP instrumentation
- Dynatrace setup
- GKE and Cloud Run
- SLO dashboards
- AI workload traces
Dt Obs Gcp by the numbers
- 933 all-time installs (skills.sh)
- +68 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #322 of 1,039 Cloud & Infrastructure skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/dynatrace/dynatrace-for-ai --skill dt-obs-gcpAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 933 |
|---|---|
| repo stars | ★ 119 |
| Last updated | July 29, 2026 |
| Repository | dynatrace/dynatrace-for-ai ↗ |
How do you monitor GCP workloads with Dynatrace?
Configure Dynatrace observability on Google Cloud—instrument GKE, Cloud Run, and GCP services with dashboards, SLOs, and AI workload telemetry.
Who is it for?
Platform engineers running AI workloads on Google Cloud who need Dynatrace full-stack observability across GKE, Cloud Run, and GCP services.
Skip if: Skip dt-obs-gcp for non-GCP clouds, local-only development without deployment targets, or teams using only native Cloud Monitoring without Dynatrace.
When should I use this skill?
User needs Dynatrace setup on GCP, GKE or Cloud Run monitoring, SLO configuration, or AI workload telemetry on Google Cloud
What you get
Dynatrace GCP instrumentation, observability dashboards, SLO definitions, and AI workload telemetry configuration
- Dynatrace GCP instrumentation config
- observability dashboards
- SLO definitions
Files
GCP Cloud Infrastructure
Monitor and analyze GCP resources using Dynatrace Smartscape and DQL. Query GCP services, manage organizational hierarchy, audit security posture, and track resource ownership across your GCP infrastructure.
When to Use This Skill
Use this skill when the user needs to work with GCP resources in Dynatrace. Load the reference file for the task type:
| Task | File to load |
|---|---|
| Inventory and topology queries | (no additional file — use core patterns above) |
| Compute Engine instances, machine types, IP addresses | Load references/compute-instances.md |
| GKE clusters, node pools, pods, deployments, services, RBAC | Load references/kubernetes-gke.md |
| Cloud Run services, revisions, executions | Load references/serverless-containers.md |
| VPC networks, subnets, routes, DNS records | Load references/networking-dns.md |
| Pub/Sub topics | Load references/messaging-pubsub.md |
| IAM service accounts, roles, Secret Manager | Load references/iam-security.md |
| Monitoring dashboards, logging, saved queries | Load references/monitoring-logging.md |
| GCP projects, regions, organizational hierarchy | Load references/resource-management.md |
| Resource ownership, GCP labels, organizational structure | Load references/resource-ownership.md |
---
Core Concepts
Entity Types
GCP resources use the GCP_* prefix and can be queried using the smartscapeNodes function. All GCP entities are automatically discovered and modeled in Dynatrace Smartscape.
Compute: GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE, GCP_COMPUTE_GOOGLEAPIS_COM_ADDRESS Networking: GCP_COMPUTE_GOOGLEAPIS_COM_NETWORK, GCP_COMPUTE_GOOGLEAPIS_COM_SUBNETWORK, GCP_COMPUTE_GOOGLEAPIS_COM_ROUTE, GCP_DNS_GOOGLEAPIS_COM_RESOURCERECORDSET Kubernetes (GKE): GCP_K8S_IO_POD, GCP_K8S_IO_NODE, GCP_K8S_IO_SERVICE, GCP_K8S_IO_SERVICEACCOUNT, GCP_K8S_IO_PERSISTENTVOLUMECLAIM, GCP_APPS_K8S_IO_DEPLOYMENT, GCP_APPS_K8S_IO_STATEFULSET, GCP_CONTAINER_GOOGLEAPIS_COM_NODEPOOL, GCP_RBAC_AUTHORIZATION_K8S_IO_CLUSTERROLEBINDING, GCP_RBAC_AUTHORIZATION_K8S_IO_ROLEBINDING Serverless: GCP_RUN_GOOGLEAPIS_COM_SERVICE, GCP_RUN_GOOGLEAPIS_COM_REVISION, GCP_RUN_GOOGLEAPIS_COM_EXECUTION IAM & Security: GCP_IAM_GOOGLEAPIS_COM_SERVICEACCOUNT, GCP_IAM_GOOGLEAPIS_COM_ROLE, GCP_SECRETMANAGER_GOOGLEAPIS_COM_SECRETVERSION Messaging: GCP_PUBSUB_GOOGLEAPIS_COM_TOPIC Monitoring: GCP_MONITORING_GOOGLEAPIS_COM_DASHBOARD, GCP_LOGGING_GOOGLEAPIS_COM_SAVEDQUERY Infrastructure: GCP_REGION
Common GCP Fields
All GCP entities include:
gcp.project.id— GCP project identifiergcp.region— GCP region (e.g., us-central1)gcp.zone— GCP zone (e.g., us-central1-a)gcp.organization.id— GCP organization identifiergcp.resource.name— Resource namegcp.resource.type— Resource type identifiergcp.asset.type— GCP asset typegcp.object— JSON blob containing full resource configuration
GCP Organizational Hierarchy
GCP resources are organized in a hierarchy:
- Organization — Top-level container (
gcp.organization.id) - Folder — Logical grouping within an organization
- Project — Resource container (
gcp.project.id) - Region/Zone — Physical location (
gcp.region,gcp.zone)
Entity Naming Convention
GCP entity types follow the pattern GCP_<SERVICE_API>_<RESOURCE>:
- Service API maps to the Google API domain (e.g.,
compute.googleapis.com→COMPUTE_GOOGLEAPIS_COM) - Resource is the specific resource type (e.g.,
INSTANCE,NETWORK)
Examples:
GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE— Compute Engine VMGCP_K8S_IO_POD— GKE podGCP_RUN_GOOGLEAPIS_COM_SERVICE— Cloud Run service
---
Query Patterns
All GCP queries build on four core patterns. Master these and adapt them to any entity type.
Pattern 1: Resource Discovery
List resources by type, filter by project/region/zone, summarize counts:
smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE"
| fields name, gcp.project.id, gcp.region, gcp.zone, gcp.resource.nameTo list all GCP resource types, replace with "GCP_*" and add | summarize count = count(), by: {type} | sort count desc. Add filters like | filter gcp.project.id == "<PROJECT_ID>" or | filter gcp.region == "<REGION>" to scope results.
Pattern 2: Configuration Parsing
Parse gcp.object JSON for detailed configuration fields:
smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd machineType = gcpjson[configuration][resource][machineType],
status = gcpjson[configuration][resource][status]
| fields name, gcp.project.id, machineType, statusGCP configuration fields are nested under gcpjson[configuration][resource][...] for primary resource attributes and gcpjson[configuration][additionalAttributes][...] for extended properties.
Pattern 3: Relationship Traversal
Follow relationships between resources:
smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE"
| traverse "*", "GCP_COMPUTE_GOOGLEAPIS_COM_SUBNETWORK"
| fields name, gcp.project.idGCP entities use "*" as the relationship name in traversals because GCP entities do not have named relationship types. Use fieldsKeep to carry fields through traversals and dt.traverse.history[-N] to access ancestor fields.
Pattern 4: Label-Based Ownership
Group resources by GCP labels for ownership and organizational tracking:
smartscapeNodes "GCP_*"
| filter isNotNull(`tags:gcp_labels`)
| fields name, gcp.project.id, `tags:gcp_labels`GCP labels are exposed via the tags:gcp_labels field and must be accessed using backtick syntax. Replace "GCP_*" with a specific type to scope to one service.
---
Reference Guide
Load reference files for detailed queries when the core patterns above need service-specific adaptation.
| Reference | When to load | Key content |
|---|---|---|
| compute-instances.md | Compute Engine VMs, machine types, IP addresses, disks | Instance inventory, machine type distribution, status checks |
| kubernetes-gke.md | GKE clusters, node pools, pods, deployments, services, RBAC | Cluster topology, workload distribution, RBAC bindings |
| serverless-containers.md | Cloud Run services, revisions, executions | Service inventory, revision tracking, execution analysis |
| networking-dns.md | VPC networks, subnets, routes, DNS records | Network topology, subnet analysis, route tables, DNS record sets |
| messaging-pubsub.md | Pub/Sub topics | Topic inventory, messaging topology |
| iam-security.md | IAM service accounts, roles, Secret Manager | Service account audit, role analysis, secret version tracking |
| monitoring-logging.md | Monitoring dashboards, logging, saved queries | Dashboard inventory, saved query analysis |
| resource-management.md | GCP projects, regions, organizational hierarchy | Project inventory, region distribution, hierarchy mapping |
| resource-ownership.md | Resource ownership, GCP labels, organizational structure | Label-based grouping, project-level summaries, chargeback |
---
Best Practices
Configuration Parsing
1. Always parse gcp.object with JSON parser: parse gcp.object, "JSON:gcpjson" 2. Access primary resource attributes via gcpjson[configuration][resource][...] 3. Access extended properties via gcpjson[configuration][additionalAttributes][...] 4. Check for null values after parsing with isNotNull()
GCP Hierarchy
1. Organization → Folder → Project → Region/Zone 2. Use gcp.project.id as the primary scoping filter 3. Use gcp.organization.id for cross-project queries 4. Use gcp.region and gcp.zone for location-based analysis
Entity Naming
1. Entity types follow the GCP_<SERVICE_API>_<RESOURCE> format 2. Service API maps to the Google API domain with underscores replacing dots and hyphens 3. Use specific entity types (avoid "GCP_*" wildcards when possible)
Labels
1. GCP labels must be accessed via backtick syntax: ` tags:gcp_labels 2. Use isNotNull(tags:gcp_labels)` for label-based filtering 3. Track label coverage with summarize operations
Relationship Traversal
1. Use "*" as the relationship name — GCP entities do not have named relationship types 2. Use fieldsKeep to maintain important fields through traversal 3. Access traversal history with dt.traverse.history[-N] 4. Complex topologies may require multiple traverse operations
---
Limitations and Notes
Smartscape Limitations
- Smartscape data reflects the most recent scan; there may be a delay between GCP changes and Dynatrace visibility
- Not all GCP services are represented as entity types
- Some configuration fields may be null depending on resource setup
- Resource discovery depends on GCP integration configuration
GCP-Specific Notes
- GCP labels must be accessed via backtick syntax: `
tags:gcp_labels` - GCP entities use
"*"for relationship traversal (no named relationship types) - GCP object configuration requires parsing with
parse gcp.object, "JSON:gcpjson" - Configuration fields nest under
gcpjson[configuration][resource][...](differs from AWS pattern)
General Tips
- Filter early by project and region for better performance
- Use
isNotNull()andisNull()for graceful null handling - Combine project and region filters for large environments
- Use
countDistinct()for unique resource counts - Limit results with
| limit Nduring exploration
GCP Compute Engine Instances
Monitor and analyze GCP Compute Engine virtual machine instances, configurations, and static IP addresses.
Table of Contents
- Compute Entity Types
- Instance Discovery and Inventory
- Instance Configuration Analysis
- Security Analysis
- Relationship Traversal
- IP Address Management
Compute Entity Types
All these types support the standard discovery pattern: smartscapeNodes "<TYPE>" | fields name, gcp.project.id, gcp.region, gcp.zone, gcp.resource.name
| Entity type | Description |
|---|---|
GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE | Compute Engine VM instances |
GCP_COMPUTE_GOOGLEAPIS_COM_ADDRESS | Static IP addresses |
Instance Discovery and Inventory
List all Compute Engine instances:
smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE"
| fields name, gcp.project.id, gcp.region, gcp.zone, gcp.resource.nameCount instances by project:
smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE"
| summarize count(), by: {gcp.project.id}Find instances in a specific project:
smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE"
| filter gcp.project.id == "<GCP_PROJECT_ID>"
| fields name, gcp.region, gcp.zoneInstance Configuration Analysis
Get machine type and status for all instances:
smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd machineType = gcpjson[configuration][additionalAttributes][machineType],
status = gcpjson[configuration][resource][status]
| fields name, gcp.project.id, machineType, statusRetrieve instance labels:
smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd labels = gcpjson[configuration][resource][labels]
| fields name, labelsSecurity Analysis
Check deletion protection and external IP exposure:
smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd deletionProtection = gcpjson[configuration][additionalAttributes][deletionProtection],
externalIPs = gcpjson[configuration][additionalAttributes][externalIPs]
| fields name, deletionProtection, externalIPsAudit network interface details — internal and external IPs with machine type:
smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd internalIPs = gcpjson[configuration][additionalAttributes][internalIPs],
externalIPs = gcpjson[configuration][additionalAttributes][externalIPs],
machineType = gcpjson[configuration][additionalAttributes][machineType]
| fields name, gcp.project.id, machineType, internalIPs, externalIPsRelationship Traversal
Traverse from instances to their subnetworks:
smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE"
| traverse "*", "GCP_COMPUTE_GOOGLEAPIS_COM_SUBNETWORK"
| fields name, gcp.project.idIP Address Management
List all static IP addresses:
smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_ADDRESS"
| fields name, gcp.project.id, gcp.regionGCP IAM & Security
Monitor IAM service accounts, roles, and Secret Manager secrets for security auditing across GCP projects.
Table of Contents
- IAM & Security Entity Types
- Service Account Inventory
- Service Account Security Audit
- IAM Role Analysis
- Secret Management
IAM & Security Entity Types
All these types support the standard discovery pattern: smartscapeNodes "<TYPE>" | fields name, gcp.project.id
| Entity type | Description |
|---|---|
GCP_IAM_GOOGLEAPIS_COM_SERVICEACCOUNT | IAM service accounts |
GCP_IAM_GOOGLEAPIS_COM_ROLE | IAM roles |
GCP_SECRETMANAGER_GOOGLEAPIS_COM_SECRETVERSION | Secret Manager secret versions |
Service Account Inventory
List all service accounts with email and status:
smartscapeNodes "GCP_IAM_GOOGLEAPIS_COM_SERVICEACCOUNT"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd email = gcpjson[configuration][resource][email],
disabled = gcpjson[configuration][resource][disabled]
| fields name, gcp.project.id, email, disabledCount service accounts by project:
smartscapeNodes "GCP_IAM_GOOGLEAPIS_COM_SERVICEACCOUNT"
| summarize count(), by: {gcp.project.id}Find service accounts in a specific project:
smartscapeNodes "GCP_IAM_GOOGLEAPIS_COM_SERVICEACCOUNT"
| filter gcp.project.id == "<GCP_PROJECT_ID>"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd email = gcpjson[configuration][resource][email],
disabled = gcpjson[configuration][resource][disabled]
| fields name, email, disabledService Account Security Audit
Find disabled service accounts — useful for identifying decommissioned accounts that may still have role bindings:
smartscapeNodes "GCP_IAM_GOOGLEAPIS_COM_SERVICEACCOUNT"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd email = gcpjson[configuration][resource][email],
disabled = gcpjson[configuration][resource][disabled]
| filter disabled == true
| fields name, gcp.project.id, emailFind active (enabled) service accounts:
smartscapeNodes "GCP_IAM_GOOGLEAPIS_COM_SERVICEACCOUNT"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd email = gcpjson[configuration][resource][email],
disabled = gcpjson[configuration][resource][disabled]
| filter isNull(disabled) or disabled != true
| fields name, gcp.project.id, emailIAM Role Analysis
List all IAM roles:
smartscapeNodes "GCP_IAM_GOOGLEAPIS_COM_ROLE"
| fields name, gcp.project.idCount IAM roles by project:
smartscapeNodes "GCP_IAM_GOOGLEAPIS_COM_ROLE"
| summarize count(), by: {gcp.project.id}Secret Management
List Secret Manager secret versions with their state:
smartscapeNodes "GCP_SECRETMANAGER_GOOGLEAPIS_COM_SECRETVERSION"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd state = gcpjson[configuration][resource][state]
| fields name, gcp.project.id, stateFind enabled (active) secret versions:
smartscapeNodes "GCP_SECRETMANAGER_GOOGLEAPIS_COM_SECRETVERSION"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd state = gcpjson[configuration][resource][state]
| filter state == "ENABLED"
| fields name, gcp.project.idFind destroyed or disabled secret versions — useful for lifecycle auditing:
smartscapeNodes "GCP_SECRETMANAGER_GOOGLEAPIS_COM_SECRETVERSION"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd state = gcpjson[configuration][resource][state]
| filter state != "ENABLED"
| fields name, gcp.project.id, stateSummarize secret versions by state:
smartscapeNodes "GCP_SECRETMANAGER_GOOGLEAPIS_COM_SECRETVERSION"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd state = gcpjson[configuration][resource][state]
| summarize count(), by: {state}GCP Kubernetes / GKE
Monitor GKE clusters, workloads, nodes, RBAC, and storage via Dynatrace Smartscape.
Table of Contents
- Kubernetes Entity Types
- Pod Discovery and Status
- Deployment and StatefulSet Management
- Node and Node Pool Configuration
- Service Discovery
- RBAC Analysis
- Storage
- Cross-Resource Summarization
Kubernetes Entity Types
All these types support the standard discovery pattern: smartscapeNodes "<TYPE>" | fields name, gcp.project.id, gcp.region, ...
Config parsing pattern: parse gcp.object, "JSON:gcpjson" then access gcpjson[configuration][resource][...]
| Entity type | Description |
|---|---|
GCP_K8S_IO_POD | Kubernetes pods |
GCP_K8S_IO_NODE | Kubernetes nodes |
GCP_K8S_IO_SERVICE | Kubernetes services |
GCP_K8S_IO_SERVICEACCOUNT | Kubernetes service accounts |
GCP_K8S_IO_PERSISTENTVOLUMECLAIM | Persistent volume claims |
GCP_APPS_K8S_IO_DEPLOYMENT | Kubernetes deployments |
GCP_APPS_K8S_IO_STATEFULSET | Kubernetes stateful sets |
GCP_CONTAINER_GOOGLEAPIS_COM_NODEPOOL | GKE node pools |
GCP_RBAC_AUTHORIZATION_K8S_IO_CLUSTERROLEBINDING | Cluster-wide role bindings |
GCP_RBAC_AUTHORIZATION_K8S_IO_ROLEBINDING | Namespace-scoped role bindings |
Pod Discovery and Status
List all pods with project and region:
smartscapeNodes "GCP_K8S_IO_POD"
| fields name, gcp.project.id, gcp.regionExtract pod phase and assigned node from the GCP object configuration:
smartscapeNodes "GCP_K8S_IO_POD"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd phase = gcpjson[configuration][resource][status][phase],
nodeName = gcpjson[configuration][resource][spec][nodeName]
| fields name, gcp.project.id, phase, nodeNameFind all pods scheduled on a specific node:
smartscapeNodes "GCP_K8S_IO_POD"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd nodeName = gcpjson[configuration][resource][spec][nodeName]
| filter nodeName == "<NODE_NAME>"
| fields name, gcp.project.id, nodeNameDeployment and StatefulSet Management
List all deployments:
smartscapeNodes "GCP_APPS_K8S_IO_DEPLOYMENT"
| fields name, gcp.project.id, gcp.regionList all stateful sets:
smartscapeNodes "GCP_APPS_K8S_IO_STATEFULSET"
| fields name, gcp.project.id, gcp.regionNode and Node Pool Configuration
List all Kubernetes nodes:
smartscapeNodes "GCP_K8S_IO_NODE"
| fields name, gcp.project.id, gcp.regionInspect GKE node pool sizing and machine types — use for capacity planning and cost analysis:
smartscapeNodes "GCP_CONTAINER_GOOGLEAPIS_COM_NODEPOOL"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd initialNodeCount = gcpjson[configuration][resource][initialNodeCount],
diskSizeGb = gcpjson[configuration][resource][config][diskSizeGb],
machineType = gcpjson[configuration][resource][config][machineType]
| fields name, gcp.project.id, gcp.region, initialNodeCount, diskSizeGb, machineTypeList node pool configurations for a specific project:
smartscapeNodes "GCP_CONTAINER_GOOGLEAPIS_COM_NODEPOOL"
| filter gcp.project.id == "<GCP_PROJECT_ID>"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd initialNodeCount = gcpjson[configuration][resource][initialNodeCount],
diskSizeGb = gcpjson[configuration][resource][config][diskSizeGb],
machineType = gcpjson[configuration][resource][config][machineType]
| fields name, gcp.region, initialNodeCount, diskSizeGb, machineTypeService Discovery
List all Kubernetes services:
smartscapeNodes "GCP_K8S_IO_SERVICE"
| fields name, gcp.project.id, gcp.regionList all service accounts:
smartscapeNodes "GCP_K8S_IO_SERVICEACCOUNT"
| fields name, gcp.project.id, gcp.regionRBAC Analysis
List cluster-wide role bindings — use for auditing cluster-level permissions:
smartscapeNodes "GCP_RBAC_AUTHORIZATION_K8S_IO_CLUSTERROLEBINDING"
| fields name, gcp.project.id, gcp.regionList namespace-scoped role bindings:
smartscapeNodes "GCP_RBAC_AUTHORIZATION_K8S_IO_ROLEBINDING"
| fields name, gcp.project.id, gcp.regionStorage
List all persistent volume claims:
smartscapeNodes "GCP_K8S_IO_PERSISTENTVOLUMECLAIM"
| fields name, gcp.project.id, gcp.regionCross-Resource Summarization
Count pods by GCP project:
smartscapeNodes "GCP_K8S_IO_POD"
| summarize count(), by: {gcp.project.id}GCP Messaging (Pub/Sub)
Monitor Pub/Sub topics and messaging infrastructure across GCP projects.
Table of Contents
Messaging Entity Types
All these types support the standard discovery pattern: smartscapeNodes "<TYPE>" | fields name, gcp.project.id, gcp.region
| Entity type | Description |
|---|---|
GCP_PUBSUB_GOOGLEAPIS_COM_TOPIC | Pub/Sub topics |
Topic Discovery
List all Pub/Sub topics:
smartscapeNodes "GCP_PUBSUB_GOOGLEAPIS_COM_TOPIC"
| fields name, gcp.project.id, gcp.regionFind topics in a specific project:
smartscapeNodes "GCP_PUBSUB_GOOGLEAPIS_COM_TOPIC"
| filter gcp.project.id == "<GCP_PROJECT_ID>"
| fields name, gcp.regionFind topics by name pattern:
smartscapeNodes "GCP_PUBSUB_GOOGLEAPIS_COM_TOPIC"
| filter contains(name, "<TOPIC_NAME_PATTERN>")
| fields name, gcp.project.id, gcp.regionTopic Distribution by Project
Count Pub/Sub topics per project:
smartscapeNodes "GCP_PUBSUB_GOOGLEAPIS_COM_TOPIC"
| summarize count(), by: {gcp.project.id}Count topics by project and region:
smartscapeNodes "GCP_PUBSUB_GOOGLEAPIS_COM_TOPIC"
| summarize count(), by: {gcp.project.id, gcp.region}GCP Monitoring & Logging
Monitor Cloud Monitoring dashboards and Cloud Logging saved queries across GCP projects.
Table of Contents
Monitoring & Logging Entity Types
All these types support the standard discovery pattern: smartscapeNodes "<TYPE>" | fields name, gcp.project.id
| Entity type | Description |
|---|---|
GCP_MONITORING_GOOGLEAPIS_COM_DASHBOARD | Cloud Monitoring dashboards |
GCP_LOGGING_GOOGLEAPIS_COM_SAVEDQUERY | Cloud Logging saved queries |
Monitoring Dashboard Inventory
List all Cloud Monitoring dashboards:
smartscapeNodes "GCP_MONITORING_GOOGLEAPIS_COM_DASHBOARD"
| fields name, gcp.project.idCount dashboards by project:
smartscapeNodes "GCP_MONITORING_GOOGLEAPIS_COM_DASHBOARD"
| summarize count(), by: {gcp.project.id}Find dashboards in a specific project:
smartscapeNodes "GCP_MONITORING_GOOGLEAPIS_COM_DASHBOARD"
| filter gcp.project.id == "<GCP_PROJECT_ID>"
| fields nameLogging Configuration
List all Cloud Logging saved queries:
smartscapeNodes "GCP_LOGGING_GOOGLEAPIS_COM_SAVEDQUERY"
| fields name, gcp.project.idCount saved queries by project:
smartscapeNodes "GCP_LOGGING_GOOGLEAPIS_COM_SAVEDQUERY"
| summarize count(), by: {gcp.project.id}Count all monitoring and logging resources by type:
smartscapeNodes "GCP_MONITORING_GOOGLEAPIS_COM_DASHBOARD", "GCP_LOGGING_GOOGLEAPIS_COM_SAVEDQUERY"
| summarize count(), by: {type, gcp.project.id}GCP Networking & DNS
Monitor VPC networks, subnets, routes, and Cloud DNS record sets across GCP projects.
Table of Contents
- Networking Entity Types
- VPC Network Configuration
- Subnet Management
- Route Analysis
- DNS Records
- Network Topology
Networking Entity Types
All these types support the standard discovery pattern: smartscapeNodes "<TYPE>" | fields name, gcp.project.id, gcp.region
| Entity type | Description |
|---|---|
GCP_COMPUTE_GOOGLEAPIS_COM_NETWORK | VPC networks |
GCP_COMPUTE_GOOGLEAPIS_COM_SUBNETWORK | VPC subnets |
GCP_COMPUTE_GOOGLEAPIS_COM_ROUTE | Network routes |
GCP_DNS_GOOGLEAPIS_COM_RESOURCERECORDSET | Cloud DNS resource record sets |
VPC Network Configuration
List VPC networks with auto-subnet mode and routing configuration:
smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_NETWORK"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd autoCreateSubnetworks = gcpjson[configuration][resource][autoCreateSubnetworks],
routingMode = gcpjson[configuration][resource][routingConfig][routingMode]
| fields name, gcp.project.id, autoCreateSubnetworks, routingModeFind VPC networks in a specific project:
smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_NETWORK"
| filter gcp.project.id == "<GCP_PROJECT_ID>"
| fields name, autoCreateSubnetworksSubnet Management
List all subnets with CIDR ranges and purpose:
smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_SUBNETWORK"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd ipCidrRange = gcpjson[configuration][resource][ipCidrRange],
purpose = gcpjson[configuration][resource][purpose]
| fields name, gcp.project.id, gcp.region, ipCidrRange, purposeCount subnets by project and region:
smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_SUBNETWORK"
| summarize count(), by: {gcp.project.id, gcp.region}Find subnets in a specific project:
smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_SUBNETWORK"
| filter gcp.project.id == "<GCP_PROJECT_ID>"
| fields name, gcp.region, ipCidrRange, purposeRoute Analysis
List routes with destination ranges and next-hop gateways:
smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_ROUTE"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd destRange = gcpjson[configuration][resource][destRange],
nextHopGateway = gcpjson[configuration][resource][nextHopGateway]
| fields name, gcp.project.id, destRange, nextHopGatewayFind routes targeting the default internet gateway:
smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_ROUTE"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd destRange = gcpjson[configuration][resource][destRange],
nextHopGateway = gcpjson[configuration][resource][nextHopGateway]
| filter contains(toString(nextHopGateway), "default-internet-gateway")
| fields name, gcp.project.id, destRangeDNS Records
List all Cloud DNS resource record sets:
smartscapeNodes "GCP_DNS_GOOGLEAPIS_COM_RESOURCERECORDSET"
| fields name, gcp.project.idCount DNS records by project:
smartscapeNodes "GCP_DNS_GOOGLEAPIS_COM_RESOURCERECORDSET"
| summarize count(), by: {gcp.project.id}Network Topology
Count all networking resources by type and project:
smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_NETWORK", "GCP_COMPUTE_GOOGLEAPIS_COM_SUBNETWORK", "GCP_COMPUTE_GOOGLEAPIS_COM_ROUTE", "GCP_DNS_GOOGLEAPIS_COM_RESOURCERECORDSET"
| summarize count(), by: {type, gcp.project.id}dt-obs-gcp Reference Files
| File | Description |
|---|---|
| compute-instances.md | Compute Engine instances, machine types, IP addresses, and instance configuration |
| kubernetes-gke.md | GKE clusters, node pools, pods, deployments, services, RBAC bindings, and workload management |
| serverless-containers.md | Cloud Run services, revisions, and execution tracking |
| networking-dns.md | VPC networks, subnets, routes, and DNS record sets |
| messaging-pubsub.md | Pub/Sub topics and messaging infrastructure |
| iam-security.md | IAM service accounts, roles, Secret Manager secrets, and security auditing |
| monitoring-logging.md | Monitoring dashboards, logging saved queries, and observability configuration |
| resource-management.md | GCP projects, regions, and organizational hierarchy |
| resource-ownership.md | Resource ownership via GCP labels and organizational structure |
GCP Resource Management
Analyze GCP resource distribution across regions, projects, and organizational hierarchy.
Table of Contents
- Resource Management Entity Types
- Region Inventory
- Resource Distribution by Project
- Resource Distribution by Region
Resource Management Entity Types
| Entity type | Description |
|---|---|
GCP_REGION | GCP regions where resources are deployed |
Region Inventory
List all GCP regions with monitored resources:
smartscapeNodes "GCP_REGION"
| fields name, idResource Distribution by Project
Count all GCP resources by project — use for understanding project-level resource sprawl:
smartscapeNodes "GCP_*"
| summarize count(), by: {gcp.project.id}
| sort `count()`, direction: "descending"Break down resources by type within a specific project:
smartscapeNodes "GCP_*"
| filter gcp.project.id == "<GCP_PROJECT_ID>"
| summarize count(), by: {type}
| sort `count()`, direction: "descending"Count distinct resource types per project:
smartscapeNodes "GCP_*"
| summarize
type_count = countDistinct(type),
total_resources = count(),
by: {gcp.project.id}
| sort total_resources, direction: "descending"Resource Distribution by Region
Count all GCP resources by region:
smartscapeNodes "GCP_*"
| summarize count(), by: {gcp.region}
| sort `count()`, direction: "descending"Find resource types spanning multiple regions:
smartscapeNodes "GCP_*"
| summarize
region_count = countDistinct(gcp.region),
total_resources = count(),
by: {type}
| filter region_count > 1
| sort region_count, direction: "descending"View resource distribution across projects and regions:
smartscapeNodes "GCP_*"
| summarize count(), by: {gcp.project.id, gcp.region}
| sort `count()`, direction: "descending"GCP Resource Ownership
Track resource ownership using GCP labels and organizational structure across all GCP entity types.
Table of Contents
Label-Based Resource Ownership
GCP uses labels (key-value pairs) for resource organization and ownership tracking. Labels are exposed via the tags:gcp_labels attribute on smartscape nodes.
Find all GCP resources that have labels assigned:
smartscapeNodes "GCP_*"
| filter isNotNull(`tags:gcp_labels`)
| fields name, gcp.project.id, `tags:gcp_labels`Filter resources by a specific label:
smartscapeNodes "GCP_*"
| filter isNotNull(`tags:gcp_labels`)
| filter contains(toString(`tags:gcp_labels`), "<LABEL_KEY>")
| fields name, gcp.project.id, `tags:gcp_labels`Summarize resources by label for ownership reporting:
smartscapeNodes "GCP_*"
| filter isNotNull(`tags:gcp_labels`)
| filter contains(toString(`tags:gcp_labels`), "<LABEL_KEY>")
| summarize count(), by: {gcp.project.id, type}Common Ownership Labels
| Label key | Use case | Typical values |
|---|---|---|
team | Team-level allocation | Team names |
owner | Individual accountability | Email or username |
cost-center | Financial chargeback | Cost center codes |
environment | Environment segmentation | production, staging, dev |
application | Application ownership | Application names |
project | Project-based grouping | Project identifiers |
Instance-Level Label Extraction
For Compute Engine instances, labels are also available inside gcp.object:
smartscapeNodes "GCP_COMPUTE_GOOGLEAPIS_COM_INSTANCE"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd labels = gcpjson[configuration][resource][labels]
| fields name, labelsOrganization-Level Overview
Summarize resources by GCP organization — use for multi-org visibility:
smartscapeNodes "GCP_*"
| summarize count(), by: {gcp.organization.id}Break down organization resources by project:
smartscapeNodes "GCP_*"
| summarize count(), by: {gcp.organization.id, gcp.project.id}
| sort `count()`, direction: "descending"Label Discovery
Find resources with no labels — useful for label compliance auditing:
smartscapeNodes "GCP_*"
| filter isNull(`tags:gcp_labels`)
| summarize count(), by: {type, gcp.project.id}Calculate label coverage across resource types:
smartscapeNodes "GCP_*"
| fieldsAdd has_labels = if(isNotNull(`tags:gcp_labels`), 1)
| summarize
total = count(),
with_labels = sum(has_labels),
by: {type}
| fieldsAdd label_coverage_pct = (with_labels * 100.0) / total
| sort label_coverage_pct ascGCP Serverless Containers (Cloud Run)
Monitor Cloud Run services, revisions, and job executions across GCP projects.
Table of Contents
- Serverless Container Entity Types
- Service Discovery
- Revision Tracking
- Execution Monitoring
- Service Distribution
Serverless Container Entity Types
All these types support the standard discovery pattern: smartscapeNodes "<TYPE>" | fields name, gcp.project.id, gcp.region
| Entity type | Description |
|---|---|
GCP_RUN_GOOGLEAPIS_COM_SERVICE | Cloud Run services |
GCP_RUN_GOOGLEAPIS_COM_REVISION | Cloud Run revisions (immutable snapshots of service configuration) |
GCP_RUN_GOOGLEAPIS_COM_EXECUTION | Cloud Run job executions |
Service Discovery
Cloud Run services exist in two schema versions with different field layouts:
- v1 (
serving.knative.dev/v1): Knative-compatible format — runtime state is nested understatus - v2 (
run.googleapis.com/v2): Native Cloud Run v2 format — fields are top-level
List all Cloud Run services with their API version — use this to identify which schema version applies:
smartscapeNodes "GCP_RUN_GOOGLEAPIS_COM_SERVICE"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd apiVersion = gcpjson[configuration][resource][apiVersion]
| fields name, gcp.project.id, gcp.region, apiVersionList Cloud Run v1 services with their public URL and latest serving revision:
smartscapeNodes "GCP_RUN_GOOGLEAPIS_COM_SERVICE"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd apiVersion = gcpjson[configuration][resource][apiVersion]
| filter apiVersion == "serving.knative.dev/v1"
| fieldsAdd url = gcpjson[configuration][resource][status][url],
latestReadyRevision = gcpjson[configuration][resource][status][latestReadyRevisionName]
| fields name, gcp.project.id, gcp.region, url, latestReadyRevisionList Cloud Run v2 services with launch stage, URI, and latest revision — field paths follow the Cloud Run v2 API spec:
smartscapeNodes "GCP_RUN_GOOGLEAPIS_COM_SERVICE"
| parse gcp.object, "JSON:gcpjson"
| fieldsAdd apiVersion = gcpjson[configuration][resource][apiVersion]
| filter apiVersion != "serving.knative.dev/v1"
| fieldsAdd launchStage = gcpjson[configuration][resource][launchStage],
uri = gcpjson[configuration][resource][uri],
latestReadyRevision = gcpjson[configuration][resource][latestReadyRevision]
| fields name, gcp.project.id, gcp.region, launchStage, uri, latestReadyRevisionFind Cloud Run services in a specific project:
smartscapeNodes "GCP_RUN_GOOGLEAPIS_COM_SERVICE"
| filter gcp.project.id == "<GCP_PROJECT_ID>"
| fields name, gcp.regionRevision Tracking
List all Cloud Run revisions to track deployment history:
smartscapeNodes "GCP_RUN_GOOGLEAPIS_COM_REVISION"
| fields name, gcp.project.id, gcp.regionFind revisions in a specific project:
smartscapeNodes "GCP_RUN_GOOGLEAPIS_COM_REVISION"
| filter gcp.project.id == "<GCP_PROJECT_ID>"
| fields name, gcp.regionExecution Monitoring
List Cloud Run job executions:
smartscapeNodes "GCP_RUN_GOOGLEAPIS_COM_EXECUTION"
| fields name, gcp.project.id, gcp.regionService Distribution
Count Cloud Run services by project and region:
smartscapeNodes "GCP_RUN_GOOGLEAPIS_COM_SERVICE"
| summarize count(), by: {gcp.project.id, gcp.region}Count all Cloud Run resources by type:
smartscapeNodes "GCP_RUN_GOOGLEAPIS_COM_SERVICE", "GCP_RUN_GOOGLEAPIS_COM_REVISION", "GCP_RUN_GOOGLEAPIS_COM_EXECUTION"
| summarize count(), by: {type}Related skills
FAQ
Which GCP services does dt-obs-gcp cover?
dt-obs-gcp configures Dynatrace observability for Google Kubernetes Engine (GKE), Cloud Run, and native GCP service integrations. The skill sets up dashboards, SLOs, and AI workload telemetry across these deployment targets.
When should developers use dt-obs-gcp?
dt-obs-gcp applies when production or staging AI workloads run on Google Cloud and need Dynatrace full-stack visibility beyond default Cloud Monitoring—especially GKE clusters and Cloud Run services requiring SLO tracking.