Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'estensione Diagnostica di Azure offre le funzionalità di monitoraggio e diagnostica in una macchina virtuale di Azure basata su Windows. È possibile abilitare queste funzionalità nella macchina virtuale includendo l'estensione come parte del modello di Azure Resource Manager. Per altre informazioni sull'inclusione di qualsiasi estensione come parte di un modello di macchina virtuale, vedere Creazione di modelli di Azure Resource Manager con estensioni vm. Questo articolo descrive come aggiungere l'estensione Diagnostica di Azure a un modello di macchina virtuale Windows.
Importante
Eseguire la migrazione dall'estensione Diagnostica di Azure
L'estensione Diagnostica di Azure sarà deprecata il 31 marzo 2026. Dopo questa data, Microsoft non fornirà più supporto per l'estensione Diagnostica di Azure.
Per garantire il supporto continuo e l'accesso alle nuove funzionalità, è necessario eseguire la migrazione dalle estensioni di Diagnostica di Azure per Linux (LAD) e Windows (WAD) all'agente di Monitoraggio di Azure, che può raccogliere gli stessi dati e inviarli a più destinazioni, tra cui aree di lavoro Log Analytics, Hub eventi di Azure e Archiviazione di Azure. Rimuovere LAD o WAD dopo aver configurato l'agente di Monitoraggio di Azure per evitare dati duplicati.
In alternativa all'archiviazione, è consigliabile inviare dati a una tabella con il piano ausiliario nell'area di lavoro Log Analytics per la registrazione conveniente.
Per verificare quali estensioni sono installate in una singola macchina virtuale, selezionare Estensioni e applicazioni in Impostazioni nella macchina virtuale. Per esaminare le estensioni installate in tutte le macchine virtuali nelle sottoscrizioni a cui si ha accesso, usare la query seguente in Azure Resource Graph:
resources
| where type contains "extension"
| extend parsedProperties = parse_json(properties)
| extend publisher = tostring(parsedProperties.publisher)
| project-away parsedProperties
| where publisher == "Microsoft.Azure.Diagnostics"
| distinct id
In questo modo si ottengono risultati simili ai seguenti:
Aggiungere l'estensione Diagnostica di Azure alla definizione della risorsa della macchina virtuale
Per abilitare l'estensione di diagnostica in una macchina virtuale Windows, è necessario aggiungere l'estensione come risorsa vm nel modello di Resource Manager.
Per una semplice macchina virtuale basata su Resource Manager, aggiungere la configurazione dell'estensione all'array di risorse per la macchina virtuale:
"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"
}
}
}
]
Un'altra convenzione comune consiste nell'aggiungere la configurazione dell'estensione nel nodo delle risorse radice del modello anziché definirla nel nodo delle risorse della macchina virtuale. Con questo approccio, è necessario specificare in modo esplicito una relazione gerarchica tra l'estensione e la macchina virtuale con il nome e i valori del tipo . Per esempio:
"name": "[concat(variables('vmName'),'Microsoft.Insights.VMDiagnosticsSettings')]",
"type": "Microsoft.Compute/virtualMachines/extensions",
L'estensione è sempre associata alla macchina virtuale, è possibile definirla direttamente nel nodo della risorsa della macchina virtuale o definirla a livello di base e usare la convenzione di denominazione gerarchica per associarla alla macchina virtuale.
Per i set di scalabilità di macchine virtuali, la configurazione delle estensioni viene specificata nella proprietà extensionProfile di VirtualMachineProfile.
La proprietà publisher con il valore di Microsoft.Azure.Diagnostics e la proprietà type con il valore di IaaSDiagnostics identificano in modo univoco l'estensione Diagnostica di Azure.
Il valore della proprietà name può essere usato per fare riferimento all'estensione nel gruppo di risorse. Impostandolo in modo specifico su Microsoft.Insights.VMDiagnosticsSettings , è possibile identificarlo facilmente dal portale di Azure assicurando che i grafici di monitoraggio vengano visualizzati correttamente nel portale di Azure.
TypeHandlerVersion specifica la versione dell'estensione da usare. L'impostazione della versione secondaria autoUpgradeMinorVersion su true garantisce di ottenere la versione secondaria più recente dell'estensione disponibile. È consigliabile impostare sempre autoUpgradeMinorVersion su true in modo che sia sempre possibile usare l'estensione diagnostica più recente disponibile con tutte le nuove funzionalità e correzioni di bug.
L'elemento settings contiene le proprietà delle configurazioni per l'estensione che può essere impostata e letta nuovamente dall'estensione (talvolta definita configurazione pubblica). La proprietà xmlcfg contiene la configurazione basata su xml per i log di diagnostica, i contatori delle prestazioni e così via raccolti dall'agente di diagnostica. Per altre informazioni sullo schema xml stesso, vedere Schema di configurazione della diagnostica . Una procedura comune consiste nell'archiviare la configurazione xml effettiva come variabile nel modello di Azure Resource Manager e quindi concatenarle e codificarle in base64 per impostare il valore per xmlcfg. Per altre informazioni su come archiviare il codice xml nelle variabili, vedere la sezione sulle variabili di configurazione della diagnostica . La proprietà storageAccount specifica il nome dell'account di archiviazione a cui vengono trasferiti i dati di diagnostica.
È possibile impostare le proprietà in protectedSettings (talvolta denominata configurazione privata), ma non può essere rilette dopo l'impostazione. La natura di sola scrittura di protectedSettings rende utile l'archiviazione di segreti come la chiave dell'account di archiviazione in cui vengono scritti i dati di diagnostica.
Specifica dell'account di archiviazione di diagnostica come parametri
Il frammento json dell'estensione di diagnostica precedente presuppone due parametri existingdiagnosticsStorageAccountName e existingdiagnosticsStorageResourceGroup per specificare l'account di archiviazione di diagnostica in cui sono archiviati i dati di diagnostica. Se si specifica l'account di archiviazione di diagnostica come parametro, è possibile modificare facilmente l'account di archiviazione di diagnostica in ambienti diversi, ad esempio per usare un account di archiviazione di diagnostica diverso per i test e uno diverso per la distribuzione di produzione.
"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"
}
}
È consigliabile specificare un account di archiviazione di diagnostica in un gruppo di risorse diverso rispetto al gruppo di risorse per la macchina virtuale. Un gruppo di risorse può essere considerato come un'unità di distribuzione con la propria durata, una macchina virtuale può essere distribuita e ridistribuita quando vengono apportati nuovi aggiornamenti delle configurazioni, ma è possibile continuare a archiviare i dati di diagnostica nello stesso account di archiviazione in tali distribuzioni di macchine virtuali. La presenza dell'account di archiviazione in una risorsa diversa consente all'account di archiviazione di accettare i dati di varie distribuzioni di macchine virtuali semplificando la risoluzione dei problemi nelle varie versioni.
Annotazioni
Se si crea un modello di macchina virtuale Windows da Visual Studio, l'account di archiviazione predefinito potrebbe essere impostato per usare lo stesso account di archiviazione in cui viene caricato il disco rigido virtuale della macchina virtuale. Si tratta di semplificare la configurazione iniziale della macchina virtuale. Re-factor del modello per usare un account di archiviazione diverso che può essere passato come parametro.
Variabili di configurazione della diagnostica
Il frammento json dell'estensione diagnostica precedente definisce una variabile accountid per semplificare il recupero della chiave dell'account di archiviazione per l'archiviazione di diagnostica:
"accountid": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/',parameters('existingdiagnosticsStorageResourceGroup'), '/providers/','Microsoft.Storage/storageAccounts/', parameters('existingdiagnosticsStorageAccountName'))]"
La proprietà xmlcfg per l'estensione di diagnostica viene definita usando più variabili concatenate insieme. I valori di queste variabili sono in xml, quindi devono essere preceduti correttamente da escape quando si impostano le variabili json.
Nell'esempio seguente viene descritto il codice XML di configurazione della diagnostica che raccoglie i contatori delle prestazioni a livello di sistema standard insieme ad alcuni log eventi di Windows e ai log dell'infrastruttura di diagnostica. È stato preceduto da escape e formattato correttamente in modo che la configurazione possa essere incollata direttamente nella sezione variabili del modello. Per un esempio più leggibile del codice xml di configurazione di configurazione, vedere Schema di configurazione di diagnostica .
"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>"
Il nodo XML della definizione metrica nella configurazione precedente è un elemento di configurazione importante perché definisce il modo in cui i contatori delle prestazioni definiti in precedenza nel codice xml nel nodo PerformanceCounter vengono aggregati e archiviati.
Importante
Queste metriche determinano i grafici di monitoraggio e gli avvisi nel portale di Azure. Il nodo Metriche con resourceID e MetricAggregation deve essere incluso nella configurazione di diagnostica per la macchina virtuale se si vogliono visualizzare i dati di monitoraggio della macchina virtuale nel portale di Azure.
L'esempio seguente illustra il codice xml per le definizioni delle metriche:
<Metrics resourceId="/subscriptions/subscription().subscriptionId/resourceGroups/resourceGroup().name/providers/Microsoft.Compute/virtualMachines/vmName">
<MetricAggregation scheduledTransferPeriod="PT1H"/>
<MetricAggregation scheduledTransferPeriod="PT1M"/>
</Metrics>
L'attributo resourceID identifica in modo univoco la macchina virtuale nella sottoscrizione. Assicurarsi di usare le funzioni subscription() e resourceGroup() in modo che il modello aggiorni automaticamente tali valori in base alla sottoscrizione e al gruppo di risorse in cui si esegue la distribuzione.
Se si creano più macchine virtuali in un ciclo, è necessario popolare il valore resourceID con una funzione copyIndex() per distinguere correttamente ogni singola macchina virtuale. Il valore xmlCfg può essere aggiornato per supportare questa operazione come indicato di seguito:
"xmlCfg": "[base64(concat(variables('wadcfgxstart'), variables('wadmetricsresourceid'), concat(parameters('vmNamePrefix'), copyindex()), variables('wadcfgxend')))]",
Il valore MetricAggregation di PT1M e PT1H indicano rispettivamente un'aggregazione in un minuto e un'aggregazione in un'ora.
Tabelle WADMetrics nell'archiviazione
La configurazione delle metriche precedente genera tabelle nell'account di archiviazione di diagnostica con le convenzioni di denominazione seguenti:
- WADMetrics: prefisso standard per tutte le tabelle WADMetrics
- PT1H o PT1M: indica che la tabella contiene dati aggregati su 1 ora o 1 minuto
- P10D: indica che la tabella contiene dati per 10 giorni da quando la tabella ha iniziato a raccogliere dati
- V2S: Costante stringa
- yyyymmdd: data in cui la tabella ha iniziato a raccogliere dati
Esempio: WADMetricsPT1HP10DV2S20151108 contiene i dati delle metriche aggregati in un'ora per 10 giorni a partire dal 11 novembre 2015
Ogni tabella WADMetrics contiene le colonne seguenti:
-
PartitionKey: la chiave di partizione viene costruita in base al valore resourceID per identificare in modo univoco la risorsa della macchina virtuale. Ad esempio:
002Fsubscriptions:<subscriptionID>:002FresourceGroups:002F<ResourceGroupName>:002Fproviders:002FMicrosoft:002ECompute:002FvirtualMachines:002F<vmName> -
RowKey: segue il formato
<Descending time tick>:<Performance Counter Name>. Il calcolo del segno di graduazione temporale decrescente è il numero massimo di tick temporali meno l'ora dell'inizio del periodo di aggregazione. Ad esempio, se il periodo di esempio è iniziato il 10-novembre-2015 e le 00:00 UTC, il calcolo sarà:DateTime.MaxValue.Ticks - (new DateTime(2015,11,10,0,0,0,DateTimeKind.Utc).Ticks). Per le prestazioni dei byte disponibili per la memoria, il contatore della chiave di riga è simile al seguente:2519551871999999999__:005CMemory:005CAvailable:0020Bytes - CounterName: nome del contatore delle prestazioni. Corrisponde al counterSpecifier definito nella configurazione xml.
- Massimo: valore massimo del contatore delle prestazioni nel periodo di aggregazione.
- Minimo: valore minimo del contatore delle prestazioni nel periodo di aggregazione.
- Totale: somma di tutti i valori del contatore delle prestazioni segnalato nel periodo di aggregazione.
- Conteggio: numero totale di valori segnalati per il contatore delle prestazioni.
- Media: valore medio (totale/conteggio) del contatore delle prestazioni nel periodo di aggregazione.
Passaggi successivi
- Per un modello di esempio completo di una macchina virtuale Windows con estensione diagnostica, vedere vm-monitoring-diagnostics-extension
- Distribuire il modello di Azure Resource Manager usando Azure PowerShell o la riga di comando di Azure
- Altre informazioni sulla creazione di modelli di Azure Resource Manager