mcpField
D
dt-obs-azure

dt-obs-azure

github.com/dynatraceクラウド・DevOps1692.1k 回インストール今日更新
リポジトリ

dt-obs-azure について

Dynatrace の Smartscape と DQL を使って Azure インフラを照会・分析するスキルです。リソース一覧、サービス監視、セキュリティ、所有者、コスト、容量のタスクを扱います。

主な機能

  1. 01Azure リソースとトポロジーの検出
  2. 02Azure メトリクス時系列の照会
  3. 03リソース間の関係の確認
  4. 04セキュリティとタグ準拠状況の監査
  5. 05コストと容量の分析

活用シーン

  1. 01サブスクリプションやリージョン別のリソース一覧作成
  2. 02Azure データベースの性能調査
  3. 03ネットワークの公開範囲とセキュリティ設定の確認
  4. 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.md
cost-optimization.md
database-monitoring.md
load-balancing-api.md
messaging-integration.md
metrics-performance.md
README.md
resource-management.md
resource-ownership.md
security-compliance.md
serverless-containers.md
storage-monitoring.md
vnet-networking-security.md
workload-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 Appsreferences/serverless-containers.md を読み込みます
Azure LB、Application Gateway、Front Door、API Managementreferences/load-balancing-api.md を読み込みます
WAF ルール分析、誤検知の調査references/load-balancing-api.md を読み込みます
Event Hubs、Service Bus、Event Gridreferences/messaging-integration.md を読み込みます
Storage Accounts、Blob、File、Queue、Tablereferences/storage-monitoring.md を読み込みます
未接続リソース、タグのコンプライアンス、ライフサイクルreferences/resource-management.md を読み込みます
コスト削減、未使用リソース、SKU 分析references/cost-optimization.md を読み込みます
キャパシティの余裕、VMSS のスケーリング、クォータreferences/capacity-planning.md を読み込みます
セキュリティ監査、暗号化、パブリックアクセス、Key Vaultreferences/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 サブスクリプション GUID
  • azure.resource.group — リソースグループ名
  • azure.location — Azure リージョン(例:eastus、polandcentral)
  • azure.resourceType — ARM リソースタイプ(例:microsoft.compute/virtualmachines)
  • azure.provisioning_state — プロビジョニング状態(例:Succeeded)
  • azure.object — ARM リソースの完全な JSON(構成の解析を参照)
  • cloud.provider — 常に azure
  • tags — リソースタグ(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 CPUcloud.azure.microsoft_compute.virtualmachines.PercentageCPU
SQL DB の cpu_percentcloud.azure.microsoft_sql.servers.databases.cpu_percent
Storage の Ingresscloud.azure.microsoft_storage.storageaccounts.Ingress
Event Hub の IncomingMessagescloud.azure.microsoft_eventhub.namespaces.IncomingMessages
Service Bus の IncomingMessagescloud.azure.microsoft_servicebus.namespaces.IncomingMessages
App Service の HttpResponseTimecloud.azure.microsoft_web.sites.HttpResponseTime
Load Balancer の ByteCountcloud.azure.microsoft_network.loadbalancers.ByteCount
AKS の node_cpu_usage_percentagecloud.azure.microsoft_containerservice.managedclusters.node_cpu_usage_percentage
Cosmos DB の TotalRequestUnitscloud.azure.microsoft_documentdb.databaseaccounts.TotalRequestUnits
Redis の serverLoadcloud.azure.microsoft_cache.redis.serverLoad
App Gateway の TotalRequestscloud.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.mdVNet トポロジー、サブネット、NSG、パブリック IP、VPN、ピアリングVNet/サブネットの対応付け、NSG の影響範囲、パブリック IP の検出
database-monitoring.mdAzure SQL、Cosmos DB、Redis Cacheサービス階層の分布、ゾーン冗長性、パブリックアクセスの確認
serverless-containers.mdFunctions、App Service、AKS インフラ、Container Appsランタイムの分布、App Service Plan の対応付け、AKS ノードプール
load-balancing-api.mdLoad Balancers、Application Gateways、API ManagementLB バックエンドプールのトラバーサル、App Gateway のルーティング、APIM の構成
messaging-integration.mdEvent Hubs、Service Bus、Event Grid名前空間の一覧、Kafka の有効化、スループットユニットの分析
storage-monitoring.mdStorage Accounts、Blob、File、Queue、TableSKU の分布、アクセス層、暗号化の監査、パブリックアクセス
resource-management.mdリソース監査、タグの準拠状況、ライフサイクル未接続ディスク、タグの適用状況、プロビジョニング状態の分析
cost-optimization.mdコスト削減、未使用リソース、サイズの最適化VM SKU の分析、未接続ディスク、割り当て解除済み VM
capacity-planning.mdキャパシティ分析、スケーリング、使用率VMSS の余裕、サブネットの IP 数、AKS ノードプールのサイズ
security-compliance.mdセキュリティ監査、暗号化、パブリックアクセス、Key VaultNSG ルールの分析、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 時系列パターン

ベストプラクティス

クエリの最適化
  1. サブスクリプション、リソースグループ、リージョンで早い段階にフィルターします
  2. 具体的なエンティティタイプを使用します(可能な場合は "AZURE_*" ワイルドカードを避けます)
  3. 調査時は | limit N で結果を制限します
  4. ネストされたフィールドにアクセスする前に isNotNull() で確認します
Configuration Parsing
  1. 常に JSON パーサーで azure.object を解析します:parse azure.object, "JSON:azjson"
  2. フィールド名は一貫性を保ちます:fieldsAdd configField = azjson[configuration][properties][field]
  3. SKU には azjson[configuration][sku][name] でアクセスします(properties の中ではありません)
  4. 解析後に null 値を確認します。エンティティの種類によって、プロパティの構造は異なります
  5. 複雑なネストされたオブジェクトには toString() を使用します
Organizational Hierarchy
  1. 複数サブスクリプション環境では、常に azure.subscription でクエリの対象を絞ります
  2. azure.resource.group を使用して、チームまたはアプリケーションの範囲に絞り込みます
  3. リージョンごとの分析には azure.location を組み合わせます
  4. 組織別に分類するには、summarize ... by: {azure.subscription, azure.resource.group} を使用します
Tagging Strategy
  1. フィルタリングには tags[`key`] を使用します(キー名をバッククォートで囲みます)
  2. タグが付いていないリソースを確認するには、arraySize(tags) を使用します
  3. summarize 操作でタグの適用状況を追跡します
  4. 一般的な所有者タグ: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)。フィルタリングには便利ですが、エンティティタイプの照合には使用できません

コメント