{"id":"a3788cd2-c482-4ed5-b91d-dc36434fa372","shortId":"VzuMER","kind":"skill","title":"dt-obs-azure","tagline":"Azure cloud resources including VMs, VMSS, SQL Database, Storage, AKS, App Service, Functions, VNet networking, load balancers, Event Hubs, Container Apps, and Key Vault. Monitor Azure infrastructure, analyze resource usage, audit security posture, and manage organizational hiera","description":"# Azure Cloud Infrastructure\n\nMonitor and analyze Azure resources using Dynatrace Smartscape and DQL. Query Azure services, audit security, manage organizational hierarchy, and plan capacity across your Azure infrastructure.\n\n## When to Use This Skill\n\nUse this skill when the user needs to work with Azure resources in Dynatrace. Load the reference file for the task type:\n\n| Task | File to load |\n|---|---|\n| Inventory and topology queries | (no additional file — use core patterns below) |\n| Query Azure metric timeseries (CPU, latency, throughput) | Load `references/metrics-performance.md` |\n| VNet topology, subnets, NSGs, public IPs, VPN, peering | Load `references/vnet-networking-security.md` |\n| Azure SQL, Cosmos DB, PostgreSQL, Redis investigation | Load `references/database-monitoring.md` |\n| Functions, App Service, AKS infrastructure, Container Apps | Load `references/serverless-containers.md` |\n| Azure LB, Application Gateway, Front Door, API Management | Load `references/load-balancing-api.md` |\n| WAF rule analysis, false-positive investigation | Load `references/load-balancing-api.md` |\n| Event Hubs, Service Bus, Event Grid | Load `references/messaging-integration.md` |\n| Storage Accounts, Blob, File, Queue, Table | Load `references/storage-monitoring.md` |\n| Unattached resources, tag compliance, lifecycle | Load `references/resource-management.md` |\n| Cost savings, unused resources, SKU analysis | Load `references/cost-optimization.md` |\n| Capacity headroom, VMSS scaling, quotas | Load `references/capacity-planning.md` |\n| Security audit, encryption, public access, Key Vault | Load `references/security-compliance.md` |\n| NSG rule analysis (0.0.0.0/0, open ports) | Load `references/security-compliance.md` |\n| Storage account encryption/public access audit | Load `references/security-compliance.md` |\n| Cost allocation, chargeback, ownership | Load `references/resource-ownership.md` |\n| Determine orchestration context (AKS, VMSS, standalone) | Load `references/workload-detection.md` |\n\n---\n\n## Core Concepts\n\n### Entity Types\n\nAzure resources use the `AZURE_*` prefix and can be queried using the `smartscapeNodes` function. All Azure entities are automatically discovered and modeled in Dynatrace Smartscape. Entity type names are derived from the ARM resource provider path: `/Microsoft.Compute/virtualMachines` becomes `AZURE_MICROSOFT_COMPUTE_VIRTUALMACHINES`. Sub-resources append with underscores: `/Microsoft.Sql/servers/databases` becomes `AZURE_MICROSOFT_SQL_SERVERS_DATABASES`.\n\n**Compute:** `AZURE_MICROSOFT_COMPUTE_VIRTUALMACHINES`, `AZURE_MICROSOFT_COMPUTE_VIRTUALMACHINESCALESETS`, `AZURE_MICROSOFT_COMPUTE_VIRTUALMACHINESCALESETS_VIRTUALMACHINES`, `AZURE_MICROSOFT_COMPUTE_DISKS`, `AZURE_MICROSOFT_COMPUTE_SSHPUBLICKEYS`, `AZURE_MICROSOFT_COMPUTE_VIRTUALMACHINES_EXTENSIONS`\n**Networking:** `AZURE_MICROSOFT_NETWORK_VIRTUALNETWORKS`, `AZURE_MICROSOFT_NETWORK_VIRTUALNETWORKS_SUBNETS`, `AZURE_MICROSOFT_NETWORK_NETWORKSECURITYGROUPS`, `AZURE_MICROSOFT_NETWORK_PUBLICIPADDRESSES`, `AZURE_MICROSOFT_NETWORK_NETWORKINTERFACES`, `AZURE_MICROSOFT_NETWORK_LOADBALANCERS`, `AZURE_MICROSOFT_NETWORK_APPLICATIONGATEWAYS`, `AZURE_MICROSOFT_NETWORK_VIRTUALNETWORKGATEWAYS`, `AZURE_MICROSOFT_NETWORK_CONNECTIONS`, `AZURE_MICROSOFT_NETWORK_EXPRESSROUTECIRCUITS`\n**Database:** `AZURE_MICROSOFT_SQL_SERVERS`, `AZURE_MICROSOFT_SQL_SERVERS_DATABASES`, `AZURE_MICROSOFT_CACHE_REDIS`, `AZURE_MICROSOFT_CACHE_REDISENTERPRISE`, `AZURE_MICROSOFT_DOCUMENTDB_DATABASEACCOUNTS`\n**Storage:** `AZURE_MICROSOFT_STORAGE_STORAGEACCOUNTS`, `AZURE_MICROSOFT_STORAGE_STORAGEACCOUNTS_BLOBSERVICES_CONTAINERS`, `AZURE_MICROSOFT_STORAGE_STORAGEACCOUNTS_FILESERVICES_SHARES`, `AZURE_MICROSOFT_STORAGE_STORAGEACCOUNTS_QUEUESERVICES_QUEUES`, `AZURE_MICROSOFT_STORAGE_STORAGEACCOUNTS_TABLESERVICES_TABLES`\n**Kubernetes/Containers:** `AZURE_MICROSOFT_CONTAINERSERVICE_MANAGEDCLUSTERS`, `AZURE_MICROSOFT_CONTAINERSERVICE_MANAGEDCLUSTERS_AGENTPOOLS`, `AZURE_MICROSOFT_CONTAINERREGISTRY_REGISTRIES`, `AZURE_MICROSOFT_APP_CONTAINERAPPS`, `AZURE_MICROSOFT_APP_MANAGEDENVIRONMENTS`, `AZURE_MICROSOFT_APP_JOBS`\n**App Service:** `AZURE_MICROSOFT_WEB_SITES`, `AZURE_MICROSOFT_WEB_SERVERFARMS`, `AZURE_MICROSOFT_WEB_SITES_FUNCTIONS`\n**Messaging:** `AZURE_MICROSOFT_EVENTHUB_NAMESPACES`, `AZURE_MICROSOFT_EVENTHUB_NAMESPACES_EVENTHUBS`, `AZURE_MICROSOFT_SERVICEBUS_NAMESPACES`, `AZURE_MICROSOFT_SERVICEBUS_NAMESPACES_QUEUES`, `AZURE_MICROSOFT_SERVICEBUS_NAMESPACES_TOPICS`, `AZURE_MICROSOFT_SERVICEBUS_NAMESPACES_TOPICS_SUBSCRIPTIONS`\n**Security/Identity:** `AZURE_MICROSOFT_KEYVAULT_VAULTS`, `AZURE_MICROSOFT_MANAGEDIDENTITY_USERASSIGNEDIDENTITIES`\n**Monitoring:** `AZURE_MICROSOFT_OPERATIONALINSIGHTS_WORKSPACES`, `AZURE_MICROSOFT_INSIGHTS_COMPONENTS`\n**API Management:** `AZURE_MICROSOFT_APIMANAGEMENT_SERVICE`\n\n### Azure Organizational Hierarchy\n\nAzure organizes resources in a three-level hierarchy: **Tenant > Subscription > Resource Group**. Every resource belongs to exactly one resource group within one subscription. Use these fields to scope queries:\n\n```dql-snippet\nfilter azure.subscription == \"08b9810e-...\"\n```\n\n```dql-snippet\nfilter azure.resource.group == \"my-rg\"\n```\n\n```dql-snippet\nfilter azure.location == \"eastus\"\n```\n\nCombine these filters for precise scoping:\n\n```dql-template\nsmartscapeNodes \"AZURE_*\"\n| filter azure.subscription == \"<SUBSCRIPTION_ID>\"\n    and azure.resource.group == \"<RESOURCE_GROUP>\"\n    and azure.location == \"<REGION>\"\n| summarize count = count(), by: {type}\n| sort count desc\n```\n\nTo see the organizational breakdown across your environment:\n\n```dql\nsmartscapeNodes \"AZURE_*\"\n| summarize resource_count = count(), by: {azure.subscription, azure.resource.group}\n| sort resource_count desc\n```\n\n### Common Azure Fields\n\nAll Azure entities include:\n- `azure.subscription` — Azure subscription GUID\n- `azure.resource.group` — Resource group name\n- `azure.location` — Azure region (e.g., `eastus`, `polandcentral`)\n- `azure.resourceType` — ARM resource type (e.g., `microsoft.compute/virtualmachines`)\n- `azure.provisioning_state` — Provisioning state (e.g., `Succeeded`)\n- `azure.object` — Full ARM resource JSON (see [Configuration Parsing](#configuration-parsing-with-azureobject))\n- `cloud.provider` — Always `azure`\n- `tags` — Resource tags (use `` tags[`key`] ``)\n\nSome entity types also have:\n- `azure.resourceId` — Full ARM resource ID (VMs and some others)\n- `azure.resourceName` — Resource name (VMs and some others)\n- `azure.availabilityZones` — Availability zone list (VMs)\n\n### Relationship Types\n\nAzure entity relationships can be traversed using `traverse`. The `dt.traverse.relationship` field is **not populated** for Azure entities, so you must use `\"*\"` as the relationship name in all traversal commands.\n\nKey traversal pairs:\n- **VM → Disks:** `traverse \"*\", \"AZURE_MICROSOFT_COMPUTE_DISKS\"`\n- **VM → NICs:** `traverse \"*\", \"AZURE_MICROSOFT_NETWORK_NETWORKINTERFACES\"`\n- **VM → VMSS:** `traverse \"*\", \"AZURE_MICROSOFT_COMPUTE_VIRTUALMACHINESCALESETS\"`\n- **VM → Availability Zones:** `traverse \"*\", \"AZURE_MICROSOFT_RESOURCES_LOCATIONS_AVAILABILITYZONES\"`\n- **VM ← Extensions:** `traverse \"*\", \"AZURE_MICROSOFT_COMPUTE_VIRTUALMACHINES_EXTENSIONS\", direction:backward`\n- **VMSS → AKS Clusters:** `traverse \"*\", \"AZURE_MICROSOFT_CONTAINERSERVICE_MANAGEDCLUSTERS\"`\n- **VMSS → Subnets:** `traverse \"*\", \"AZURE_MICROSOFT_NETWORK_VIRTUALNETWORKS_SUBNETS\"`\n- **VMSS → NSGs:** `traverse \"*\", \"AZURE_MICROSOFT_NETWORK_NETWORKSECURITYGROUPS\"`\n- **VMSS → LB Backend Pools:** `traverse \"*\", \"AZURE_MICROSOFT_NETWORK_LOADBALANCERS_BACKENDADDRESSPOOLS\"`\n- **Subnet → VNet:** `traverse \"*\", \"AZURE_MICROSOFT_NETWORK_VIRTUALNETWORKS\"`\n- **Subnet → NSG:** `traverse \"*\", \"AZURE_MICROSOFT_NETWORK_NETWORKSECURITYGROUPS\"`\n- **Subnet ← VMSS:** `traverse \"*\", \"AZURE_MICROSOFT_COMPUTE_VIRTUALMACHINESCALESETS\", direction:backward`\n- **NSG ← NICs:** `traverse \"*\", \"AZURE_MICROSOFT_NETWORK_NETWORKINTERFACES\", direction:backward`\n- **NSG ← Subnets:** `traverse \"*\", \"AZURE_MICROSOFT_NETWORK_VIRTUALNETWORKS_SUBNETS\", direction:backward`\n- **LB → Backend Pools:** `traverse \"*\", \"AZURE_MICROSOFT_NETWORK_LOADBALANCERS_BACKENDADDRESSPOOLS\"`\n- **LB → Frontend IPs:** `traverse \"*\", \"AZURE_MICROSOFT_NETWORK_LOADBALANCERS_FRONTENDIPCONFIGURATIONS\"`\n- **LB → LB Rules:** `traverse \"*\", \"AZURE_MICROSOFT_NETWORK_LOADBALANCERS_LOADBALANCINGRULES\"`\n- **SQL Server ← SQL Databases:** `traverse \"*\", \"AZURE_MICROSOFT_SQL_SERVERS_DATABASES\", direction:backward`\n- **Storage Account ← Blob Containers:** `traverse \"*\", \"AZURE_MICROSOFT_STORAGE_STORAGEACCOUNTS_BLOBSERVICES_CONTAINERS\", direction:backward`\n- **Storage Account ← File Shares:** `traverse \"*\", \"AZURE_MICROSOFT_STORAGE_STORAGEACCOUNTS_FILESERVICES_SHARES\", direction:backward`\n- **AKS ← VMSS:** `traverse \"*\", \"AZURE_MICROSOFT_COMPUTE_VIRTUALMACHINESCALESETS\", direction:backward`\n- **AKS ← Agent Pools:** `traverse \"*\", \"AZURE_MICROSOFT_CONTAINERSERVICE_MANAGEDCLUSTERS_AGENTPOOLS\", direction:backward`\n- **AKS ← NSGs:** `traverse \"*\", \"AZURE_MICROSOFT_NETWORK_NETWORKSECURITYGROUPS\", direction:backward`\n- **AKS ← Public IPs:** `traverse \"*\", \"AZURE_MICROSOFT_NETWORK_PUBLICIPADDRESSES\", direction:backward`\n- **AKS → Public IPs:** `traverse \"*\", \"AZURE_MICROSOFT_NETWORK_PUBLICIPADDRESSES\"`\n- **Web Site → App Service Plan:** `traverse \"*\", \"AZURE_MICROSOFT_WEB_SERVERFARMS\"`\n- **Web Site ← Functions:** `traverse \"*\", \"AZURE_MICROSOFT_WEB_SITES_FUNCTIONS\", direction:backward`\n- **Container App → Managed Environment:** `traverse \"*\", \"AZURE_MICROSOFT_APP_MANAGEDENVIRONMENTS\"`\n- **EventHub Namespace ← Event Hubs:** `traverse \"*\", \"AZURE_MICROSOFT_EVENTHUB_NAMESPACES_EVENTHUBS\", direction:backward`\n- **ServiceBus Namespace ← Queues:** `traverse \"*\", \"AZURE_MICROSOFT_SERVICEBUS_NAMESPACES_QUEUES\", direction:backward`\n- **ServiceBus Namespace ← Topics:** `traverse \"*\", \"AZURE_MICROSOFT_SERVICEBUS_NAMESPACES_TOPICS\", direction:backward`\n- **ServiceBus Topic ← Subscriptions:** `traverse \"*\", \"AZURE_MICROSOFT_SERVICEBUS_NAMESPACES_TOPICS_SUBSCRIPTIONS\", direction:backward`\n- Use `fieldsKeep:{field1, field2}` to carry fields through multi-hop traversals\n- After a **single-hop** traverse, use `dt.traverse.history[0][id]` to get the source entity ID, then `lookup` to resolve the source entity name:\n  ```dql-snippet\n  | fieldsAdd sourceId = dt.traverse.history[0][id]\n  | lookup [smartscapeNodes \"SOURCE_TYPE\" | fields name, id], sourceField: sourceId, lookupField: id, prefix: \"src.\"\n  ```\n- After **multi-hop** traversals, `dt.traverse.history[-N]` works for fields carried via `fieldsKeep`\n\n### Azure Metric Naming Convention\n\nDynatrace ingests Azure Monitor metrics and exposes them using this naming pattern:\n\n```\ncloud.azure.<provider_namespace>.<resource_type>.<MetricName>\n```\n\nThe `<provider_namespace>` uses underscores within the namespace (e.g., `microsoft_compute`) and `<resource_type>` is lowercase (e.g., `virtualmachines`). Hierarchy levels are dot-separated: `microsoft_sql.servers.databases`. `<MetricName>` is the Azure Monitor metric name.\n\n**Examples:**\n\n| Azure Monitor metric | Dynatrace metric key |\n|---|---|\n| VM `Percentage CPU` | `cloud.azure.microsoft_compute.virtualmachines.PercentageCPU` |\n| SQL DB `cpu_percent` | `cloud.azure.microsoft_sql.servers.databases.cpu_percent` |\n| Storage `Ingress` | `cloud.azure.microsoft_storage.storageaccounts.Ingress` |\n| Event Hub `IncomingMessages` | `cloud.azure.microsoft_eventhub.namespaces.IncomingMessages` |\n| Service Bus `IncomingMessages` | `cloud.azure.microsoft_servicebus.namespaces.IncomingMessages` |\n| App Service `HttpResponseTime` | `cloud.azure.microsoft_web.sites.HttpResponseTime` |\n| Load Balancer `ByteCount` | `cloud.azure.microsoft_network.loadbalancers.ByteCount` |\n| AKS `node_cpu_usage_percentage` | `cloud.azure.microsoft_containerservice.managedclusters.node_cpu_usage_percentage` |\n| Cosmos DB `TotalRequestUnits` | `cloud.azure.microsoft_documentdb.databaseaccounts.TotalRequestUnits` |\n| Redis `serverLoad` | `cloud.azure.microsoft_cache.redis.serverLoad` |\n| App Gateway `TotalRequests` | `cloud.azure.microsoft_network.applicationgateways.TotalRequests` |\n\nTo query a metric:\n\n```dql-template\ntimeseries cpu = avg(cloud.azure.microsoft_compute.virtualmachines.PercentageCPU),\n           by: {dt.smartscape_source.id},\n  from: now()-1h\n| limit 10\n```\n\n**Important:** Never refer to these as \"Azure Monitor alerts\" or \"Azure Monitor metrics\" in output. Dynatrace monitors Azure resources natively through its Azure integration — these are **Dynatrace metrics** ingested from Azure.\n\n### Configuration Parsing with azure.object\n\nThe `azure.object` field contains the full ARM resource JSON. Parse it with the `azjson` alias:\n\n```dql-snippet\nparse azure.object, \"JSON:azjson\"\n```\n\nThe JSON is wrapped in a `configuration` key:\n\n```json\n{\n  \"configuration\": {\n    \"id\": \"<ARM resource ID>\",\n    \"name\": \"<resource name>\",\n    \"type\": \"<ARM resource type>\",\n    \"location\": \"<region>\",\n    \"sku\": { ... },\n    \"properties\": { ... },\n    \"zones\": [...]\n  },\n  \"tags\": { ... }\n}\n```\n\nAccess patterns:\n- Properties: `azjson[configuration][properties][field]`\n- SKU: `azjson[configuration][sku][name]`\n- Kind: `azjson[configuration][kind]`\n- Zones: `azjson[configuration][zones]`\n\nCommon configuration fields by service:\n- **VM:** `properties.hardwareProfile.vmSize`, `properties.storageProfile.imageReference.offer`, `properties.storageProfile.osDisk.osType`, `properties.extended.instanceView.powerState.displayStatus`\n- **VMSS:** `sku.name` (VM size), `sku.capacity` (instance count), `tags.aks-managed-poolName`\n- **NSG:** `properties.securityRules[]` (custom rules array), `properties.securityRules[].properties.direction`, `properties.securityRules[].properties.access`, `properties.securityRules[].properties.sourceAddressPrefix`\n- **Storage Account:** `kind` (e.g., StorageV2), `sku.name`, `properties.accessTier`, `properties.supportsHttpsTrafficOnly`, `properties.allowBlobPublicAccess`, `properties.encryption.keySource`\n- **SQL Server:** `properties.fullyQualifiedDomainName`, `properties.publicNetworkAccess`, `properties.minimalTlsVersion`\n- **SQL Database:** `sku.name` (tier), `sku.capacity` (DTU/vCore), `properties.status`, `properties.zoneRedundant`\n- **AKS:** `properties.kubernetesVersion`, `properties.powerState.code`, `properties.networkProfile.networkPlugin`, `properties.enableRBAC`\n- **Web Site:** `kind` (e.g., `functionapp,linux`), `properties.state`, `properties.defaultHostName`, `properties.siteConfig.linuxFxVersion`\n- **Container App:** `properties.runningStatus`, `properties.template.containers[].image`, `properties.template.scale.minReplicas`, `properties.template.scale.maxReplicas`\n- **Event Hub Namespace:** `sku.name`, `properties.kafkaEnabled`, `properties.zoneRedundant`\n- **Service Bus Namespace:** `sku.name` (Basic/Standard/Premium), `properties.zoneRedundant`, `properties.minimumTlsVersion`, `properties.publicNetworkAccess`, `properties.disableLocalAuth`, `properties.status`\n- **Service Bus Queue:** `properties.maxSizeInMegabytes`, `properties.enablePartitioning`, `properties.deadLetteringOnMessageExpiration`, `properties.maxDeliveryCount`, `properties.lockDuration`, `properties.requiresDuplicateDetection`, `properties.status`\n- **Key Vault:** `properties.enableRbacAuthorization`, `properties.enableSoftDelete`, `properties.publicNetworkAccess`\n- **Redis:** `properties.sku.name`, `properties.hostName`, `properties.redisVersion`, `properties.enableNonSslPort`\n- **Cosmos DB:** `kind` (e.g., GlobalDocumentDB), `properties.EnabledApiTypes`, `properties.consistencyPolicy.defaultConsistencyLevel`\n- **Load Balancer:** `sku.name`, `tags.aks-managed-cluster-name`\n- **App Gateway:** `properties.sku.name`, `properties.sku.tier`, `properties.operationalState`, `properties.webApplicationFirewallConfiguration.enabled`, `properties.webApplicationFirewallConfiguration.firewallMode` (Detection/Prevention), `properties.webApplicationFirewallConfiguration.ruleSetType`, `properties.webApplicationFirewallConfiguration.ruleSetVersion`, `properties.webApplicationFirewallConfiguration.disabledRuleGroups[]`, `properties.webApplicationFirewallConfiguration.exclusions[]`, `properties.firewallPolicy.id`\n\n---\n\n## Query Patterns\n\nAll Azure queries build on four core patterns. Master these and adapt them to any entity type.\n\n### Pattern 1: Resource Discovery\n\nList resources by type, filter by subscription/resource group/region/tags, summarize counts:\n\n```dql-template\nsmartscapeNodes \"AZURE_*\"\n| filter azure.subscription == \"<SUBSCRIPTION_ID>\" and azure.location == \"<REGION>\"\n| summarize count = count(), by: {type}\n| sort count desc\n```\n\nTo list a specific type, replace `\"AZURE_*\"` with the entity type (e.g., `\"AZURE_MICROSOFT_COMPUTE_VIRTUALMACHINES\"`). Add `| fields name, azure.subscription, azure.resource.group, azure.location, ...` to select specific columns. Use `` tags[`TagName`] `` for tag-based filtering.\n\n### Pattern 2: Configuration Parsing\n\nParse `azure.object` JSON for detailed configuration fields:\n\n```dql-template\nsmartscapeNodes \"AZURE_MICROSOFT_COMPUTE_VIRTUALMACHINES\"\n| parse azure.object, \"JSON:azjson\"\n| fieldsAdd vmSize = azjson[configuration][properties][hardwareProfile][vmSize],\n            osType = azjson[configuration][properties][storageProfile][osDisk][osType]\n| summarize vm_count = count(), by: {vmSize, osType, azure.location}\n```\n\n### Pattern 3: Relationship Traversal\n\nFollow relationships between resources. Use `\"*\"` for the relationship name since Azure does not populate `dt.traverse.relationship`:\n\n```dql-template\nsmartscapeNodes \"AZURE_MICROSOFT_NETWORK_LOADBALANCERS\"\n| parse azure.object, \"JSON:azjson\"\n| fieldsAdd lbSku = azjson[configuration][sku][name]\n| traverse \"*\", \"AZURE_MICROSOFT_NETWORK_LOADBALANCERS_BACKENDADDRESSPOOLS\", fieldsKeep:{lbSku, name, id}\n| fieldsAdd backendPoolName = name\n| traverse \"*\", \"AZURE_MICROSOFT_COMPUTE_VIRTUALMACHINESCALESETS\", direction:backward, fieldsKeep:{backendPoolName, id}\n| fieldsAdd loadBalancerName = dt.traverse.history[-2][name],\n            loadBalancerId = dt.traverse.history[-2][id],\n            backendPoolId = dt.traverse.history[-1][id]\n```\n\nKey differences from AWS traversals:\n- Always use `\"*\"` as the relationship name (relationship type names are empty for Azure)\n- Azure relationships primarily follow a parent-child hierarchy: sub-resources link backward to parent resources\n- AKS is a major relationship hub with backward links from VMSS, NSGs, LBs, Public IPs, Agent Pools, and Managed Identities\n\n### Pattern 4: Tag-Based Ownership\n\nGroup resources by any tag for ownership/chargeback:\n\n```dql-template\nsmartscapeNodes \"AZURE_*\"\n| filter isNotNull(tags[`<TAG_NAME>`])\n| summarize resource_count = count(), by: {tags[`<TAG_NAME>`], type}\n| sort resource_count desc\n```\n\nCommon Azure tags: `` tags[`ACE:CREATED-BY`] ``, `` tags[`dt_owner_email`] ``, `` tags[`dt_owner_team`] ``, `` tags[`project`] ``, `` tags[`managed-by`] ``. Replace `\"AZURE_*\"` with a specific type to scope to one service.\n\nFind untagged resources: `| filter arraySize(tags) == 0`\n\n---\n\n## Reference Guide\n\nLoad reference files for detailed queries when the core patterns above need service-specific adaptation.\n\n| Reference | When to load | Key content |\n|---|---|---|\n| [vnet-networking-security.md](references/vnet-networking-security.md) | VNet topology, subnets, NSGs, public IPs, VPN, peering | VNet/subnet mapping, NSG blast radius, public IP detection |\n| [database-monitoring.md](references/database-monitoring.md) | Azure SQL, Cosmos DB, Redis Cache | Service tier distribution, zone redundancy, public access checks |\n| [serverless-containers.md](references/serverless-containers.md) | Functions, App Service, AKS infra, Container Apps | Runtime distribution, App Service Plan mapping, AKS node pools |\n| [load-balancing-api.md](references/load-balancing-api.md) | Load Balancers, Application Gateways, API Management | LB backend pool traversal, App Gateway routing, APIM config |\n| [messaging-integration.md](references/messaging-integration.md) | Event Hubs, Service Bus, Event Grid | Namespace inventory, Kafka enablement, throughput unit analysis |\n| [storage-monitoring.md](references/storage-monitoring.md) | Storage Accounts, Blob, File, Queue, Table | SKU distribution, access tier, encryption audit, public access |\n| [resource-management.md](references/resource-management.md) | Resource audits, tag compliance, lifecycle | Unattached disks, tag coverage, provisioning state analysis |\n| [cost-optimization.md](references/cost-optimization.md) | Cost savings, unused resources, sizing | VM SKU analysis, unattached disks, deallocated VMs |\n| [capacity-planning.md](references/capacity-planning.md) | Capacity analysis, scaling, utilization | VMSS headroom, subnet IP counts, AKS node pool sizing |\n| [security-compliance.md](references/security-compliance.md) | Security audits, encryption, public access, Key Vault | NSG rule analysis, TLS version audit, public endpoint detection, encryption checks |\n| [resource-ownership.md](references/resource-ownership.md) | Chargeback, ownership, cost allocation | Tag-based grouping, subscription/resource-group summaries |\n| [workload-detection.md](references/workload-detection.md) | Determine orchestration context and resolution path | AKS node, VMSS member, standalone VM detection for blast radius analysis |\n| [metrics-performance.md](references/metrics-performance.md) | Query metric timeseries for a specific resource | DQL timeseries patterns for VM, SQL, Storage, Event Hub, LB, App Service, AKS, Cosmos DB, Redis, App Gateway |\n\n---\n\n## Best Practices\n\n### Query Optimization\n1. Filter early by subscription, resource group, and region\n2. Use specific entity types (avoid `\"AZURE_*\"` wildcards when possible)\n3. Limit results with `| limit N` for exploration\n4. Use `isNotNull()` checks before accessing nested fields\n\n### Configuration Parsing\n1. Always parse `azure.object` with JSON parser: `parse azure.object, \"JSON:azjson\"`\n2. Use consistent field naming: `fieldsAdd configField = azjson[configuration][properties][field]`\n3. Access SKU via `azjson[configuration][sku][name]` (not inside `properties`)\n4. Check for null values after parsing — not all entity types have the same properties structure\n5. Use `toString()` for complex nested objects\n\n### Organizational Hierarchy\n1. Always scope queries by `azure.subscription` in multi-subscription environments\n2. Use `azure.resource.group` to narrow to a team or application boundary\n3. Combine `azure.location` for region-specific analysis\n4. Use `summarize ... by: {azure.subscription, azure.resource.group}` for organizational breakdowns\n\n### Tagging Strategy\n1. Use `` tags[`key`] `` for filtering (backtick-quoted key names)\n2. Check `arraySize(tags)` for untagged resources\n3. Track tag coverage with summarize operations\n4. Common ownership tags: `dt_owner_email`, `dt_owner_team`, `ACE:CREATED-BY`\n\n---\n\n## Limitations and Notes\n\n### Smartscape Limitations\n- Azure object configuration requires parsing with `parse azure.object, \"JSON:azjson\"`\n- Azure metrics are available as Dynatrace metrics using the `cloud.azure.*` naming convention (see [Azure Metric Naming Convention](#azure-metric-naming-convention))\n- Resource discovery depends on Azure integration configuration in Dynatrace\n- Tag synchronization may have slight delays\n\n### Relationship Traversal\n- **Azure relationship type names are empty** — always use `\"*\"` as the relationship name in `traverse` commands\n- Use `direction:backward` for reverse relationships (e.g., sub-resources to parent)\n- Use `fieldsKeep` to maintain important fields through traversal\n- Access traversal history with `dt.traverse.history[0][id]` for single-hop source entity ID; use `lookup` to resolve source entity name\n- For multi-hop traversals, `dt.traverse.history[-N]` accesses fields carried via `fieldsKeep`\n- Azure relationships primarily follow parent-child hierarchy patterns\n- AKS is a major relationship hub — expect many backward relationships converging on AKS cluster entities\n\n### AKS Coverage\n- This skill covers AKS **infrastructure-layer** entities only (clusters, agent pools, VMSS, networking)\n- For Kubernetes **workload-layer** observability (pods, deployments, services, namespaces), defer to the `dt-obs-kubernetes` skill\n\n### General Tips\n- Use `getNodeName()` for human-readable resource names\n- Handle null values gracefully with `isNotNull()` and `isNull()`\n- Combine subscription, resource group, and region filters for large environments\n- Use `countDistinct()` for unique resource counts\n- The `azure.resourceType` field is lowercase ARM format (e.g., `microsoft.compute/virtualmachines`) — useful for filtering but not for entity type matching","tags":["obs","azure","dynatrace","for","agent-skills","ai-agents","claude-code","devops","dql","mcp","observability"],"capabilities":["skill","source-dynatrace","skill-dt-obs-azure","topic-agent-skills","topic-ai-agents","topic-claude-code","topic-devops","topic-dql","topic-dynatrace","topic-mcp","topic-observability"],"categories":["dynatrace-for-ai"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/Dynatrace/dynatrace-for-ai/dt-obs-azure","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add Dynatrace/dynatrace-for-ai","source_repo":"https://github.com/Dynatrace/dynatrace-for-ai","install_from":"skills.sh"}},"qualityScore":"0.489","qualityRationale":"deterministic score 0.49 from registry signals: · indexed on github topic:agent-skills · 78 github stars · SKILL.md body (24,791 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:56:47.849Z","embedding":null,"createdAt":"2026-05-11T18:57:13.886Z","updatedAt":"2026-05-18T18:56:47.849Z","lastSeenAt":"2026-05-18T18:56:47.849Z","tsv":"'-1':1224,1663 '-2':1655,1659 '/0':219 '/microsoft.compute/virtualmachines':285 '/microsoft.sql/servers/databases':297 '/virtualmachines':647,2440 '0':1059,1081,1791,2310 '0.0.0.0':218 '08b9810e':557 '1':1483,2041,2078,2136,2177 '10':1227 '2':1548,2050,2089,2147,2188 '3':1593,2060,2100,2158,2195 '4':1721,2068,2111,2166,2202 '5':2127 'access':210,227,1303,1848,1910,1915,1965,2073,2101,2305,2333 'account':177,225,891,904,1356,1903 'ace':1756,2212 'across':66,602 'adapt':1476,1809 'add':1529 'addit':106 'agent':926,1715,2374 'agentpool':433,933 'ak':14,143,240,777,916,925,936,945,955,1189,1378,1700,1855,1865,1955,1999,2031,2347,2359,2362,2367 'alert':1236 'alia':1277 'alloc':232,1984 'also':679 'alway':668,1670,2079,2137,2276 'analysi':161,196,217,1899,1929,1939,1947,1970,2009,2165 'analyz':32,47 'api':155,513,1874 'apim':1883 'apimanag':517 'app':15,25,141,146,440,444,448,450,965,985,991,1181,1205,1393,1450,1853,1858,1861,1880,2029,2035 'append':294 'applic':151,1872,2156 'applicationgateway':360 'arm':281,641,656,683,1269,2435 'array':1348 'arrays':1789,2190 'audit':35,58,207,228,1913,1919,1962,1973 'automat':267 'avail':698,758,2234 'availabilityzon':765 'avg':1218 'avoid':2055 'aw':1668 'azjson':1276,1284,1306,1311,1316,1320,1569,1572,1578,1622,1625,2088,2096,2104,2230 'azur':4,5,30,42,48,56,68,85,113,131,149,249,253,264,287,299,305,309,313,318,322,326,332,336,341,345,349,353,357,361,365,369,374,378,383,387,391,396,400,406,412,418,425,429,434,438,442,446,452,456,460,466,470,475,479,484,489,496,500,505,509,515,519,522,582,607,620,623,627,635,669,704,719,739,746,753,761,769,780,787,795,804,812,819,826,835,844,855,864,873,883,895,908,919,929,939,949,959,969,977,989,998,1009,1020,1031,1109,1115,1149,1154,1234,1238,1245,1250,1258,1466,1500,1519,1525,1562,1606,1615,1630,1643,1682,1683,1737,1753,1775,1836,2056,2221,2231,2244,2249,2257,2270,2338 'azure-metric-naming-convent':2248 'azure.availabilityzones':697 'azure.location':570,588,634,1504,1534,1591,2160 'azure.object':654,1262,1264,1282,1552,1567,1620,2081,2086,2228 'azure.provisioning':648 'azure.resource.group':562,586,614,630,1533,2149,2171 'azure.resourceid':681 'azure.resourcename':690 'azure.resourcetype':640,2431 'azure.subscription':556,584,613,626,1502,1532,2141,2170 'azureobject':666 'backend':801,852,1877 'backendaddresspool':808,859,1634 'backendpoolid':1661 'backendpoolnam':1640,1650 'backtick':2184 'backtick-quot':2183 'backward':775,831,840,850,889,902,915,924,935,944,954,983,1004,1015,1026,1038,1648,1696,1707,2287,2355 'balanc':21,1186,1443,1871 'base':1545,1724,1987 'basic/standard/premium':1409 'becom':286,298 'belong':537 'best':2037 'blast':1829,2007 'blob':178,892,1904 'blobservic':404,899 'boundari':2157 'breakdown':601,2174 'build':1468 'bus':171,1178,1406,1416,1890 'bytecount':1187 'cach':385,389,1841 'capac':65,199,1946 'capacity-planning.md':1944 'carri':1044,1106,2335 'chargeback':233,1981 'check':1849,1978,2071,2112,2189 'child':1690,2344 'cloud':6,43 'cloud.azure':1125,2240 'cloud.azure.microsoft_cache.redis.serverload':1204 'cloud.azure.microsoft_compute.virtualmachines.percentagecpu':1163,1219 'cloud.azure.microsoft_containerservice.managedclusters.node':1194 'cloud.azure.microsoft_documentdb.databaseaccounts.totalrequestunits':1201 'cloud.azure.microsoft_eventhub.namespaces.incomingmessages':1176 'cloud.azure.microsoft_network.applicationgateways.totalrequests':1208 'cloud.azure.microsoft_network.loadbalancers.bytecount':1188 'cloud.azure.microsoft_servicebus.namespaces.incomingmessages':1180 'cloud.azure.microsoft_sql.servers.databases.cpu':1168 'cloud.azure.microsoft_storage.storageaccounts.ingress':1172 'cloud.azure.microsoft_web.sites.httpresponsetime':1184 'cloud.provider':667 'cluster':778,1448,2360,2373 'column':1538 'combin':572,2159,2414 'command':732,2284 'common':619,1323,1752,2203 'complex':2131 'complianc':187,1921 'compon':512 'comput':289,304,307,311,315,320,324,328,741,755,771,828,921,1134,1527,1564,1645 'concept':246 'config':1884 'configfield':2095 'configur':660,663,1259,1291,1294,1307,1312,1317,1321,1324,1549,1556,1573,1579,1626,2076,2097,2105,2223,2259 'configuration-parsing-with-azureobject':662 'connect':368 'consist':2091 'contain':24,145,405,893,900,984,1266,1392,1857 'containerapp':441 'containerregistri':436 'containerservic':427,431,782,931 'content':1815 'context':239,1995 'convent':1112,2242,2247,2252 'converg':2357 'core':109,245,1471,1802 'cosmos':133,1198,1435,1838,2032 'cost':191,231,1932,1983 'cost-optimization.md':1930 'count':590,591,595,610,611,617,1339,1495,1506,1507,1511,1586,1587,1743,1744,1750,1954,2429 'countdistinct':2425 'cover':2366 'coverag':1926,2198,2363 'cpu':116,1162,1166,1191,1195,1217 'creat':1758,2214 'created-bi':1757,2213 'custom':1346 'databas':12,303,373,382,881,887,1371 'database-monitoring.md':1834 'databaseaccount':394 'db':134,1165,1199,1436,1839,2033 'dealloc':1942 'defer':2388 'delay':2267 'depend':2255 'deploy':2385 'deriv':278 'desc':596,618,1512,1751 'detail':1555,1798 'detect':1833,1976,2005 'detection/prevention':1457 'determin':237,1993 'differ':1666 'direct':774,830,839,849,888,901,914,923,934,943,953,982,1003,1014,1025,1037,1647,2286 'discov':268 'discoveri':1485,2254 'disk':321,737,742,1924,1941 'distribut':1844,1860,1909 'documentdb':393 'door':154 'dot':1144 'dot-separ':1143 'dql':54,553,559,567,579,605,1076,1214,1279,1497,1559,1612,1734,2019 'dql-snippet':552,558,566,1075,1278 'dql-templat':578,1213,1496,1558,1611,1733 'dt':2,1761,1765,2206,2209,2392 'dt-obs-azur':1 'dt-obs-kubernet':2391 'dt.smartscape_source.id':1221 'dt.traverse.history':1058,1080,1101,1654,1658,1662,2309,2331 'dt.traverse.relationship':713,1610 'dtu/vcore':1375 'dynatrac':51,88,272,1113,1157,1243,1254,2236,2261 'e.g':637,644,652,1132,1138,1358,1386,1438,1524,2291,2437 'earli':2043 'eastus':571,638 'email':1763,2208 'empti':1680,2275 'enabl':1896 'encrypt':208,1912,1963,1977 'encryption/public':226 'endpoint':1975 'entiti':247,265,274,624,677,705,720,1065,1073,1480,1522,2053,2120,2317,2324,2361,2371,2447 'environ':604,987,2146,2423 'event':22,168,172,995,1173,1399,1887,1891,2026 'eventhub':468,472,474,993,1000,1002 'everi':535 'exact':539 'exampl':1153 'expect':2353 'explor':2067 'expos':1119 'expressroutecircuit':372 'extens':330,767,773 'fals':163 'false-posit':162 'field':548,621,714,1045,1087,1105,1265,1309,1325,1530,1557,2075,2092,2099,2302,2334,2432 'field1':1041 'field2':1042 'fieldsadd':1078,1570,1623,1639,1652,2094 'fieldskeep':1040,1108,1635,1649,2298,2337 'file':92,98,107,179,905,1796,1905 'fileservic':410,912 'filter':555,561,569,574,583,1490,1501,1546,1738,1788,2042,2182,2420,2443 'find':1785 'follow':1596,1686,2341 'format':2436 'four':1470 'front':153 'frontend':861 'frontendipconfigur':868 'full':655,682,1268 'function':17,140,262,464,975,981,1852 'functionapp':1387 'gateway':152,1206,1451,1873,1881,2036 'general':2396 'get':1062 'getnodenam':2399 'globaldocumentdb':1439 'grace':2409 'grid':173,1892 'group':534,542,632,1726,1988,2047,2417 'group/region/tags':1493 'guid':629,1793 'h':1225 'handl':2406 'hardwareprofil':1575 'headroom':200,1951 'hiera':41 'hierarchi':62,521,530,1140,1691,2135,2345 'histori':2307 'hop':1049,1055,1099,2315,2329 'httpresponsetim':1183 'hub':23,169,996,1174,1400,1705,1888,2027,2352 'human':2402 'human-read':2401 'id':685,1060,1066,1082,1089,1093,1295,1638,1651,1660,1664,2311,2318 'ident':1719 'imag':1396 'import':1228,2301 'includ':8,625 'incomingmessag':1175,1179 'infra':1856 'infrastructur':31,44,69,144,2369 'infrastructure-lay':2368 'ingest':1114,1256 'ingress':1171 'insid':2109 'insight':511 'instanc':1338 'integr':1251,2258 'inventori':101,1894 'investig':137,165 'ip':126,862,947,957,1714,1823,1832,1953 'isnotnul':1739,2070,2411 'isnul':2413 'job':449 'json':658,1271,1283,1286,1293,1553,1568,1621,2083,2087,2229 'kafka':1895 'key':27,211,675,733,1159,1292,1425,1665,1814,1966,2180,2186 'keyvault':498 'kind':1315,1318,1357,1385,1437 'kubernet':2379,2394 'kubernetes/containers':424 'larg':2422 'latenc':117 'layer':2370,2382 'lb':150,800,851,860,869,870,1876,2028 'lbs':1712 'lbsku':1624,1636 'level':529,1141 'lifecycl':188,1922 'limit':1226,2061,2064,2216,2220 'link':1695,1708 'linux':1388 'list':700,1486,1514 'load':20,89,100,119,129,138,147,157,166,174,182,189,197,204,213,222,229,235,243,1185,1442,1794,1813,1870 'load-balancing-api.md':1868 'loadbalanc':356,807,858,867,876,1618,1633 'loadbalancerid':1657 'loadbalancernam':1653 'loadbalancingrul':877 'locat':764,1298 'lookup':1068,1083,2320 'lookupfield':1092 'lowercas':1137,2434 'maintain':2300 'major':1703,2350 'manag':39,60,156,514,986,1342,1447,1718,1772,1875 'managed-bi':1771 'managed-cluster-nam':1446 'managed-poolnam':1341 'managedclust':428,432,783,932 'managedenviron':445,992 'managedident':502 'mani':2354 'map':1827,1864 'master':1473 'match':2449 'may':2264 'member':2002 'messag':465 'messaging-integration.md':1885 'metric':114,1110,1117,1151,1156,1158,1212,1240,1255,2013,2232,2237,2245,2250 'metrics-performance.md':2010 'microsoft':288,300,306,310,314,319,323,327,333,337,342,346,350,354,358,362,366,370,375,379,384,388,392,397,401,407,413,419,426,430,435,439,443,447,453,457,461,467,471,476,480,485,490,497,501,506,510,516,740,747,754,762,770,781,788,796,805,813,820,827,836,845,856,865,874,884,896,909,920,930,940,950,960,970,978,990,999,1010,1021,1032,1133,1526,1563,1616,1631,1644 'microsoft.compute':646,2439 'microsoft.compute/virtualmachines':645,2438 'microsoft_sql.servers.databases':1146 'model':270 'monitor':29,45,504,1116,1150,1155,1235,1239,1244 'multi':1048,1098,2144,2328 'multi-hop':1047,1097,2327 'multi-subscript':2143 'must':723 'my-rg':563 'n':1102,2065,2332 'name':276,633,692,728,1074,1088,1111,1123,1152,1296,1314,1449,1531,1604,1628,1637,1641,1656,1675,1678,2093,2107,2187,2241,2246,2251,2273,2281,2325,2405 'namespac':469,473,478,482,487,492,994,1001,1006,1012,1017,1023,1034,1131,1401,1407,1893,2387 'narrow':2151 'nativ':1247 'need':81,1805 'nest':2074,2132 'network':19,331,334,338,343,347,351,355,359,363,367,371,748,789,797,806,814,821,837,846,857,866,875,941,951,961,1617,1632,2377 'networkinterfac':352,749,838 'networksecuritygroup':344,798,822,942 'never':1229 'nic':744,833 'node':1190,1866,1956,2000 'note':2218 'nsg':215,817,832,841,1344,1828,1968 'nsgs':124,793,937,1711,1821 'null':2114,2407 'ob':3,2393 'object':2133,2222 'observ':2383 'one':540,544,1783 'open':220 'oper':2201 'operationalinsight':507 'optim':2040 'orchestr':238,1994 'organ':523 'organiz':40,61,520,600,2134,2173 'osdisk':1582 'ostyp':1577,1583,1590 'other':689,696 'output':1242 'owner':1762,1766,2207,2210 'ownership':234,1725,1982,2204 'ownership/chargeback':1732 'pair':735 'parent':1689,1698,2296,2343 'parent-child':1688,2342 'pars':661,664,1260,1272,1281,1550,1551,1566,1619,2077,2080,2085,2117,2225,2227 'parser':2084 'path':284,1998 'pattern':110,1124,1304,1464,1472,1482,1547,1592,1720,1803,2021,2346 'peer':128,1825 'percent':1167,1169 'percentag':1161,1193,1197 'plan':64,967,1863 'pod':2384 'polandcentr':639 'pool':802,853,927,1716,1867,1878,1957,2375 'poolnam':1343 'popul':717,1609 'port':221 'posit':164 'possibl':2059 'postgresql':135 'postur':37 'practic':2038 'precis':576 'prefix':254,1094 'primarili':1685,2340 'project':1769 'properti':1300,1305,1308,1574,1580,2098,2110,2125 'properties.access':1352 'properties.accesstier':1361 'properties.allowblobpublicaccess':1363 'properties.consistencypolicy.defaultconsistencylevel':1441 'properties.deadletteringonmessageexpiration':1420 'properties.defaulthostname':1390 'properties.direction':1350 'properties.disablelocalauth':1413 'properties.enabledapitypes':1440 'properties.enablenonsslport':1434 'properties.enablepartitioning':1419 'properties.enablerbac':1382 'properties.enablerbacauthorization':1427 'properties.enablesoftdelete':1428 'properties.encryption.keysource':1364 'properties.extended.instanceview.powerstate.displaystatus':1332 'properties.firewallpolicy.id':1462 'properties.fullyqualifieddomainname':1367 'properties.hardwareprofile.vmsize':1329 'properties.hostname':1432 'properties.kafkaenabled':1403 'properties.kubernetesversion':1379 'properties.lockduration':1422 'properties.maxdeliverycount':1421 'properties.maxsizeinmegabytes':1418 'properties.minimaltlsversion':1369 'properties.minimumtlsversion':1411 'properties.networkprofile.networkplugin':1381 'properties.operationalstate':1454 'properties.powerstate.code':1380 'properties.publicnetworkaccess':1368,1412,1429 'properties.redisversion':1433 'properties.requiresduplicatedetection':1423 'properties.runningstatus':1394 'properties.securityrules':1345,1349,1351,1353 'properties.siteconfig.linuxfxversion':1391 'properties.sku.name':1431,1452 'properties.sku.tier':1453 'properties.sourceaddressprefix':1354 'properties.state':1389 'properties.status':1376,1414,1424 'properties.storageprofile.imagereference.offer':1330 'properties.storageprofile.osdisk.ostype':1331 'properties.supportshttpstrafficonly':1362 'properties.template.containers':1395 'properties.template.scale.maxreplicas':1398 'properties.template.scale.minreplicas':1397 'properties.webapplicationfirewallconfiguration.disabledrulegroups':1460 'properties.webapplicationfirewallconfiguration.enabled':1455 'properties.webapplicationfirewallconfiguration.exclusions':1461 'properties.webapplicationfirewallconfiguration.firewallmode':1456 'properties.webapplicationfirewallconfiguration.rulesettype':1458 'properties.webapplicationfirewallconfiguration.rulesetversion':1459 'properties.zoneredundant':1377,1404,1410 'provid':283 'provis':650,1927 'public':125,209,946,956,1713,1822,1831,1847,1914,1964,1974 'publicipaddress':348,952,962 'queri':55,104,112,258,551,1210,1463,1467,1799,2012,2039,2139 'queue':180,417,483,1007,1013,1417,1906 'queueservic':416 'quot':2185 'quota':203 'radius':1830,2008 'readabl':2403 'redi':136,386,1202,1430,1840,2034 'redisenterpris':390 'redund':1846 'refer':91,1230,1792,1795,1810 'references/capacity-planning.md':205,1945 'references/cost-optimization.md':198,1931 'references/database-monitoring.md':139,1835 'references/load-balancing-api.md':158,167,1869 'references/messaging-integration.md':175,1886 'references/metrics-performance.md':120,2011 'references/resource-management.md':190,1917 'references/resource-ownership.md':236,1980 'references/security-compliance.md':214,223,230,1960 'references/serverless-containers.md':148,1851 'references/storage-monitoring.md':183,1901 'references/vnet-networking-security.md':130,1817 'references/workload-detection.md':244,1992 'region':636,2049,2163,2419 'region-specif':2162 'registri':437 'relationship':702,706,727,1594,1597,1603,1674,1676,1684,1704,2268,2271,2280,2290,2339,2351,2356 'replac':1518,1774 'requir':2224 'resolut':1997 'resolv':1070,2322 'resourc':7,33,49,86,185,194,250,282,293,524,533,536,541,609,616,631,642,657,671,684,691,763,1246,1270,1484,1487,1599,1694,1699,1727,1742,1749,1787,1918,1935,2018,2046,2194,2253,2294,2404,2416,2428 'resource-management.md':1916 'resource-ownership.md':1979 'result':2062 'revers':2289 'rg':565 'rout':1882 'rule':160,216,871,1347,1969 'runtim':1859 'save':192,1933 'scale':202,1948 'scope':550,577,1781,2138 'secur':36,59,206,1961 'security-compliance.md':1959 'security/identity':495 'see':598,659,2243 'select':1536 'separ':1145 'server':302,377,381,879,886,1366 'serverfarm':459,972 'serverless-containers.md':1850 'serverload':1203 'servic':16,57,142,170,451,518,966,1177,1182,1327,1405,1415,1784,1807,1842,1854,1862,1889,2030,2386 'service-specif':1806 'servicebus':477,481,486,491,1005,1011,1016,1022,1027,1033 'share':411,906,913 'sinc':1605 'singl':1054,2314 'single-hop':1053,2313 'site':455,463,964,974,980,1384 'size':1336,1936,1958 'skill':74,77,2365,2395 'skill-dt-obs-azure' 'sku':195,1299,1310,1313,1627,1908,1938,2102,2106 'sku.capacity':1337,1374 'sku.name':1334,1360,1372,1402,1408,1444 'slight':2266 'smartscap':52,273,2219 'smartscapenod':261,581,606,1084,1499,1561,1614,1736 'snippet':554,560,568,1077,1280 'sort':594,615,1510,1748 'sourc':1064,1072,1085,2316,2323 'source-dynatrace' 'sourcefield':1090 'sourceid':1079,1091 'specif':1516,1537,1778,1808,2017,2052,2164 'sql':11,132,301,376,380,878,880,885,1164,1365,1370,1837,2024 'src':1095 'sshpublickey':325 'standalon':242,2003 'state':649,651,1928 'storag':13,176,224,395,398,402,408,414,420,890,897,903,910,1170,1355,1902,2025 'storage-monitoring.md':1900 'storageaccount':399,403,409,415,421,898,911 'storageprofil':1581 'storagev2':1359 'strategi':2176 'structur':2126 'sub':292,1693,2293 'sub-resourc':291,1692,2292 'subnet':123,340,785,791,809,816,823,842,848,1820,1952 'subscript':494,532,545,628,1029,1036,2045,2145,2415 'subscription/resource':1492 'subscription/resource-group':1989 'succeed':653 'summar':589,608,1494,1505,1584,1741,2168,2200 'summari':1990 'synchron':2263 'tabl':181,423,1907 'tableservic':422 'tag':186,670,672,674,1302,1540,1544,1723,1730,1740,1746,1754,1755,1760,1764,1768,1770,1790,1920,1925,1986,2175,2179,2191,2197,2205,2262 'tag-bas':1543,1722,1985 'tagnam':1541 'tags.aks':1340,1445 'task':95,97 'team':1767,2154,2211 'templat':580,1215,1498,1560,1613,1735 'tenant':531 'three':528 'three-level':527 'throughput':118,1897 'tier':1373,1843,1911 'timeseri':115,1216,2014,2020 'tip':2397 'tls':1971 'topic':488,493,1018,1024,1028,1035 'topic-agent-skills' 'topic-ai-agents' 'topic-claude-code' 'topic-devops' 'topic-dql' 'topic-dynatrace' 'topic-mcp' 'topic-observability' 'topolog':103,122,1819 'tostr':2129 'totalrequest':1207 'totalrequestunit':1200 'track':2196 'travers':709,711,731,734,738,745,752,760,768,779,786,794,803,811,818,825,834,843,854,863,872,882,894,907,918,928,938,948,958,968,976,988,997,1008,1019,1030,1050,1056,1100,1595,1629,1642,1669,1879,2269,2283,2304,2306,2330 'type':96,248,275,593,643,678,703,1086,1297,1481,1489,1509,1517,1523,1677,1747,1779,2054,2121,2272,2448 'unattach':184,1923,1940 'underscor':296,1128 'uniqu':2427 'unit':1898 'untag':1786,2193 'unus':193,1934 'usag':34,1192,1196 'use':50,72,75,108,251,259,546,673,710,724,1039,1057,1121,1127,1539,1600,1671,2051,2069,2090,2128,2148,2167,2178,2238,2277,2285,2297,2319,2398,2424,2441 'user':80 'userassignedident':503 'util':1949 'valu':2115,2408 'vault':28,212,499,1426,1967 'version':1972 'via':1107,2103,2336 'virtualmachin':290,308,317,329,772,1139,1528,1565 'virtualmachinescaleset':312,316,756,829,922,1646 'virtualnetwork':335,339,790,815,847 'virtualnetworkgateway':364 'vm':736,743,750,757,766,1160,1328,1335,1585,1937,2004,2023 'vms':9,686,693,701,1943 'vmsize':1571,1576,1589 'vmss':10,201,241,751,776,784,792,799,824,917,1333,1710,1950,2001,2376 'vnet':18,121,810,1818 'vnet-networking-security.md':1816 'vnet/subnet':1826 'vpn':127,1824 'waf':159 'web':454,458,462,963,971,973,979,1383 'wildcard':2057 'within':543,1129 'work':83,1103 'workload':2381 'workload-detection.md':1991 'workload-lay':2380 'workspac':508 'wrap':1288 'zone':699,759,1301,1319,1322,1845","prices":[{"id":"0bafabbc-bdf1-4c9d-bc39-782554e9fd36","listingId":"a3788cd2-c482-4ed5-b91d-dc36434fa372","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"Dynatrace","category":"dynatrace-for-ai","install_from":"skills.sh"},"createdAt":"2026-05-11T18:57:13.886Z"}],"sources":[{"listingId":"a3788cd2-c482-4ed5-b91d-dc36434fa372","source":"github","sourceId":"Dynatrace/dynatrace-for-ai/dt-obs-azure","sourceUrl":"https://github.com/Dynatrace/dynatrace-for-ai/tree/main/skills/dt-obs-azure","isPrimary":false,"firstSeenAt":"2026-05-11T18:57:13.886Z","lastSeenAt":"2026-05-18T18:56:47.849Z"}],"details":{"listingId":"a3788cd2-c482-4ed5-b91d-dc36434fa372","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"Dynatrace","slug":"dt-obs-azure","github":{"repo":"Dynatrace/dynatrace-for-ai","stars":78,"topics":["agent-skills","ai-agents","claude-code","devops","dql","dynatrace","mcp","observability"],"license":"apache-2.0","html_url":"https://github.com/Dynatrace/dynatrace-for-ai","pushed_at":"2026-05-15T16:06:09Z","description":"Skills, prompts, and instructions for building AI agents on top of Dynatrace production context","skill_md_sha":"095f847d593a2b452838f67e9e3119a8133b4d52","skill_md_path":"skills/dt-obs-azure/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/Dynatrace/dynatrace-for-ai/tree/main/skills/dt-obs-azure"},"layout":"multi","source":"github","category":"dynatrace-for-ai","frontmatter":{"name":"dt-obs-azure","license":"Apache-2.0","description":"Azure cloud resources including VMs, VMSS, SQL Database, Storage, AKS, App Service, Functions, VNet networking, load balancers, Event Hubs, Container Apps, and Key Vault. Monitor Azure infrastructure, analyze resource usage, audit security posture, and manage organizational hierarchy across subscriptions and resource groups."},"skills_sh_url":"https://skills.sh/Dynatrace/dynatrace-for-ai/dt-obs-azure"},"updatedAt":"2026-05-18T18:56:47.849Z"}}