Använda övervakning och diagnostik med en virtuell Windows-dator och Azure Resource Manager mallar

Azure Diagnostics-tillägget tillhandahåller övervaknings- och diagnostikfunktionerna på en Windows-baserad virtuell Azure-dator. Du kan aktivera dessa funktioner på den virtuella datorn genom att inkludera tillägget som en del av Azure Resource Manager-mallen. Mer information om hur du inkluderar tillägg som en del av en mall för virtuella datorer finns i Redigera Azure Resource Manager-mallar med VM-tillägg. Den här artikeln beskriver hur du kan lägga till Azure Diagnostics-tillägget i en mall för virtuella Windows-datorer.

Lägg till Azure Diagnostics-tillägget i resursdefinitionen för den virtuella datorn

Om du vill aktivera diagnostiktillägget på en virtuell Windows-dator måste du lägga till tillägget som en VM-resurs i mallen Resource Manager.

För en enkel Resource Manager baserad virtuell dator lägger du till tilläggskonfigurationen i resursmatrisen för den virtuella datorn:

"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"
            }
        }
    }
]

En annan vanlig konvention är att lägga till tilläggskonfigurationen på rotresursnoden i mallen i stället för att definiera den under den virtuella datorns resursnod. Med den här metoden måste du uttryckligen ange en hierarkisk relation mellan tillägget och den virtuella datorn med namn - och typvärdena . Ett exempel:

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

Tillägget är alltid associerat med den virtuella datorn. Du kan antingen direkt definiera det under den virtuella datorns resursnod direkt eller definiera det på basnivå och använda den hierarkiska namngivningskonventionen för att associera det med den virtuella datorn.

För Virtual Machine Scale Sets anges tilläggskonfigurationen i egenskapen extensionProfile för VirtualMachineProfile.

Utgivaregenskapen med värdet Microsoft.Azure.Diagnostics och typegenskapen med värdet IaaSDiagnostics identifierar unikt Azure Diagnostics tillägget.

Värdet för namnegenskapen kan användas för att referera till tillägget i resursgruppen. Om du ställer in det specifikt på Microsoft.Insights.VMDiagnosticsSettings kan det enkelt identifieras av Azure Portal att se till att övervakningsdiagrammen visas korrekt i Azure Portal.

TypeHandlerVersion anger vilken version av tillägget du vill använda. Om du ställer in autoUpgradeMinorVersion-delversionentrue ser du till att du får den senaste delversionen av tillägget som är tillgängligt. Vi rekommenderar starkt att du alltid ställer in autoUpgradeMinorVersion så att du alltid får använda det senaste tillgängliga diagnostiktillägget med alla nya funktioner och buggkorrigeringar.

Inställningselementet innehåller konfigurationsegenskaper för tillägget som kan anges och läsas tillbaka från tillägget (kallas ibland offentlig konfiguration). Egenskapen xmlcfg innehåller xml-baserad konfiguration för diagnostikloggar, prestandaräknare osv. som samlas in av diagnostikagenten. Mer information om själva XML-schemat finns i Konfigurationsschema för diagnostik . En vanlig metod är att lagra den faktiska XML-konfigurationen som en variabel i Azure Resource Manager-mallen och sedan sammanfoga och base64 koda dem för att ange värdet för xmlcfg. Se avsnittet om diagnostikkonfigurationsvariabler för att förstå mer om hur du lagrar XML i variabler. Egenskapen storageAccount anger namnet på det lagringskonto som diagnostikdata överförs till.

Egenskaperna i protectedSettings (kallas ibland privat konfiguration) kan anges men kan inte läsas tillbaka när de har angetts. Den skrivskyddade typen av skyddadeinställningar gör det användbart för lagring av hemligheter som lagringskontonyckeln där diagnostikdata skrivs.

Ange diagnostiklagringskonto som parametrar

Json-kodfragmentet för diagnostiktillägget ovan förutsätter två parametrar existingdiagnosticsStorageAccountName och existingdiagnosticsStorageResourceGroup för att ange diagnostiklagringskontot där diagnostikdata lagras. Om du anger diagnostiklagringskontot som en parameter blir det enkelt att ändra diagnostiklagringskontot i olika miljöer, till exempel kanske du vill använda ett annat diagnostiklagringskonto för testning och ett annat för produktionsdistributionen.

"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"
    }
}

Det är bästa praxis att ange ett diagnostiklagringskonto i en annan resursgrupp än resursgruppen för den virtuella datorn. En resursgrupp kan betraktas som en distributionsenhet med sin egen livslängd, en virtuell dator kan distribueras och distribueras om när nya konfigurationsuppdateringar görs till den, men du kanske vill fortsätta lagra diagnostikdata i samma lagringskonto i dessa distributioner av virtuella datorer. Om lagringskontot finns i en annan resurs kan lagringskontot acceptera data från olika distributioner av virtuella datorer, vilket gör det enkelt att felsöka problem i de olika versionerna.

Anteckning

Om du skapar en mall för virtuella Windows-datorer från Visual Studio kan standardlagringskontot anges att använda samma lagringskonto där den virtuella datorns virtuella hårddisk laddas upp. Detta för att förenkla den inledande installationen av den virtuella datorn. Räkna om mallen för att använda ett annat lagringskonto som kan skickas som en parameter.

Diagnostikkonfigurationsvariabler

Det föregående json-kodfragmentet för diagnostiktillägget definierar en accountid-variabel för att förenkla hämtar lagringskontonyckeln för diagnostiklagringen:

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

Egenskapen xmlcfg för diagnostiktillägget definieras med flera variabler som sammanfogas. Värdena för dessa variabler finns i XML så att de måste vara undantagna korrekt när du ställer in json-variablerna.

I följande exempel beskrivs xml-koden för diagnostikkonfiguration som samlar in prestandaräknare på standardsystemnivå tillsammans med vissa windows-händelseloggar och loggar för diagnostikinfrastruktur. Den har undantagits och formaterats korrekt så att konfigurationen direkt kan klistras in i avsnittet variabler i mallen. Se konfigurationsschemat för diagnostik för ett mer mänskligt läsbart exempel på xml-konfigurationen.

"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>"

Xml-noden Måttdefinition i konfigurationen ovan är ett viktigt konfigurationselement eftersom den definierar hur prestandaräknarna som definierades tidigare i xml-koden i PerformanceCounter-noden aggregeras och lagras.

Viktigt

Dessa mått styr övervakningsdiagrammen och aviseringarna i Azure Portal. Noden Mått med resourceID och MetricAggregation måste ingå i diagnostikkonfigurationen för den virtuella datorn om du vill se vm-övervakningsdata i Azure Portal.

I följande exempel visas xml för måttdefinitioner:

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

ResourceID-attributet identifierar unikt den virtuella datorn i din prenumeration. Se till att använda funktionerna subscription() och resourceGroup() så att mallen automatiskt uppdaterar dessa värden baserat på den prenumeration och resursgrupp som du distribuerar till.

Om du skapar flera Virtual Machines i en loop måste du fylla i resourceID-värdet med en copyIndex()-funktion för att kunna särskilja varje enskild virtuell dator korrekt. XmlCfg-värdet kan uppdateras för att stödja detta på följande sätt:

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

MetricAggregation-värdet för PT1M och PT1H innebär en aggregering under en minut respektive en aggregering över en timme.

WADMetrics-tabeller i lagring

Måttkonfigurationen ovan genererar tabeller i ditt diagnostiklagringskonto med följande namngivningskonventioner:

  • WADMetrics: Standardprefix för alla WADMetrics-tabeller
  • PT1H eller PT1M: Betyder att tabellen innehåller aggregerade data över 1 timme eller 1 minut
  • P10D: Innebär att tabellen innehåller data i 10 dagar från det att tabellen började samla in data
  • V2S: Strängkonstant
  • yyyymmdd: Det datum då tabellen började samla in data

Exempel: WADMetricsPT1HP10DV2S20151108 innehåller måttdata aggregerade under en timme i 10 dagar med början den 11–nov–2015

Varje WADMetrics-tabell innehåller följande kolumner:

  • PartitionKey: Partitionsnyckeln konstrueras baserat på resourceID-värdet för att unikt identifiera den virtuella datorresursen. Exempelvis: 002Fsubscriptions:<subscriptionID>:002FresourceGroups:002F<ResourceGroupName>:002Fproviders:002FMicrosoft:002ECompute:002FvirtualMachines:002F<vmName>
  • RowKey: Följer formatet <Descending time tick>:<Performance Counter Name>. Den fallande tidsberäkning är maximal tids tick minus tiden för aggregeringsperiodens början. Om exempelperioden till exempel startade den 10 november 2015 och 00:00Hrs UTC skulle beräkningen vara: DateTime.MaxValue.Ticks - (new DateTime(2015,11,10,0,0,0,DateTimeKind.Utc).Ticks). För minne tillgängliga byte prestanda, räknar radnyckeln ser ut så här: 2519551871999999999__:005CMemory:005CAvailable:0020Bytes
  • CounterName: Är namnet på prestandaräknaren. Detta matchar den counterSpecifier som definierats i xml-konfigurationen.
  • Maximum: Det maximala värdet för prestandaräknaren under aggregeringsperioden.
  • Minimum: Lägsta värde för prestandaräknaren under aggregeringsperioden.
  • Totalt: Summan av alla värden för prestandaräknaren som rapporterats under aggregeringsperioden.
  • Antal: Det totala antalet värden som rapporterats för prestandaräknaren.
  • Genomsnitt: Det genomsnittliga värdet (totalt/antal) för prestandaräknaren under aggregeringsperioden.

Nästa steg