Bewaking en diagnostische gegevens gebruiken met een Windows-VM en Azure Resource Manager-sjablonen

De Azure Diagnostics-extensie biedt de bewakings- en diagnosemogelijkheden op een virtuele Windows-machine van Azure. U kunt deze mogelijkheden inschakelen op de virtuele machine 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 extensie Azure Diagnostics kunt toevoegen aan een sjabloon voor virtuele Windows-machines.

De Azure Diagnostics-extensie toevoegen aan de definitie van de VM-resource

Als u de extensie voor diagnostische gegevens wilt inschakelen op een virtuele Windows-machine, moet u de extensie toevoegen als een VM-resource in de sjabloon Resource Manager.

Voor een eenvoudige Resource Manager virtuele machine voegt u de extensieconfiguratie toe aan de resourcesmatrix 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 algemene conventie is om de extensieconfiguratie toe te voegen aan het hoofdresourceknooppunt van de sjabloon in plaats van deze te definiëren onder het knooppunt resources 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 het type waarden. Bijvoorbeeld:

"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 definiëren op basisniveau en de hiërarchische naamconventie gebruiken om deze te koppelen aan de virtuele machine.

Voor Virtual Machine Scale Sets wordt de configuratie van extensies opgegeven in de eigenschap extensionProfile van het VirtualMachineProfile.

De uitgevereigenschap met de waarde van Microsoft.Azure.Diagnostics en de eigenschap type met de waarde van IaaSDiagnostics geven de Azure Diagnostics-extensie uniek aan.

De waarde van de eigenschap name 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 de Azure Portal ervoor zorgen dat de bewakingsgrafieken correct worden weergegeven in de Azure Portal.

De typeHandlerVersion geeft de versie van de extensie die u wilt gebruiken. Als u de secundaire versie van autoUpgradeMinorVersion instelt op true , zorgt u ervoor dat u de meest recente secundaire versie krijgt van de extensie die beschikbaar is. Het wordt ten zeerste aanbevolen om autoUpgradeMinorVersion altijd in te stellen op true , zodat u altijd de nieuwste beschikbare diagnostische extensie kunt gebruiken met alle nieuwe functies en oplossingen voor fouten.

Het element instellingen bevat configuratie-eigenschappen voor de extensie die kunnen worden ingesteld en teruggelezen vanuit de extensie (ook wel openbare configuratie genoemd). De eigenschap xmlcfg bevat op XML gebaseerde configuratie voor de diagnostische logboeken, prestatiemeteritems, enzovoort. die worden verzameld door de diagnostische agent. Zie Diagnostisch configuratieschema voor meer informatie over het XML-schema zelf. Een veelvoorkomende procedure is om de werkelijke XML-configuratie op te slaan als een variabele in de Azure Resource Manager-sjabloon en deze vervolgens samen te voegen en te coderen met base64 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 (ook wel privéconfiguratie genoemd) kunnen worden ingesteld, maar kunnen niet worden teruggelezen nadat ze zijn ingesteld. De alleen-schrijven aard van protectedSettings maakt het handig voor het opslaan van geheimen zoals de opslagaccountsleutel waar de diagnostische gegevens worden geschreven.

Opslagaccount voor diagnostische gegevens opgeven als parameters

In het json-fragment voor de diagnostische extensie hierboven wordt uitgegaan van twee parameters bestaandediagnosticsStorageAccountName en existingdiagnosticsStorageResourceGroup om het opslagaccount voor diagnostische gegevens op te geven waarin diagnostische gegevens worden opgeslagen. Als u het opslagaccount voor diagnostische gegevens opgeeft als parameter, kunt u het opslagaccount voor diagnostische gegevens eenvoudig wijzigen in verschillende omgevingen. U kunt bijvoorbeeld een ander opslagaccount voor diagnostische gegevens gebruiken voor het 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 op te geven in een andere resourcegroep 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 wanneer er nieuwe configuratieupdates worden doorgevoerd, maar u wilt de diagnostische gegevens mogelijk blijven opslaan in hetzelfde opslagaccount voor deze virtuele-machineimplementaties. Als het opslagaccount zich in een andere resource bevindt, kan het opslagaccount gegevens van verschillende implementaties van virtuele machines accepteren, waardoor het eenvoudig is om problemen in de verschillende versies op te lossen.

Notitie

Als u een sjabloon voor virtuele Windows-machines maakt vanuit Visual Studio, is het standaardopslagaccount mogelijk ingesteld op het gebruik van hetzelfde opslagaccount als waar de VHD van de virtuele machine wordt geüpload. Dit is om de initiële installatie van de VM te vereenvoudigen. De sjabloon opnieuw instellen om een ander opslagaccount te gebruiken dat als parameter kan worden doorgegeven.

Diagnostische configuratievariabelen

Het voorgaande json-fragment voor de diagnostische extensie definieert een accountid-variabele om het ophalen van de opslagaccountsleutel voor de diagnostische opslag te vereenvoudigen:

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

De eigenschap xmlcfg voor de diagnostische extensie wordt gedefinieerd met behulp van meerdere variabelen die zijn samengevoegd. De waarden van deze variabelen zijn in XML, dus ze moeten correct worden ge escaped bij het instellen van de JSON-variabelen.

In het volgende voorbeeld wordt de xml van de diagnostische configuratie beschreven die standaard prestatiemeteritems op systeemniveau verzamelt, samen met enkele Windows-gebeurtenislogboeken en diagnostische infrastructuurlogboeken. Deze is escaped 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 met de definitie van metrische gegevens in de bovenstaande configuratie is een belangrijk configuratie-element omdat hiermee wordt gedefinieerd hoe de prestatiemeteritems die eerder in de XML in het PerformanceCounter-knooppunt zijn gedefinieerd, worden geaggregeerd en opgeslagen.

Belangrijk

Met deze metrische gegevens worden de bewakingsgrafieken en -waarschuwingen in de Azure Portal aangedreven. Het knooppunt Metrische gegevens met de resourceID en MetricAggregation moet worden opgenomen in de diagnostische configuratie voor uw VM als u de vm-bewakingsgegevens in de Azure Portal wilt zien.

In het volgende voorbeeld ziet u de XML voor metrische definities:

<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 waarvoor u implementeert.

Als u meerdere Virtual Machines in een lus maakt, moet u de resourceID-waarde vullen met een copyIndex()-functie om elke afzonderlijke VM correct te onderscheiden. De waarde xmlCfg 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 betekent een aggregatie gedurende respectievelijk een minuut en een aggregatie gedurende een uur.

WADMetrics-tabellen in opslag

De bovenstaande configuratie met metrische gegevens genereert tabellen in uw opslagaccount voor diagnostische gegevens met de volgende naamconventies:

  • WADMetrics: Standaardvoorvoegsel voor alle WADMetrics-tabellen
  • PT1H of PT1M: geeft aan dat de tabel geaggregeerde gegevens bevat gedurende 1 uur of 1 minuut
  • P10D: geeft aan dat de tabel gegevens bevat gedurende 10 dagen vanaf het moment dat de tabel is begonnen met het verzamelen van gegevens
  • V2S: tekenreeksconstante
  • yyyymmdd: de datum waarop de tabel is begonnen met het verzamelen van gegevens

Voorbeeld: WADMetricsPT1HP10DV2S20151108 bevat metrische gegevens die gedurende 10 dagen gedurende 10 dagen zijn geaggregeerd, te beginnen op 11-november-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 indeling <Descending time tick>:<Performance Counter Name>. De berekening van aflopende tijdtik is de maximale tijdtik min de tijd van het begin van de aggregatieperiode. Als de voorbeeldperiode bijvoorbeeld is gestart op 10-november-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 het beschikbare geheugen in bytes ziet teller de rijsleutel er als volgt uit: 2519551871999999999__:005CMemory:005CAvailable:0020Bytes
  • CounterName: is de naam van het prestatiemeteritems. Dit komt overeen met de counterSpecifier die is gedefinieerd in de XML-configuratie.
  • Maximum: de maximale waarde van het prestatiemeteritems gedurende de aggregatieperiode.
  • Minimum: de minimumwaarde van het prestatiemeteritems gedurende de aggregatieperiode.
  • Totaal: de som van alle waarden van het prestatiemeteritems dat is gerapporteerd over de aggregatieperiode.
  • Aantal: het totale aantal waarden dat is gerapporteerd voor het prestatiemeteritems.
  • Gemiddelde: De gemiddelde waarde (totaal/aantal) van de prestatiemeteritems gedurende de aggregatieperiode.

Volgende stappen