Použití monitorování a diagnostiky s virtuálním počítačem s Windows a šablonami Azure Resource Manager

Rozšíření Azure Diagnostics poskytuje možnosti monitorování a diagnostiky na virtuálním počítači Azure s Windows. Tyto možnosti můžete na virtuálním počítači povolit zahrnutím rozšíření jako součásti šablony Azure Resource Manager. Další informace o zahrnutí jakéhokoli rozšíření jako součásti šablony virtuálního počítače najdete v tématu Vytváření šablon Azure Resource Manager s rozšířeními virtuálních počítačů. Tento článek popisuje, jak přidat rozšíření Azure Diagnostics do šablony virtuálního počítače s Windows.

Přidání rozšíření Azure Diagnostics do definice prostředku virtuálního počítače

Pokud chcete povolit diagnostické rozšíření na virtuálním počítači s Windows, musíte rozšíření přidat jako prostředek virtuálního počítače v šabloně Resource Manager.

Pro jednoduchý virtuální počítač založený na Resource Manager přidejte konfiguraci rozšíření do pole prostředků pro virtuální počítač:

"resources": [
    {
        "name": "Microsoft.Insights.VMDiagnosticsSettings",
        "type": "extensions",
        "location": "[resourceGroup().location]",
        "apiVersion": "2015-06-15",
        "dependsOn": [
            "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]"
        ],
        "tags": {
            "displayName": "AzureDiagnostics"
        },
        "properties": {
            "publisher": "Microsoft.Azure.Diagnostics",
            "type": "IaaSDiagnostics",
            "typeHandlerVersion": "1.5",
            "autoUpgradeMinorVersion": true,
            "settings": {
                "xmlCfg": "[base64(concat(variables('wadcfgxstart'), variables('wadmetricsresourceid'), variables('vmName'), variables('wadcfgxend')))]",
                "storageAccount": "[parameters('existingdiagnosticsStorageAccountName')]"
            },
            "protectedSettings": {
                "storageAccountName": "[parameters('existingdiagnosticsStorageAccountName')]",
                "storageAccountKey": "[listkeys(variables('accountid'), '2015-05-01-preview').key1]",
                "storageAccountEndPoint": "https://core.windows.net"
            }
        }
    }
]

Další běžnou konvencí je přidání konfigurace rozšíření do kořenového uzlu prostředků šablony, místo aby se definovala pod uzel prostředků virtuálního počítače. Při tomto přístupu musíte explicitně zadat hierarchický vztah mezi rozšířením a virtuálním počítačem pomocí hodnot názvu a typu . Příklad:

"name": "[concat(variables('vmName'),'Microsoft.Insights.VMDiagnosticsSettings')]",
"type": "Microsoft.Compute/virtualMachines/extensions",

Rozšíření je vždy přidružené k virtuálnímu počítači. Můžete ho buď přímo definovat pod uzlem prostředků virtuálního počítače, nebo ho definovat na základní úrovni a pomocí hierarchických zásad vytváření názvů ho přidružit k virtuálnímu počítači.

Pro Virtual Machine Scale Sets konfigurace rozšíření je určena ve vlastnosti extensionProfileVirtualMachineProfile.

Vlastnost vydavatele s hodnotou Microsoft.Azure.Diagnostics a vlastnost type s hodnotou IaaSDiagnostics jednoznačně identifikují rozšíření Azure Diagnostics.

Hodnotu vlastnosti name je možné použít k odkazování na rozšíření ve skupině prostředků. Když ho nastavíte konkrétně na Microsoft.Insights.VMDiagnosticsSettings, Azure Portal zajistí se správné zobrazení grafů monitorování v Azure Portal.

TypeHandlerVersion určuje verzi rozšíření, které chcete použít. Nastavením podverze autoUpgradeMinorVersion na hodnotu true zajistíte, že získáte nejnovější podverzi rozšíření, která je k dispozici. Důrazně doporučujeme, abyste autoUpgradeMinorVersion vždy nastavili na hodnotu true , abyste mohli vždy používat nejnovější dostupné diagnostické rozšíření se všemi novými funkcemi a opravami chyb.

Element settings obsahuje vlastnosti konfigurace pro rozšíření, které lze nastavit a číst z rozšíření (někdy se označuje jako veřejná konfigurace). Vlastnost xmlcfg obsahuje konfiguraci založenou na jazyce XML pro diagnostické protokoly, čítače výkonu atd. shromažďované agentem diagnostiky. Další informace o samotném schématu XML najdete v tématu Schéma konfigurace diagnostiky . Běžným postupem je uložit skutečnou konfiguraci XML jako proměnnou do šablony Azure Resource Manager a pak je zřetězením a kódováním base64 nastavit hodnotu xmlcfg. Další informace o tom, jak ukládat xml do proměnných, najdete v části věnované proměnným konfigurace diagnostiky . Vlastnost storageAccount určuje název účtu úložiště, do kterého se přenesou diagnostická data.

Vlastnosti v protectedSettings (někdy označované jako privátní konfigurace) je možné nastavit, ale nelze je po nastavení znovu přečíst. Povaha protectedSettings jen pro zápis je užitečná pro ukládání tajných kódů, jako je klíč účtu úložiště, do kterého se zapisují diagnostická data.

Zadání účtu úložiště diagnostiky jako parametrů

Výše uvedený fragment kódu JSON diagnostického rozšíření předpokládá dva parametry existingdiagnosticsStorageAccountName a existingdiagnosticsStorageResourceGroup , které určují účet úložiště diagnostiky, ve kterém jsou uložená diagnostická data. Zadání účtu úložiště diagnostiky jako parametru usnadňuje změnu účtu úložiště diagnostiky v různých prostředích. Můžete například použít jiný účet úložiště diagnostiky pro testování a jiný účet pro produkční nasazení.

"existingdiagnosticsStorageAccountName": {
    "type": "string",
    "metadata": {
"description": "The name of an existing storage account to which diagnostics data is transfered."
    }
},
"existingdiagnosticsStorageResourceGroup": {
    "type": "string",
    "metadata": {
"description": "The resource group for the storage account specified in existingdiagnosticsStorageAccountName"
    }
}

Osvědčeným postupem je zadat účet úložiště diagnostiky v jiné skupině prostředků, než je skupina prostředků pro virtuální počítač. Skupinu prostředků je možné považovat za jednotku nasazení s vlastní životností, virtuální počítač je možné nasadit a znovu nasadit při aktualizaci nových konfigurací, ale možná budete chtít i nadále ukládat diagnostická data ve stejném účtu úložiště napříč těmito nasazeními virtuálních počítačů. Účet úložiště v jiném prostředku umožňuje účtu úložiště přijímat data z různých nasazení virtuálních počítačů, což usnadňuje řešení potíží napříč různými verzemi.

Poznámka

Pokud vytvoříte šablonu virtuálního počítače s Windows ze sady Visual Studio, může být výchozí účet úložiště nastavený tak, aby používal stejný účet úložiště, do kterého se nahrál virtuální pevný disk virtuálního počítače. Tím se zjednoduší počáteční nastavení virtuálního počítače. Přeneste šablonu tak, aby používala jiný účet úložiště, který je možné předat jako parametr.

Proměnné konfigurace diagnostiky

Předchozí fragment kódu JSON diagnostického rozšíření definuje proměnnou accountid , aby se zjednodušilo získání klíče účtu úložiště pro úložiště diagnostiky:

"accountid": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/',parameters('existingdiagnosticsStorageResourceGroup'), '/providers/','Microsoft.Storage/storageAccounts/', parameters('existingdiagnosticsStorageAccountName'))]"

Vlastnost xmlcfg pro rozšíření diagnostiky je definována pomocí více proměnných, které jsou zřetězeny dohromady. Hodnoty těchto proměnných jsou v xml, takže při nastavování proměnných JSON je potřeba je správně umisovat.

Následující příklad popisuje soubor XML konfigurace diagnostiky, který shromažďuje standardní čítače výkonu na úrovni systému spolu s některými protokoly událostí windows a protokoly infrastruktury diagnostiky. Je správně naformátovaný řídicím znakem, aby bylo možné konfiguraci vložit přímo do oddílu variables šablony. Projděte si schéma konfigurace diagnostiky , kde najdete lidsky čitelnější příklad konfiguračního souboru XML.

"wadlogs": "<WadCfg> <DiagnosticMonitorConfiguration overallQuotaInMB=\"4096\" xmlns=\"http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration\"> <DiagnosticInfrastructureLogs scheduledTransferLogLevelFilter=\"Error\"/> <WindowsEventLog scheduledTransferPeriod=\"PT1M\" > <DataSource name=\"Application!*[System[(Level = 1 or Level = 2)]]\" /> <DataSource name=\"Security!*[System[(Level = 1 or Level = 2)]]\" /> <DataSource name=\"System!*[System[(Level = 1 or Level = 2)]]\" /></WindowsEventLog>",
"wadperfcounters1": "<PerformanceCounters scheduledTransferPeriod=\"PT1M\"><PerformanceCounterConfiguration counterSpecifier=\"\\Processor(_Total)\\% Processor Time\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU utilization\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor(_Total)\\% Privileged Time\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU privileged time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor(_Total)\\% User Time\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"CPU user time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Processor Information(_Total)\\Processor Frequency\" sampleRate=\"PT15S\" unit=\"Count\"><annotation displayName=\"CPU frequency\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\System\\Processes\" sampleRate=\"PT15S\" unit=\"Count\"><annotation displayName=\"Processes\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Process(_Total)\\Thread Count\" sampleRate=\"PT15S\" unit=\"Count\"><annotation displayName=\"Threads\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Process(_Total)\\Handle Count\" sampleRate=\"PT15S\" unit=\"Count\"><annotation displayName=\"Handles\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\% Committed Bytes In Use\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Memory usage\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\Available Bytes\" sampleRate=\"PT15S\" unit=\"Bytes\"><annotation displayName=\"Memory available\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\Committed Bytes\" sampleRate=\"PT15S\" unit=\"Bytes\"><annotation displayName=\"Memory committed\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\Memory\\Commit Limit\" sampleRate=\"PT15S\" unit=\"Bytes\"><annotation displayName=\"Memory commit limit\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk(_Total)\\% Disk Time\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Disk active time\" locale=\"en-us\"/></PerformanceCounterConfiguration>",
"wadperfcounters2": "<PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk(_Total)\\% Disk Read Time\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Disk active read time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk(_Total)\\% Disk Write Time\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Disk active write time\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk(_Total)\\Disk Transfers/sec\" sampleRate=\"PT15S\" unit=\"CountPerSecond\"><annotation displayName=\"Disk operations\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk(_Total)\\Disk Reads/sec\" sampleRate=\"PT15S\" unit=\"CountPerSecond\"><annotation displayName=\"Disk read operations\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk(_Total)\\Disk Writes/sec\" sampleRate=\"PT15S\" unit=\"CountPerSecond\"><annotation displayName=\"Disk write operations\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk(_Total)\\Disk Bytes/sec\" sampleRate=\"PT15S\" unit=\"BytesPerSecond\"><annotation displayName=\"Disk speed\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk(_Total)\\Disk Read Bytes/sec\" sampleRate=\"PT15S\" unit=\"BytesPerSecond\"><annotation displayName=\"Disk read speed\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\PhysicalDisk(_Total)\\Disk Write Bytes/sec\" sampleRate=\"PT15S\" unit=\"BytesPerSecond\"><annotation displayName=\"Disk write speed\" locale=\"en-us\"/></PerformanceCounterConfiguration><PerformanceCounterConfiguration counterSpecifier=\"\\LogicalDisk(_Total)\\% Free Space\" sampleRate=\"PT15S\" unit=\"Percent\"><annotation displayName=\"Disk free space (percentage)\" locale=\"en-us\"/></PerformanceCounterConfiguration></PerformanceCounters>",
"wadcfgxstart": "[concat(variables('wadlogs'), variables('wadperfcounters1'), variables('wadperfcounters2'), '<Metrics resourceId=\"')]",
"wadmetricsresourceid": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name , '/providers/', 'Microsoft.Compute/virtualMachines/')]",
"wadcfgxend": "\"><MetricAggregation scheduledTransferPeriod=\"PT1H\"/><MetricAggregation scheduledTransferPeriod=\"PT1M\"/></Metrics></DiagnosticMonitorConfiguration></WadCfg>"

Uzel XML definice metrik ve výše uvedené konfiguraci je důležitým konfiguračním prvkem, protože definuje, jak se agregují a ukládají čítače výkonu definované dříve v xml v uzlu PerformanceCounter .

Důležité

Tyto metriky řídí grafy monitorování a výstrahy v Azure Portal. Pokud chcete zobrazit data monitorování virtuálního počítače v Azure Portal, uzel Metriky s ID prostředku a MetricAggregation musí být součástí konfigurace diagnostiky virtuálního počítače.

Následující příklad ukazuje xml pro definice metrik:

<Metrics resourceId="/subscriptions/subscription().subscriptionId/resourceGroups/resourceGroup().name/providers/Microsoft.Compute/virtualMachines/vmName">
    <MetricAggregation scheduledTransferPeriod="PT1H"/>
    <MetricAggregation scheduledTransferPeriod="PT1M"/>
</Metrics>

Atribut resourceID jednoznačně identifikuje virtuální počítač ve vašem předplatném. Nezapomeňte použít funkce subscription() a resourceGroup(), aby šablona tyto hodnoty automaticky aktualizovala na základě předplatného a skupiny prostředků, do kterých nasazujete.

Pokud vytváříte více Virtual Machines ve smyčce, musíte hodnotu resourceID naplnit funkcí copyIndex(), aby se jednotlivé virtuální počítače správně odlišily. Hodnotu xmlCfg je možné aktualizovat, aby to podporovala následujícím způsobem:

"xmlCfg": "[base64(concat(variables('wadcfgxstart'), variables('wadmetricsresourceid'), concat(parameters('vmNamePrefix'), copyindex()), variables('wadcfgxend')))]",

Hodnota MetricAggregation PT1M a PT1H značí agregaci za minutu a agregaci za hodinu.

Tabulky WADMetrics v úložišti

Výše uvedená konfigurace Metriky generuje tabulky ve vašem účtu úložiště diagnostiky s následujícími zásadami vytváření názvů:

  • WADMetrics: Standardní předpona pro všechny tabulky WADMetrics
  • PT1H nebo PT1M: Znamená, že tabulka obsahuje agregovaná data za 1 hodinu nebo 1 minutu.
  • P10D: Značí, že tabulka obsahuje data za 10 dnů od data, kdy tabulka začala shromažďovat data.
  • V2S: Řetězcová konstanta
  • yyyymmdd: Datum, kdy tabulka začala shromažďovat data.

Příklad: WADMetricsPT1HP10DV2S20151108 obsahuje data metrik agregovaná za hodinu za 10 dnů od 11. listopadu 2015.

Každá tabulka WADMetrics obsahuje následující sloupce:

  • PartitionKey: Klíč oddílu je vytvořený na základě hodnoty resourceID , aby bylo možné jednoznačně identifikovat prostředek virtuálního počítače. Příklad: 002Fsubscriptions:<subscriptionID>:002FresourceGroups:002F<ResourceGroupName>:002Fproviders:002FMicrosoft:002ECompute:002FvirtualMachines:002F<vmName>
  • RowKey(Klíč řádku): Má formát <Descending time tick>:<Performance Counter Name>. Výpočet sestupného časového intervalu je maximální čas mínus čas začátku agregačního období. Pokud například ukázkové období začalo 10. listopadu 2015 a 00:00 hodin UTC, výpočet by byl: DateTime.MaxValue.Ticks - (new DateTime(2015,11,10,0,0,0,DateTimeKind.Utc).Ticks). Pro výkon dostupných bajtů paměti vypadá čítač klíče řádku takto: 2519551871999999999__:005CMemory:005CAvailable:0020Bytes
  • CounterName: Je název čítače výkonu. To odpovídá counterSpecifier definované v konfiguraci XML.
  • Maximum: Maximální hodnota čítače výkonu za období agregace.
  • Minimum: Minimální hodnota čítače výkonu za období agregace.
  • Celkem: Součet všech hodnot čítače výkonu hlášených za období agregace.
  • Počet: Celkový počet hodnot hlášených pro čítač výkonu.
  • Průměr: Průměrná hodnota (celkem/počtem) čítače výkonu za období agregace.

Další kroky