关于 dt-obs-azure
面向 Dynatrace 的 Azure 基础设施 Skill,通过 Smartscape 和 DQL 查询与分析资源。内容涵盖资源清单、各类服务监控、安全、归属、成本和容量任务。
主要功能
- 01发现 Azure 资源与拓扑
- 02查询 Azure 指标时间序列
- 03检查资源关系
- 04审计安全与标签合规性
- 05分析成本和容量
适用场景
- 01按订阅或区域盘点资源
- 02调查 Azure 数据库性能
- 03检查网络暴露面和安全设置
- 04识别未使用资源及容量余量
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dynatrace/ dynatrace-for-ai --skill dt-obs-azure安装后在 Claude Code 中输入/dt-obs-azure确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/capacity-planning.mdcost-optimization.mddatabase-monitoring.mdload-balancing-api.mdmessaging-integration.mdmetrics-performance.mdREADME.mdresource-management.mdresource-ownership.mdsecurity-compliance.mdserverless-containers.mdstorage-monitoring.mdvnet-networking-security.mdworkload-detection.md详细介绍
Azure 云基础设施
使用 Dynatrace Smartscape 和 DQL 监控和分析 Azure 资源。查询 Azure 服务、审计安全性、管理组织层级,并规划 Azure 基础设施的容量。
何时使用此技能
当用户需要在 Dynatrace 中处理 Azure 资源时,请使用此技能。根据任务类型加载参考文件:
| 任务 | 要加载的文件 |
|---|---|
| 清单和拓扑查询 | (无需其他文件——使用下方的核心模式) |
| 查询 Azure 指标时间序列(CPU、延迟、吞吐量) | 加载 references/metrics-performance.md |
| VNet 拓扑、子网、NSG、公共 IP、VPN、对等互连 | 加载 references/vnet-networking-security.md |
| Azure SQL、Cosmos DB、PostgreSQL、Redis 调查 | 加载 references/database-monitoring.md |
| Functions、App Service、AKS 基础设施、Container Apps | 加载 references/serverless-containers.md |
| Azure LB、Application Gateway、Front Door、API Management | 加载 references/load-balancing-api.md |
| WAF 规则分析、误报调查 | 加载 references/load-balancing-api.md |
| Event Hubs、Service Bus、Event Grid | 加载 references/messaging-integration.md |
| Storage Accounts、Blob、File、Queue、Table | 加载 references/storage-monitoring.md |
| 未附加的资源、标签合规性、生命周期 | 加载 references/resource-management.md |
| 节省成本、未使用的资源、SKU 分析 | 加载 references/cost-optimization.md |
| 容量余量、VMSS 缩放、配额 | 加载 references/capacity-planning.md |
| 安全审计、加密、公共访问、Key Vault | 加载 references/security-compliance.md |
| NSG 规则分析(0.0.0.0/0、开放端口) | 加载 references/security-compliance.md |
| Storage account 加密/公共访问审计 | 加载 references/security-compliance.md |
| 成本分摊、分摊计费、所有权 | 加载 references/resource-ownership.md |
| 确定编排上下文(AKS、VMSS、独立运行) | 加载 references/workload-detection.md |
核心概念
实体类型
Azure 资源使用 AZURE_* 前缀,可通过 smartscapeNodes 函数查询。Dynatrace Smartscape 会自动发现并建模所有 Azure 实体。实体类型名称源自 ARM 资源提供程序路径:/Microsoft.Compute/virtualMachines 会转换为 AZURE_MICROSOFT_COMPUTE_VIRTUALMACHINES。子资源会以下划线追加:/Microsoft.Sql/servers/databases 会转换为 AZURE_MICROSOFT_SQL_SERVERS_DATABASES。
计算: 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
网络: 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
数据库: AZURE_MICROSOFT_SQL_SERVERS、AZURE_MICROSOFT_SQL_SERVERS_DATABASES、AZURE_MICROSOFT_CACHE_REDIS、AZURE_MICROSOFT_CACHE_REDISENTERPRISE、AZURE_MICROSOFT_DOCUMENTDB_DATABASEACCOUNTS
存储: 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
Kubernetes/容器: 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
应用服务: AZURE_MICROSOFT_WEB_SITES、AZURE_MICROSOFT_WEB_SERVERFARMS、AZURE_MICROSOFT_WEB_SITES_FUNCTIONS
消息传递: 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
安全/身份: AZURE_MICROSOFT_KEYVAULT_VAULTS、AZURE_MICROSOFT_MANAGEDIDENTITY_USERASSIGNEDIDENTITIES
监控: AZURE_MICROSOFT_OPERATIONALINSIGHTS_WORKSPACES、AZURE_MICROSOFT_INSIGHTS_COMPONENTS
API 管理: AZURE_MICROSOFT_APIMANAGEMENT_SERVICE
Azure 组织层级
Azure 资源按三级层级组织:租户 > 订阅 > 资源组。每个资源都属于一个订阅中的一个资源组。使用以下字段限定查询范围:
filter azure.subscription == "08b9810e-..."
filter azure.resource.group == "my-rg"
filter azure.location == "eastus"
组合使用这些筛选条件,可精确限定范围:
smartscapeNodes "AZURE_*"
| filter azure.subscription == "<SUBSCRIPTION_ID>"
and azure.resource.group == "<RESOURCE_GROUP>"
and azure.location == "<REGION>"
| summarize count = count(), by: {type}
| sort count desc
查看环境中的组织结构明细:
smartscapeNodes "AZURE_*"
| summarize resource_count = count(), by: {azure.subscription, azure.resource.group}
| sort resource_count desc
常见 Azure 字段
所有 Azure 实体都包含:
azure.subscription— Azure 订阅 GUIDazure.resource.group— 资源组名称azure.location— Azure 区域(例如,eastus、polandcentral)azure.resourceType— ARM 资源类型(例如,microsoft.compute/virtualmachines)azure.provisioning_state— 预配状态(例如,Succeeded)azure.object— 完整的 ARM 资源 JSON(参见使用 azure.object 解析配置)cloud.provider— 始终为azuretags— 资源标签(使用tags[`key`])
某些实体类型还包含:
azure.resourceId— 完整的 ARM 资源 ID(VM 和其他部分资源)azure.resourceName— 资源名称(VM 和其他部分资源)azure.availabilityZones— 可用区列表(VM)
关系类型
可使用 traverse 遍历 Azure 实体之间的关系。Azure 实体不会填充 dt.traverse.relationship 字段,因此所有遍历命令中的关系名称都必须使用 "*"。
关键遍历关系:
- VM → 磁盘:
traverse "*", "AZURE_MICROSOFT_COMPUTE_DISKS" - VM → NIC:
traverse "*", "AZURE_MICROSOFT_NETWORK_NETWORKINTERFACES" - VM → VMSS:
traverse "*", "AZURE_MICROSOFT_COMPUTE_VIRTUALMACHINESCALESETS" - VM → 可用性区域:
traverse "*", "AZURE_MICROSOFT_RESOURCES_LOCATIONS_AVAILABILITYZONES" - VM ← 扩展:
traverse "*", "AZURE_MICROSOFT_COMPUTE_VIRTUALMACHINES_EXTENSIONS", direction:backward - VMSS → AKS 集群:
traverse "*", "AZURE_MICROSOFT_CONTAINERSERVICE_MANAGEDCLUSTERS" - VMSS → 子网:
traverse "*", "AZURE_MICROSOFT_NETWORK_VIRTUALNETWORKS_SUBNETS" - VMSS → NSG:
traverse "*", "AZURE_MICROSOFT_NETWORK_NETWORKSECURITYGROUPS" - VMSS → LB 后端池:
traverse "*", "AZURE_MICROSOFT_NETWORK_LOADBALANCERS_BACKENDADDRESSPOOLS" - 子网 → VNet:
traverse "*", "AZURE_MICROSOFT_NETWORK_VIRTUALNETWORKS" - 子网 → NSG:
traverse "*", "AZURE_MICROSOFT_NETWORK_NETWORKSECURITYGROUPS" - 子网 ← VMSS:
traverse "*", "AZURE_MICROSOFT_COMPUTE_VIRTUALMACHINESCALESETS", direction:backward - NSG ← NIC:
traverse "*", "AZURE_MICROSOFT_NETWORK_NETWORKINTERFACES", direction:backward - NSG ← 子网:
traverse "*", "AZURE_MICROSOFT_NETWORK_VIRTUALNETWORKS_SUBNETS", direction:backward - LB → 后端池:
traverse "*", "AZURE_MICROSOFT_NETWORK_LOADBALANCERS_BACKENDADDRESSPOOLS" - LB → 前端 IP:
traverse "*", "AZURE_MICROSOFT_NETWORK_LOADBALANCERS_FRONTENDIPCONFIGURATIONS" - LB → LB 规则:
traverse "*", "AZURE_MICROSOFT_NETWORK_LOADBALANCERS_LOADBALANCINGRULES" - SQL Server ← SQL 数据库:
traverse "*", "AZURE_MICROSOFT_SQL_SERVERS_DATABASES", direction:backward - 存储帐户 ← Blob 容器:
traverse "*", "AZURE_MICROSOFT_STORAGE_STORAGEACCOUNTS_BLOBSERVICES_CONTAINERS", direction:backward - 存储帐户 ← 文件共享:
traverse "*", "AZURE_MICROSOFT_STORAGE_STORAGEACCOUNTS_FILESERVICES_SHARES", direction:backward - AKS ← VMSS:
traverse "*", "AZURE_MICROSOFT_COMPUTE_VIRTUALMACHINESCALESETS", direction:backward - AKS ← Agent 池:
traverse "*", "AZURE_MICROSOFT_CONTAINERSERVICE_MANAGEDCLUSTERS_AGENTPOOLS", direction:backward - AKS ← NSG:
traverse "*", "AZURE_MICROSOFT_NETWORK_NETWORKSECURITYGROUPS", direction:backward - AKS ← 公共 IP:
traverse "*", "AZURE_MICROSOFT_NETWORK_PUBLICIPADDRESSES", direction:backward - AKS → 公共 IP:
traverse "*", "AZURE_MICROSOFT_NETWORK_PUBLICIPADDRESSES" - Web 站点 → App Service 计划:
traverse "*", "AZURE_MICROSOFT_WEB_SERVERFARMS" - Web 站点 ← Functions:
traverse "*", "AZURE_MICROSOFT_WEB_SITES_FUNCTIONS", direction:backward - 容器应用 → 托管环境:
traverse "*", "AZURE_MICROSOFT_APP_MANAGEDENVIRONMENTS" - EventHub 命名空间 ← Event Hubs:
traverse "*", "AZURE_MICROSOFT_EVENTHUB_NAMESPACES_EVENTHUBS", direction:backward - ServiceBus 命名空间 ← 队列:
traverse "*", "AZURE_MICROSOFT_SERVICEBUS_NAMESPACES_QUEUES", direction:backward - ServiceBus 命名空间 ← 主题:
traverse "*", "AZURE_MICROSOFT_SERVICEBUS_NAMESPACES_TOPICS", direction:backward - ServiceBus 主题 ← 订阅:
traverse "*", "AZURE_MICROSOFT_SERVICEBUS_NAMESPACES_TOPICS_SUBSCRIPTIONS", direction:backward - 使用
fieldsKeep:{field1, field2}在多跳遍历中传递字段 - 单跳遍历后,使用
dt.traverse.history[0][id]获取源实体 ID,然后使用lookup解析源实体名称:| fieldsAdd sourceId = dt.traverse.history[0][id] | lookup [smartscapeNodes "SOURCE_TYPE" | fields name, id], sourceField: sourceId, lookupField: id, prefix: "src." - 多跳遍历后,
dt.traverse.history[-N]可用于获取通过fieldsKeep传递的字段
Azure 指标命名约定
Dynatrace 会摄取 Azure Monitor 指标,并使用以下命名模式公开这些指标:
cloud.azure.<provider_namespace>.<resource_type>.<MetricName>
<provider_namespace> 在命名空间内使用下划线(例如,microsoft_compute),<resource_type> 则为小写(例如,virtualmachines)。层级之间以点分隔:microsoft_sql.servers.databases。<MetricName> 是 Azure Monitor 指标名称。
示例:
| Azure Monitor 指标 | Dynatrace 指标键 |
|---|---|
VM Percentage CPU | cloud.azure.microsoft_compute.virtualmachines.PercentageCPU |
SQL DB cpu_percent | cloud.azure.microsoft_sql.servers.databases.cpu_percent |
Storage Ingress | cloud.azure.microsoft_storage.storageaccounts.Ingress |
Event Hub IncomingMessages | cloud.azure.microsoft_eventhub.namespaces.IncomingMessages |
Service Bus IncomingMessages | cloud.azure.microsoft_servicebus.namespaces.IncomingMessages |
App Service HttpResponseTime | cloud.azure.microsoft_web.sites.HttpResponseTime |
Load Balancer ByteCount | cloud.azure.microsoft_network.loadbalancers.ByteCount |
AKS node_cpu_usage_percentage | cloud.azure.microsoft_containerservice.managedclusters.node_cpu_usage_percentage |
Cosmos DB TotalRequestUnits | cloud.azure.microsoft_documentdb.databaseaccounts.TotalRequestUnits |
Redis serverLoad | cloud.azure.microsoft_cache.redis.serverLoad |
App Gateway TotalRequests | cloud.azure.microsoft_network.applicationgateways.TotalRequests |
查询指标:
timeseries cpu = avg(cloud.azure.microsoft_compute.virtualmachines.PercentageCPU),
by: {dt.smartscape_source.id},
from: now()-1h
| limit 10
**重要提示:**输出中绝不要将这些指标称为“Azure Monitor 告警”或“Azure Monitor 指标”。Dynatrace 通过其 Azure 集成本机监控 Azure 资源——这些是从 Azure 摄取的 Dynatrace 指标。
使用 azure.object 解析配置
azure.object 字段包含完整的 ARM 资源 JSON。使用 azjson 别名解析:
parse azure.object, "JSON:azjson"
JSON 包装在 configuration 键中:
{
"configuration": {
"id": "<ARM resource ID>",
"name": "<resource name>",
"type": "<ARM resource type>",
"location": "<region>",
"sku": { ... },
"properties": { ... },
"zones": [...]
},
"tags": { ... }
}
访问方式:
- 属性:
azjson[configuration][properties][field] - SKU:
azjson[configuration][sku][name] - Kind:
azjson[configuration][kind] - 区域:
azjson[configuration][zones]
各服务的常见配置字段:
- VM:
properties.hardwareProfile.vmSize、properties.storageProfile.imageReference.offer、properties.storageProfile.osDisk.osType、properties.extended.instanceView.powerState.displayStatus - VMSS:
sku.name(VM 大小)、sku.capacity(实例数)、tags.aks-managed-poolName - NSG:
properties.securityRules[](自定义规则数组)、properties.securityRules[].properties.direction、properties.securityRules[].properties.access、properties.securityRules[].properties.sourceAddressPrefix - 存储帐户:
kind(例如 StorageV2)、sku.name、properties.accessTier、properties.supportsHttpsTrafficOnly、properties.allowBlobPublicAccess、properties.encryption.keySource - SQL Server:
properties.fullyQualifiedDomainName、properties.publicNetworkAccess、properties.minimalTlsVersion - SQL 数据库:
sku.name(层级)、sku.capacity(DTU/vCore)、properties.status、properties.zoneRedundant - AKS:
properties.kubernetesVersion、properties.powerState.code、properties.networkProfile.networkPlugin、properties.enableRBAC - Web 站点:
kind(例如functionapp,linux)、properties.state、properties.defaultHostName、properties.siteConfig.linuxFxVersion - Container App:
properties.runningStatus、properties.template.containers[].image、properties.template.scale.minReplicas、properties.template.scale.maxReplicas - Event Hub 命名空间:
sku.name、properties.kafkaEnabled、properties.zoneRedundant - Service Bus 命名空间:
sku.name(Basic/Standard/Premium)、properties.zoneRedundant、properties.minimumTlsVersion、properties.publicNetworkAccess、properties.disableLocalAuth、properties.status - Service Bus 队列:
properties.maxSizeInMegabytes、properties.enablePartitioning、properties.deadLetteringOnMessageExpiration、properties.maxDeliveryCount、properties.lockDuration、properties.requiresDuplicateDetection、properties.status - Key Vault:
properties.enableRbacAuthorization、properties.enableSoftDelete、properties.publicNetworkAccess - Redis:
properties.sku.name、properties.hostName、properties.redisVersion、properties.enableNonSslPort - Cosmos DB:
kind(例如 GlobalDocumentDB)、properties.EnabledApiTypes、properties.consistencyPolicy.defaultConsistencyLevel - 负载均衡器:
sku.name、tags.aks-managed-cluster-name - 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
查询模式
所有 Azure 查询都基于四种核心模式。掌握这些模式后,即可将其应用于任意实体类型。
模式 1:资源发现
按类型列出资源,并按订阅、资源组、区域或标签筛选,汇总数量:
smartscapeNodes "AZURE_*"
| filter azure.subscription == "<SUBSCRIPTION_ID>" and azure.location == "<REGION>"
| summarize count = count(), by: {type}
| sort count desc
要列出特定类型,请将 "AZURE_*" 替换为实体类型(例如 "AZURE_MICROSOFT_COMPUTE_VIRTUALMACHINES")。添加 | fields name, azure.subscription, azure.resource.group, azure.location, ... 以选择特定列。使用 tags[`TagName`] 按标签筛选。
模式 2:配置解析
解析 azure.object JSON,获取详细配置字段:
smartscapeNodes "AZURE_MICROSOFT_COMPUTE_VIRTUALMACHINES"
| parse azure.object, "JSON:azjson"
| fieldsAdd vmSize = azjson[configuration][properties][hardwareProfile][vmSize],
osType = azjson[configuration][properties][storageProfile][osDisk][osType]
| summarize vm_count = count(), by: {vmSize, osType, azure.location}
模式 3:关系遍历
沿资源间的关系进行遍历。由于 Azure 不会填充 dt.traverse.relationship,请将关系名称设为 "*":
smartscapeNodes "AZURE_MICROSOFT_NETWORK_LOADBALANCERS"
| parse azure.object, "JSON:azjson"
| fieldsAdd lbSku = azjson[configuration][sku][name]
| traverse "*", "AZURE_MICROSOFT_NETWORK_LOADBALANCERS_BACKENDADDRESSPOOLS", fieldsKeep:{lbSku, name, id}
| fieldsAdd backendPoolName = name
| traverse "*", "AZURE_MICROSOFT_COMPUTE_VIRTUALMACHINESCALESETS", direction:backward, fieldsKeep:{backendPoolName, id}
| fieldsAdd loadBalancerName = dt.traverse.history[-2][name],
loadBalancerId = dt.traverse.history[-2][id],
backendPoolId = dt.traverse.history[-1][id]
与 AWS 遍历的主要区别:
- 始终将关系名称设为
"*"(Azure 的关系类型名称为空) - Azure 的关系主要遵循父子层级:子资源通过反向链接指向父资源
- AKS 是重要的关系枢纽,与 VMSS、NSG、LB、公共 IP、Agent Pool 和托管标识之间均存在反向链接
模式 4:基于标签的所有权
按任意标签对资源分组,以进行所有权归属/费用分摊:
smartscapeNodes "AZURE_*"
| filter isNotNull(tags[`<TAG_NAME>`])
| summarize resource_count = count(), by: {tags[`<TAG_NAME>`], type}
| sort resource_count desc
常见的 Azure 标签:tags[`ACE:CREATED-BY`]、tags[`dt_owner_email`]、tags[`dt_owner_team`]、tags[`project`]、tags[`managed-by`]。将 "AZURE_*" 替换为具体类型,以限定为某一项服务。
查找未标记的资源:| filter arraySize(tags) == 0
参考指南
当上述核心模式需要针对特定服务进行调整时,请加载参考文件,以获取详细查询。
| 参考文件 | 加载时机 | 主要内容 |
|---|---|---|
| vnet-networking-security.md | VNet 拓扑、子网、NSG、公共 IP、VPN、对等互连 | VNet/子网映射、NSG 影响范围、公共 IP 检测 |
| database-monitoring.md | Azure SQL、Cosmos DB、Redis Cache | 服务层级分布、区域冗余、公共访问检查 |
| serverless-containers.md | Functions、App Service、AKS 基础设施、Container Apps | 运行时分布、App Service Plan 映射、AKS 节点池 |
| load-balancing-api.md | Load Balancer、Application Gateway、API Management | LB 后端池遍历、App Gateway 路由、APIM 配置 |
| messaging-integration.md | Event Hubs、Service Bus、Event Grid | 命名空间清单、Kafka 启用情况、吞吐量单位分析 |
| storage-monitoring.md | Storage Account、Blob、File、Queue、Table | SKU 分布、访问层级、加密审计、公共访问 |
| resource-management.md | 资源审计、标签合规、生命周期 | 未关联的磁盘、标签覆盖率、预配状态分析 |
| cost-optimization.md | 节省成本、未使用资源、规格调整 | VM SKU 分析、未关联的磁盘、已解除分配的 VM |
| capacity-planning.md | 容量分析、扩缩容、利用率 | VMSS 余量、子网 IP 数量、AKS 节点池规格 |
| security-compliance.md | 安全审计、加密、公共访问、Key Vault | NSG 规则分析、TLS 版本审计、公共终端节点检测、加密检查 |
| resource-ownership.md | 费用分摊、所有权、成本分配 | 基于标签的分组、订阅/资源组汇总 |
| workload-detection.md | 确定编排上下文和解析路径 | 检测 AKS 节点、VMSS 成员、独立 VM,以分析影响范围 |
| metrics-performance.md | 查询特定资源的指标时间序列 | VM、SQL、Storage、Event Hub、LB、App Service、AKS、Cosmos DB、Redis、App Gateway 的 DQL 时间序列模式 |
最佳实践
查询优化
- 尽早按订阅、资源组和区域进行筛选
- 使用具体的实体类型(尽可能避免使用
"AZURE_*"通配符) - 探索时使用
| limit N限制结果数量 - 访问嵌套字段前,使用
isNotNull()检查
配置解析
- 始终使用 JSON 解析器解析
azure.object:parse azure.object, "JSON:azjson" - 使用一致的字段命名:
fieldsAdd configField = azjson[configuration][properties][field] - 通过
azjson[configuration][sku][name]访问 SKU(不要在properties内访问) - 解析后检查 null 值——并非所有实体类型都具有相同的属性结构
- 对复杂嵌套对象使用
toString()
组织层级
- 在多订阅环境中,始终使用
azure.subscription限定查询范围 - 使用
azure.resource.group将范围缩小到团队或应用边界 - 结合
azure.location进行特定区域分析 - 使用
summarize ... by: {azure.subscription, azure.resource.group}按组织进行细分
标记策略
- 使用
tags[`key`]进行筛选(键名用反引号括起) - 使用
arraySize(tags)检查未标记的资源 - 使用 summarize 操作跟踪标记覆盖情况
- 常见的所有权标记:
dt_owner_email、dt_owner_team、ACE:CREATED-BY
限制和说明
Smartscape 限制
- Azure 对象配置需要使用
parse azure.object, "JSON:azjson"进行解析 - Azure 指标可作为 Dynatrace 指标使用,并采用
cloud.azure.*命名约定(参见 Azure Metric Naming Convention) - 资源发现取决于 Dynatrace 中的 Azure 集成配置
- 标记同步可能会略有延迟
关系遍历
- Azure 关系类型名称为空——在
traverse命令中始终使用"*"作为关系名称 - 对于反向关系(例如,从子资源到父资源),使用
direction:backward - 使用
fieldsKeep在遍历过程中保留重要字段 - 使用
dt.traverse.history[0][id]获取单跳源实体 ID;使用lookup解析源实体名称 - 对于多跳遍历,
dt.traverse.history[-N]可访问通过fieldsKeep保留的字段 - Azure 关系主要遵循父子层级模式
- AKS 是一个重要的关系枢纽——预计会有许多反向关系汇聚到 AKS 集群实体
AKS 覆盖范围
- 此技能仅涵盖 AKS 基础设施层实体(集群、代理池、VMSS、网络)
- 对于 Kubernetes 工作负载层可观测性(Pod、部署、服务、命名空间),请使用
dt-obs-kubernetes技能
通用提示
- 使用
getNodeName()获取便于阅读的资源名称 - 使用
isNotNull()和isNull()妥善处理 null 值 - 对大型环境,结合订阅、资源组和区域筛选条件
- 使用
countDistinct()统计唯一资源数量 azure.resourceType字段使用小写 ARM 格式(例如microsoft.compute/virtualmachines)——可用于筛选,但不能用于实体类型匹配