Bewaking en diagnose gebruiken met een Windows-VM en Azure Resource Manager-sjablonen
De Azure Diagnostics-extensie biedt de bewakings- en diagnostische mogelijkheden op een virtuele Azure-machine op basis van Windows. U kunt deze mogelijkheden op de virtuele machine inschakelen door de extensie op te geven als onderdeel van de Azure Resource Manager-sjabloon. Zie Azure Resource Manager-sjablonen ontwerpen met VM-extensies voor meer informatie over het opnemen van extensies als onderdeel van een virtuele-machinesjabloon. In dit artikel wordt beschreven hoe u de Azure Diagnostics-extensie kunt toevoegen aan een sjabloon voor virtuele Windows-machines.
De Azure Diagnostics-extensie toevoegen aan de definitie van de VM-resource
Als u de diagnostische extensie wilt inschakelen op een virtuele Windows-machine, moet u de extensie toevoegen als een VM-resource in de Resource Manager-sjabloon.
Voor een eenvoudige virtuele machine op basis van Resource Manager voegt u de extensieconfiguratie toe aan de resourcematrix voor de virtuele machine:
"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"
}
}
}
]
Een andere veelvoorkomende conventie is het toevoegen van de extensieconfiguratie op het hoofd-resourcesknooppunt van de sjabloon in plaats van deze te definiëren onder het knooppunt van de virtuele machine. Met deze benadering moet u expliciet een hiërarchische relatie opgeven tussen de extensie en de virtuele machine met de naam en typewaarden . Voorbeeld:
"name": "[concat(variables('vmName'),'Microsoft.Insights.VMDiagnosticsSettings')]",
"type": "Microsoft.Compute/virtualMachines/extensions",
De extensie is altijd gekoppeld aan de virtuele machine. U kunt deze rechtstreeks definiëren onder het resourceknooppunt van de virtuele machine of deze definiëren op basisniveau en de hiërarchische naamconventie gebruiken om deze aan de virtuele machine te koppelen.
Voor Virtuele-machineschaalsets wordt de configuratie van extensies opgegeven in de eigenschap extensionProfile van het VirtualMachineProfile.
De uitgevereigenschap met de waarde microsoft.Azure.Diagnostics en de typeeigenschap met de waarde van IaaSDiagnostics identificeren de Azure Diagnostics-extensie op unieke wijze.
De waarde van de naameigenschap kan worden gebruikt om te verwijzen naar de extensie in de resourcegroep. Als u deze specifiek instelt op Microsoft.Insights.VMDiagnosticsSettings , kan deze eenvoudig worden geïdentificeerd door Azure Portal, zodat de bewakingsgrafieken correct worden weergegeven in Azure Portal.
De typeHandlerVersion geeft de versie van de extensie die u wilt gebruiken. Als u de secundaire versie van AutoUpgradeMinorVersion instelt op true , krijgt u de nieuwste secundaire versie van de extensie die beschikbaar is. Het wordt ten zeerste aanbevolen dat u autoUpgradeMinorVersion altijd instelt op waar, zodat u altijd de nieuwste beschikbare diagnostische extensie kunt gebruiken met alle nieuwe functies en oplossingen voor fouten.
Het instellingenelement bevat configuratie-eigenschappen voor de extensie die kan worden ingesteld en teruggelezen vanuit de extensie (ook wel openbare configuratie genoemd). De eigenschap xmlcfg bevat een xml-configuratie voor de diagnostische logboeken, prestatiemeteritems, enzovoort die worden verzameld door de diagnostische agent. Zie Het configuratieschema voor diagnostische gegevens voor meer informatie over het XML-schema zelf. Een veelvoorkomende procedure is het opslaan van de werkelijke XML-configuratie als een variabele in de Azure Resource Manager-sjabloon en deze vervolgens samenvoegen en base64 coderen om de waarde voor xmlcfg in te stellen. Zie de sectie over diagnostische configuratievariabelen voor meer informatie over het opslaan van de XML in variabelen. De eigenschap storageAccount geeft de naam op van het opslagaccount waarnaar diagnostische gegevens worden overgedragen.
De eigenschappen in protectedSettings (soms ook wel privéconfiguratie genoemd) kunnen worden ingesteld, maar kunnen niet worden gelezen nadat ze zijn ingesteld. De alleen-schrijven aard van protectedSettings maakt het handig voor het opslaan van geheimen zoals de sleutel van het opslagaccount waarin de diagnostische gegevens worden geschreven.
Diagnostisch opslagaccount opgeven als parameters
In het bovenstaande json-fragment voor de diagnostische extensie wordt ervan uitgegaan dat twee parameters bestaandediagnosticsStorageAccountName en existingdiagnosticsStorageResourceGroup zijn om het diagnostische opslagaccount op te geven waarin diagnostische gegevens worden opgeslagen. Als u het opslagaccount voor diagnostische gegevens opgeeft als een parameter, kunt u het opslagaccount voor diagnostische gegevens eenvoudig wijzigen in verschillende omgevingen. U kunt bijvoorbeeld een ander opslagaccount voor diagnostische gegevens gebruiken voor testen en een ander account voor uw productie-implementatie.
"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"
}
}
Het is raadzaam om een opslagaccount voor diagnostische gegevens in een andere resourcegroep op te geven dan de resourcegroep voor de virtuele machine. Een resourcegroep kan worden beschouwd als een implementatie-eenheid met een eigen levensduur, een virtuele machine kan worden geïmplementeerd en opnieuw worden geïmplementeerd als er nieuwe configuratie-updates worden doorgevoerd, maar u wilt mogelijk doorgaan met het opslaan van de diagnostische gegevens in hetzelfde opslagaccount voor deze implementaties van virtuele machines. Als u het opslagaccount in een andere resource hebt, kan het opslagaccount gegevens van verschillende implementaties van virtuele machines accepteren, zodat u eenvoudig problemen in de verschillende versies kunt oplossen.
Notitie
Als u een sjabloon voor virtuele Windows-machines maakt vanuit Visual Studio, kan het standaardopslagaccount worden ingesteld op het gebruik van hetzelfde opslagaccount waarin de VHD van de virtuele machine wordt geüpload. Dit is om de eerste installatie van de virtuele machine te vereenvoudigen. Verdeel de sjabloon opnieuw om een ander opslagaccount te gebruiken dat als parameter kan worden doorgegeven.
Diagnostische configuratievariabelen
Het json-fragment van de voorgaande diagnostische extensie definieert een accountid-variabele om het ophalen van de sleutel van het opslagaccount voor de diagnostische opslag te vereenvoudigen:
"accountid": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/',parameters('existingdiagnosticsStorageResourceGroup'), '/providers/','Microsoft.Storage/storageAccounts/', parameters('existingdiagnosticsStorageAccountName'))]"
De xmlcfg-eigenschap voor de diagnostische extensie wordt gedefinieerd met behulp van meerdere variabelen die samen worden samengevoegd. De waarden van deze variabelen bevinden zich in XML, zodat ze correct moeten worden ontsnapt bij het instellen van de json-variabelen.
In het volgende voorbeeld wordt het XML-bestand voor diagnostische configuratie beschreven dat standaard prestatiemeteritems op systeemniveau verzamelt, samen met enkele Windows-gebeurtenislogboeken en diagnostische infrastructuurlogboeken. Het is ontsnapt en correct opgemaakt, zodat de configuratie rechtstreeks kan worden geplakt in de sectie variabelen van uw sjabloon. Zie het diagnostische configuratieschema voor een beter leesbaar voorbeeld van de configuratie-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>"
Het XML-knooppunt voor de definitie van metrische gegevens in de bovenstaande configuratie is een belangrijk configuratie-element, omdat hiermee wordt gedefinieerd hoe de prestatiemeteritems die eerder zijn gedefinieerd in het xml-knooppunt in PerformanceCounter worden samengevoegd en opgeslagen.
Belangrijk
Met deze metrische gegevens worden de bewakingsgrafieken en -waarschuwingen in Azure Portal aangedreven. Het knooppunt Metrische gegevens met de resourceID en MetricAggregation moet worden opgenomen in de diagnostische configuratie voor uw VIRTUELE machine als u de vm-bewakingsgegevens wilt weergeven in Azure Portal.
In het volgende voorbeeld ziet u de XML voor definities van metrische gegevens:
<Metrics resourceId="/subscriptions/subscription().subscriptionId/resourceGroups/resourceGroup().name/providers/Microsoft.Compute/virtualMachines/vmName">
<MetricAggregation scheduledTransferPeriod="PT1H"/>
<MetricAggregation scheduledTransferPeriod="PT1M"/>
</Metrics>
Het kenmerk resourceID identificeert de virtuele machine in uw abonnement op unieke wijze. Zorg ervoor dat u de functies subscription() en resourceGroup() gebruikt, zodat de sjabloon deze waarden automatisch bijwerkt op basis van het abonnement en de resourcegroep waarnaar u implementeert.
Als u meerdere virtuele machines in een lus maakt, moet u de resourceID-waarde vullen met een copyIndex()-functie om elke afzonderlijke VIRTUELE machine correct te onderscheiden. De xmlCfg-waarde kan als volgt worden bijgewerkt om dit te ondersteunen:
"xmlCfg": "[base64(concat(variables('wadcfgxstart'), variables('wadmetricsresourceid'), concat(parameters('vmNamePrefix'), copyindex()), variables('wadcfgxend')))]",
De MetricAggregation-waarde van PT1M en PT1H geven respectievelijk een aggregatie aan gedurende een minuut en een aggregatie gedurende een uur.
WADMetrics-tabellen in opslag
Met de bovenstaande configuratie voor metrische gegevens worden tabellen in uw opslagaccount voor diagnostische gegevens gegenereerd met de volgende naamconventies:
- WADMetrics: Standaardvoorvoegsel voor alle WADMetrics-tabellen
- PT1H of PT1M: Geeft aan dat de tabel geaggregeerde gegevens bevat van meer dan 1 uur of 1 minuut
- P10D: Geeft aan dat de tabel 10 dagen gegevens bevat vanaf het moment waarop de tabel begon met het verzamelen van gegevens
- V2S: tekenreeksconstante
- jjjjmmdd: de datum waarop de tabel begon met het verzamelen van gegevens
Voorbeeld: WADMetricsPT1HP10DV2S20151108 bevat metrische gegevens die meer dan een uur zijn geaggregeerd voor 10 dagen vanaf 11-nov-2015
Elke WADMetrics-tabel bevat de volgende kolommen:
- PartitionKey: de partitiesleutel wordt samengesteld op basis van de resourceID-waarde om de VM-resource uniek te identificeren. Bijvoorbeeld:
002Fsubscriptions:<subscriptionID>:002FresourceGroups:002F<ResourceGroupName>:002Fproviders:002FMicrosoft:002ECompute:002FvirtualMachines:002F<vmName>
- RowKey: Volgt de notatie
<Descending time tick>:<Performance Counter Name>
. De berekening van aflopende tijdtekens is de maximale tijdstiket minus de tijd van het begin van de aggregatieperiode. Als de voorbeeldperiode bijvoorbeeld is gestart op 10-nov-2015 en 00:00 uur UTC, is de berekening:DateTime.MaxValue.Ticks - (new DateTime(2015,11,10,0,0,0,DateTimeKind.Utc).Ticks)
. Voor de prestaties van beschikbare bytes ziet de rijsleutel er als volgt uit:2519551871999999999__:005CMemory:005CAvailable:0020Bytes
- CounterName: is de naam van de prestatiemeteritem. Dit komt overeen met de counterSpecifier die is gedefinieerd in de XML-configuratie.
- Maximum: de maximale waarde van de prestatiemeteritem gedurende de aggregatieperiode.
- Minimum: De minimumwaarde van de prestatiemeteritem gedurende de aggregatieperiode.
- Totaal: De som van alle waarden van het prestatiemeteritem dat is gerapporteerd over de aggregatieperiode.
- Aantal: Het totale aantal waarden dat is gerapporteerd voor de prestatiemeteritem.
- Gemiddelde: De gemiddelde waarde (totaal/aantal) van de prestatiemeteritem gedurende de aggregatieperiode.
Volgende stappen
- Zie vm-monitoring-diagnostics-extension voor een volledige voorbeeldsjabloon van een virtuele Windows-machine met diagnostische extensie
- De Azure Resource Manager-sjabloon implementeren met behulp van Azure PowerShell of Azure-opdrachtregel
- Meer informatie over het ontwerpen van Azure Resource Manager-sjablonen