Dela via


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 eventuella 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 Resource Manager-mallen.

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. Till 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 Vm-skalningsuppsättningar 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 den specifikt på Microsoft.Insights.VMDiagnosticsSettings kan den enkelt identifieras av Azure-portalen så att övervakningsdiagrammen visas korrekt i Azure-portalen.

TypeHandlerVersion anger vilken version av tillägget du vill använda. Om du ställer in autoUpgradeMinorVersion-delversionen på true 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). Xmlcfg-egenskapen 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. Mer information om hur du lagrar xml i variabler finns i avsnittet om diagnostikkonfigurationsvariabler . Egenskapen storageAccount anger namnet på lagringskontot 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 befintligadiagnosticsStorageAccountName 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 anses vara 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 över dessa distributioner av virtuella datorer. Med lagringskontot i en annan resurs kan lagringskontot ta emot data från olika distributioner av virtuella datorer, vilket gör det enkelt att felsöka problem i de olika versionerna.

Kommentar

Om du skapar en mall för virtuella Windows-datorer från Visual Studio kan standardlagringskontot vara inställt på 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

Föregående JSON-kodfragment 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'))]"

Xmlcfg-egenskapen för diagnostiktillägget definieras med hjälp av flera variabler som sammanfogas. Värdena för dessa variabler finns i XML så 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 diagnostikinfrastrukturloggar. Den har undantagits och formaterats korrekt så att konfigurationen direkt kan klistras in i avsnittet variabler i mallen. Ett mer läsbart exempel på konfigurations-XML finns i Konfigurationsschema för diagnostik.

"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 övervakningsdiagram och aviseringar i Azure-portalen. 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-portalen.

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 virtuella datorer 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 betyder en aggregering över en minut respektive en aggregering under 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 november 2015

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

  • PartitionKey: Partitionsnyckeln är konstruerad baserat på resourceID-värdet för att unikt identifiera den virtuella datorresursen. Till exempel: 002Fsubscriptions:<subscriptionID>:002FresourceGroups:002F<ResourceGroupName>:002Fproviders:002FMicrosoft:002ECompute:002FvirtualMachines:002F<vmName>
  • RowKey: Följer formatet <Descending time tick>:<Performance Counter Name>. Beräkningen av fallande tids tick är maximala tidsintervall 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 den minnestillgängliga byteprestandan ser radnyckeln ut så här: 2519551871999999999__:005CMemory:005CAvailable:0020Bytes
  • CounterName: Är namnet på prestandaräknaren. Detta matchar den counterSpecifier som definierats i xml-konfigurationen.
  • Maximalt: Det maximala värdet för prestandaräknaren under aggregeringsperioden.
  • Minimum: Det minsta värdet 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