dt-obs-azure について
Dynatrace の Smartscape と DQL を使って Azure インフラを照会・分析するスキルです。リソース一覧、サービス監視、セキュリティ、所有者、コスト、容量のタスクを扱います。
主な機能
- 01Azure リソースとトポロジーの検出
- 02Azure メトリクス時系列の照会
- 03リソース間の関係の確認
- 04セキュリティとタグ準拠状況の監査
- 05コストと容量の分析
活用シーン
- 01サブスクリプションやリージョン別のリソース一覧作成
- 02Azure データベースの性能調査
- 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 Cloud Infrastructure
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 関数を使用してクエリできます。すべての Azure エンティティは自動的に検出され、Dynatrace Smartscape でモデル化されます。エンティティタイプ名は 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
App Service: 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
セキュリティ/ID: AZURE_MICROSOFT_KEYVAULT_VAULTS、AZURE_MICROSOFT_MANAGEDIDENTITY_USERASSIGNEDIDENTITIES
モニタリング: AZURE_MICROSOFT_OPERATIONALINSIGHTS_WORKSPACES、AZURE_MICROSOFT_INSIGHTS_COMPONENTS
API 管理: AZURE_MICROSOFT_APIMANAGEMENT_SERVICE
Azure の組織階層
Azure では、リソースが3階層で編成されています。テナント > サブスクリプション > リソースグループ。各リソースは、1つのサブスクリプション内にある1つのリソースグループにのみ属します。次のフィールドを使用してクエリの対象範囲を絞り込みます。
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(構成の解析を参照)cloud.provider— 常にazuretags— リソースタグ(tags[`key`]を使用)
一部のエンティティタイプには、次のフィールドもあります。
azure.resourceId— ARM リソース ID 全体(VM など)azure.resourceName— リソース名(VM など)azure.availabilityZones— 可用性ゾーンのリスト(VM)
リレーションシップの種類
Azure エンティティのリレーションシップは、traverse を使ってたどることができます。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 ← エージェントプール:
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 - Container App → マネージド環境:
traverse "*", "AZURE_MICROSOFT_APP_MANAGEDENVIRONMENTS" - EventHub Namespace ← Event Hub:
traverse "*", "AZURE_MICROSOFT_EVENTHUB_NAMESPACES_EVENTHUBS", direction:backward - ServiceBus Namespace ← キュー:
traverse "*", "AZURE_MICROSOFT_SERVICEBUS_NAMESPACES_QUEUES", direction:backward - ServiceBus Namespace ← トピック:
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." - 複数ホップのトラバーサル後は、
fieldsKeepで引き継いだフィールドに対してdt.traverse.history[-N]が機能します
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] - 種類:
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 - Storage Account:
kind(例:StorageV2)、sku.name、properties.accessTier、properties.supportsHttpsTrafficOnly、properties.allowBlobPublicAccess、properties.encryption.keySource - SQL Server:
properties.fullyQualifiedDomainName、properties.publicNetworkAccess、properties.minimalTlsVersion - SQL Database:
sku.name(ティア)、sku.capacity(DTU/vCore)、properties.status、properties.zoneRedundant - AKS:
properties.kubernetesVersion、properties.powerState.code、properties.networkProfile.networkPlugin、properties.enableRBAC - Web Site:
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 Namespace:
sku.name、properties.kafkaEnabled、properties.zoneRedundant - Service Bus Namespace:
sku.name(Basic/Standard/Premium)、properties.zoneRedundant、properties.minimumTlsVersion、properties.publicNetworkAccess、properties.disableLocalAuth、properties.status - Service Bus Queue:
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 - Load Balancer:
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 のすべてのクエリは、4 つの基本パターンに基づいています。これらを習得し、任意のエンティティタイプに応用してください。
パターン 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、エージェントプール、マネージド ID から AKS へのリンクが設定されています
パターン 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 Balancers、Application Gateways、API Management | LB バックエンドプールのトラバーサル、App Gateway のルーティング、APIM の構成 |
| messaging-integration.md | Event Hubs、Service Bus、Event Grid | 名前空間の一覧、Kafka の有効化、スループットユニットの分析 |
| storage-monitoring.md | Storage Accounts、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()で確認します
Configuration Parsing
- 常に JSON パーサーで
azure.objectを解析します:parse azure.object, "JSON:azjson" - フィールド名は一貫性を保ちます:
fieldsAdd configField = azjson[configuration][properties][field] - SKU には
azjson[configuration][sku][name]でアクセスします(propertiesの中ではありません) - 解析後に null 値を確認します。エンティティの種類によって、プロパティの構造は異なります
- 複雑なネストされたオブジェクトには
toString()を使用します
Organizational Hierarchy
- 複数サブスクリプション環境では、常に
azure.subscriptionでクエリの対象を絞ります azure.resource.groupを使用して、チームまたはアプリケーションの範囲に絞り込みます- リージョンごとの分析には
azure.locationを組み合わせます - 組織別に分類するには、
summarize ... by: {azure.subscription, azure.resource.group}を使用します
Tagging Strategy
- フィルタリングには
tags[`key`]を使用します(キー名をバッククォートで囲みます) - タグが付いていないリソースを確認するには、
arraySize(tags)を使用します - summarize 操作でタグの適用状況を追跡します
- 一般的な所有者タグ:
dt_owner_email、dt_owner_team、ACE:CREATED-BY
Limitations and Notes
Smartscape Limitations
- Azure オブジェクトの構成は、
parse azure.object, "JSON:azjson"で解析する必要があります - Azure メトリクスは、
cloud.azure.*という命名規則を使用する Dynatrace メトリクスとして利用できます(Azure Metric Naming Convention を参照) - リソースの検出は、Dynatrace の Azure 統合の設定に依存します
- タグの同期には多少の遅延が発生する場合があります
Relationship Traversal
- Azure の関係タイプ名は空です —
traverseコマンドでは、関係名として常に"*"を使用します - 逆方向の関係(例:サブリソースから親リソース)には
direction:backwardを使用します - トラバーサル中に重要なフィールドを維持するには、
fieldsKeepを使用します - 単一ホップのソースエンティティ ID には
dt.traverse.history[0][id]でトラバーサル履歴にアクセスし、lookupでソースエンティティ名を解決します - 複数ホップのトラバーサルでは、
dt.traverse.history[-N]でfieldsKeepを介して引き継がれたフィールドにアクセスします - Azure の関係は、主に親子階層のパターンに従います
- AKS は主要な関係ハブです。AKS クラスターエンティティに集約される、多数の逆方向の関係が予想されます
AKS Coverage
- このスキルが対象とするのは、AKS のインフラストラクチャレイヤーのエンティティのみです(クラスター、エージェントプール、VMSS、ネットワーク)
- Kubernetes のワークロードレイヤーの可観測性(ポッド、デプロイ、サービス、名前空間)については、
dt-obs-kubernetesスキルを参照してください
General Tips
- 人が読みやすいリソース名には
getNodeName()を使用します isNotNull()とisNull()を使用して、null 値を適切に処理します- 大規模な環境では、サブスクリプション、リソースグループ、リージョンのフィルターを組み合わせます
- 一意なリソース数には
countDistinct()を使用します azure.resourceTypeフィールドは小文字の ARM 形式です(例:microsoft.compute/virtualmachines)。フィルタリングには便利ですが、エンティティタイプの照合には使用できません