Risoluzione dei problemi di scalabilità automatica con set di scalabilità di macchine virtualiTroubleshooting autoscale with Virtual Machine Scale Sets

Problema: è stata creata un'infrastruttura per il ridimensionamento automatico in Azure Resource Manager tramite set di scalabilità di macchine virtuali di Azure, ad esempio distribuendo un modello simile al seguente:https://github.com/Azure/azure-quickstart-templates/tree/master/201-vmss-bottle-autoscale. Le regole di scalabilità impostate funzionano ma, indipendentemente dal carico delle VM, il ridimensionamento automatico non funziona.Problem – you’ve created an autoscaling infrastructure in Azure Resource Manager using virtual machine scale sets – for example, by deploying a template like this one: https://github.com/Azure/azure-quickstart-templates/tree/master/201-vmss-bottle-autoscale – you have your scale rules defined and it works great, except no matter how much load you put on the VMs, it doesn't autoscale.

Passaggi per la risoluzione dei problemiTroubleshooting steps

Alcuni aspetti da considerare:Some things to consider include:

  • Quanti vCPU sono presenti in ogni macchina virtuale e viene caricato ogni singolo vCPU?How many vCPUs does each VM have, and are you loading each vCPU? Il modello di avvio rapido di Azure di esempio riportato sopra ha uno script do_work.php, che carica un singolo vCPU.The preceding sample Azure Quickstart template has a do_work.php script, which loads a single vCPU. Se si usa una macchina virtuale di dimensioni superiori a quelle di una macchina virtuale a vCPU singolo come Standard_A1 o D1, è necessario eseguire il carico più volte.If you’re using a VM bigger than a single-vCPU VM size like Standard_A1 or D1, you’d need to run this load multiple times. Per verificare il numero di vCPU delle macchine virtuali, vedere Dimensioni delle macchine virtuali in AzureCheck how many vCPUs for your VMs by reviewing Sizes for Windows virtual machines in Azure
  • Quante VM sono presenti nel set di scalabilità di macchine virtuali? Vengono eseguite operazioni su ogni VM?How many VMs in the virtual machine scale set, are you doing work on each one?

    Un aumento del numero di istanze ha luogo unicamente quando l'uso medio della CPU tra tutte le macchine virtuali in un set di scalabilità supera il valore di soglia, in base al tempo definito all'interno delle regole di scalabilità automatica.A scale-out event only takes place when the average CPU across all the VMs in a scale set exceeds the threshold value, over the time internal defined in the autoscale rules.

  • Sono stati persi eventi di scalabilità?Did you miss any scale events?

    Cercare gli eventi di scalabilità nei registri di controllo nel portale di Azure.Check the audit logs in the Azure portal for scale events. Potrebbero essersi verificati un aumento e poi una riduzione delle prestazioni non rilevati.Maybe there was a scale up and a scale down that was missed. È possibile filtrare per "Scalabilità".You can filter by “Scale”.

    Log di controllo

  • Le soglie di aumento e riduzione del numero di istanze sono sufficientemente diverse?Are your scale-in and scale-out thresholds sufficiently different?

    Si supponga di impostare una regola per aumentare il numero di istanze quando l'uso medio della CPU è superiore al 50% in cinque minuti e per ridurre il numero di istanze quando l'uso medio della CPU è inferiore al 50%.Suppose you set a rule to scale out when average CPU is greater than 50% over five minutes, and to scale in when average CPU is less than 50%. Questa impostazione può provocare un problema di instabilità quando l'uso della CPU si avvicina a tale soglia e le azioni di ridimensionamento devono aumentare e ridurre costantemente le dimensioni del set.This setting would cause a “flapping” problem when CPU usage is close to the threshold, with scale actions constantly increasing and decreasing the size of the set. Il servizio di scalabilità automatica prova quindi a risolvere l'instabilità e questo può risolversi in un mancato ridimensionamento.Because of this setting, the autoscale service tries to prevent “flapping”, which can manifest as not scaling. Assicurarsi che le soglie di aumento e riduzione del numero di istanze siano sufficientemente diverse per consentire le azioni di ridimensionamento.Therefore, be sure your scale-out and scale-in thresholds are sufficiently different to allow some space in between scaling.

  • È stato scritto un modello JSON personalizzato?Did you write your own JSON template?

    È facile commettere errori. È quindi consigliabile partire da un modello funzionante come quello riportato sopra e apportare piccole modifiche incrementali.It is easy to make mistakes, so start with a template like the one above which is proven to work, and make small incremental changes.

  • È possibile eseguire manualmente l'aumento o la riduzione del numero di istanze?Can you manually scale in or out?

    Provare a ridistribuire la risorsa del set di scalabilità di macchine virtuali con un'impostazione di "capacità" diversa, per modificare manualmente il numero di macchine virtuali.Try redeploying the virtual machine scale set resource with a different “capacity” setting to change the number of VMs manually. Un modello di esempio è disponibile all'indirizzo: https://github.com/Azure/azure-quickstart-templates/tree/master/201-vmss-scale-existing. Potrebbe essere necessario modificare il modello per fare in modo che abbia le stesse dimensioni della macchina virtuale usate dal set di scalabilità.An example template is here: https://github.com/Azure/azure-quickstart-templates/tree/master/201-vmss-scale-existing – you might need to edit the template to make sure it has the same machine size as your Scale Set uses. Se è possibile modificare manualmente il numero di macchine virtuali, il problema è limitato alla scalabilità automatica.If you can successfully change the number of VMs manually, you then know the problem is isolated to autoscale.

  • Verificare lo stato delle risorse Microsoft.Compute/virtualMachineScaleSet e Microsoft.Insights in Esplora risorse di AzureCheck your Microsoft.Compute/virtualMachineScaleSet, and Microsoft.Insights resources in the Azure Resource Explorer

    Esplora risorse di Azure è uno strumento di risoluzione dei problemi indispensabile che mostra lo stato delle risorse di Azure Resource Manager.The Azure Resource Explorer is an indispensable troubleshooting tool that shows you the state of your Azure Resource Manager resources. Fare clic sulla sottoscrizione ed esaminare il gruppo di risorse di cui si sta provando a risolvere i problemi.Click on your subscription and look at the Resource Group you are troubleshooting. In Provider di risorse di calcolo esaminare il set di scalabilità di macchine virtuali la relativa visualizzazione delle istanze, che mostra lo stato di una distribuzione.Under the Compute resource provider, look at the virtual machine scale set you created and check the Instance View, which shows you the state of a deployment. Controllare anche la visualizzazione delle istanze delle macchine virtuali incluse nel set di scalabilità.Also, check the instance view of VMs in the virtual machine scale set. Accedere quindi al provider di risorse Microsoft.Insights e verificare lo stato delle regole di scalabilità automatica.Then, go into the Microsoft.Insights resource provider and check that the autoscale rules look right.

  • L'estensione della diagnostica funziona e genera dati sulle prestazioni?Is the Diagnostic extension working and emitting performance data?

    Aggiornamento: la funzione di scalabilità automatica di Azure è stata migliorata per l'uso di una pipeline di metriche basate su host che non richiede più l'installazione di un'estensione di diagnostica.Update: Azure autoscale has been enhanced to use a host-based metrics pipeline, which no longer requires a diagnostics extension to be installed. I paragrafi seguenti non avranno più validità se si crea un'applicazione di scalabilità automatica usando la nuova pipeline.The next few paragraphs no longer apply if you create an autoscaling application using the new pipeline. Un esempio di modelli di Azure che sono stati convertiti per utilizzare la pipeline host è disponibile qui: https://github.com/Azure/azure-quickstart-templates/tree/master/201-vmss-bottle-autoscale.An example of Azure templates that have been converted to use the host pipeline is available here: https://github.com/Azure/azure-quickstart-templates/tree/master/201-vmss-bottle-autoscale.

    È consigliabile usare le metriche basate su host per eseguire la scalabilità automatica per i motivi seguenti:Using host-based metrics for autoscale is better for the following reasons:

    • Meno componenti variabili poiché non è più necessario installare alcuna estensione di diagnostica.Fewer moving parts as no diagnostics extensions need to be installed.
    • Modelli più semplici.Simpler templates. È sufficiente aggiungere regole di scalabilità automatica di Insights a un modello del set di scalabilità esistente.Just add insights autoscale rules to an existing scale set template.
    • Creazione di report più affidabile e avvio più veloce delle nuove macchine virtuali.More reliable reporting and faster launching of new VMs.

      Si potrebbe voler usare un'estensione di diagnostica soltanto se ci fosse l'esigenza di scalare/creare report di diagnostica della memoria.The only reasons you might want to keep using a diagnostic extension is if you need memory diagnostics reporting/scaling. Le metriche basate su host non creano report della memoria.Host-based metrics don't report memory.

      Tenendo questo a mente, continuare a leggere l'articolo solo se si intende usare le estensioni di diagnostica per la scalabilità automatica.With that in mind, only follow the rest of this article if you're using diagnostic extensions for your autoscaling.

      La funzione di scalabilità automatica in Azure Resource Manager può (ma non dovrà più) essere eseguita tramite un'estensione della macchina virtuale denominata estensione Diagnostica.Autoscale in Azure Resource Manager can work (but no longer has to) by means of a VM extension called the Diagnostics Extension. L'estensione invia i dati sulle prestazioni a un account di archiviazione specificato nel modello.It emits performance data to a storage account you define in the template. I dati vengono quindi aggregati dal servizio Monitoraggio di Azure.This data is then aggregated by the Azure Monitor service.

      Se il servizio Insights non può leggere i dati delle macchine virtuali, invia un messaggio di posta elettronica.If the Insights service can’t read data from the VMs, it is supposed to send you an email. Ad esempio, si riceve un messaggio di posta elettronica se le macchine virtuali non sono attive.For example, you get an email if the VMs are down. Controllare la posta all'indirizzo di posta elettronica specificato al momento della creazione dell'account di Azure.Be sure to check your email, at the email address you specified when you created your Azure account.

      È anche possibile esaminare i dati personalmente.You can also look at the data yourself. Esaminare l'account di archiviazione di Azure con uno strumento di esplorazione cloud.Look at the Azure storage account using a cloud explorer. Usare ad esempio Visual Studio Cloud Explorer per accedere e scegliere la sottoscrizione di Azure usata.For example, using the Visual Studio Cloud Explorer, log in and pick the Azure subscription you’re using. Selezionare il nome dell'account di archiviazione di diagnostica a cui si fa riferimento nella definizione dell'estensione della diagnostica nel modello di distribuzione.Then, look at the Diagnostics storage account name referenced in the Diagnostics extension definition in your deployment template.

      Cloud Explorer

      Verrà visualizzata una serie di tabelle in cui vengono archiviati i dati di ogni macchina virtuale.You see a bunch of tables where the data from each VM is being stored. Prendendo ad esempio Linux e la relativa metrica della CPU, esaminare le righe più recenti.Taking Linux and the CPU metric as an example, look at the most recent rows. Visual Studio Cloud Explorer supporta un linguaggio di query che permette di eseguire una query.The Visual Studio cloud explorer supports a query language so you can run a query. Ad esempio, è possibile eseguire una query del tipo "Timestamp gt datetime'2016-02-02T21:20:00Z'" per assicurarsi di ottenere gli eventi più recenti.For example, you can run a query for “Timestamp gt datetime’2016-02-02T21:20:00Z’” to make sure you get the most recent events. Il fuso orario è impostato su UTC.The timezone corresponds to UTC. I dati visualizzati corrispondono alle regole di scalabilità impostate?Does the data you see in there correspond to the scale rules you set up? Nell'esempio seguente, l'uso della CPU nel computer 20 è aumentato fino al 100% negli ultimi cinque minuti.In the following example, the CPU for machine 20 started increasing to 100% over the last five minutes.

      Tabelle di archiviazione

      Se i dati non sono presenti, il problema riguarda l'estensione della diagnostica in esecuzione nelle macchine virtuali.If the data is not there, it implies the problem is with the diagnostic extension running in the VMs. Se i dati sono presenti, il problema può riguardare le regole di scalabilità oppure il servizio Insights.If the data is there, it implies there is either a problem with your scale rules, or with the Insights service. Verificare lo Stato di Azure.Check Azure Status.

      Dopo aver seguito questa procedura, qualora ci siano ancora problemi di scalabilità automatica è possibile provare le risorse seguenti:Once you’ve been through these steps, if you're still having autoscale problems, you can try the following resources:

      • Leggere i forum in MSDN o Stack overflowRead the forums on MSDN, or Stack overflow
      • Registrare una chiamata del supporto.Log a support call. Sarà necessario, condividere il modello e la visualizzazione dei dati sulle prestazioni.Be prepared to share the template and a view of your performance data.