Eseguire la scalabilità automatica usando metriche guest in un modello di set di scalabilità LinuxAutoscale using guest metrics in a Linux scale set template

In Azure esistono due tipi di metriche raccolte da macchine virtuali e set di scalabilità: alcune provengono dalla macchina virtuale host e altre dalla macchina virtuale guest.There are two types of metrics in Azure that are gathered from VMs and scale sets: some come from the host VM and others come from the guest VM. In generale, se si usano CPU, disco e metriche di rete standard, le metriche host sono probabilmente ottimali.At a high level, if you are using standard CPU, disk, and network metrics, then host metrics are probably a good fit. Se tuttavia è necessaria una scelta di metriche più ampia, le metriche guest rappresentano probabilmente una soluzione migliore.If, however, you need a larger selection of metrics, then guest metrics are probably a better fit. Ecco le differenze tra i due tipi di metriche:Let's take a look at the differences between the two:

Le metriche host sono più semplici e più affidabili.Host metrics are simpler and more reliable. Non richiedono passaggi di configurazione aggiuntivi perché vengono raccolte direttamente dalla macchina virtuale host, mentre le metriche guest richiedono l'installazione dell'estensione Diagnostica di Azure per Windows o dell'estensione Diagnostica di Azure per Linux nella macchina virtuale guest.They do not require additional setup because they are collected by the host VM, whereas guest metrics require us to install the Windows Azure Diagnostics extension or the Linux Azure Diagnostics extension in the guest VM. È preferibile usare metriche guest anziché metriche host perché le metriche guest offrono una selezione più ampia di metriche.One common reason to use guest metrics instead of host metrics is that guest metrics provide a larger selection of metrics than host metrics. Le metriche relative al consumo di memoria, disponibili solo tramite metriche guest, ne sono un esempio.One such example is memory-consumption metrics, which are only available via guest metrics. Le metriche host supportate sono elencate qui, mentre le metriche guest usate comunemente sono elencate qui.The supported host metrics are listed here, and commonly used guest metrics are listed here. Questo articolo illustra come modificare il modello di set di scalabilità a validità minima per usare le regole di scalabilità automatica in base alle metriche guest per i set di scalabilità Linux.This article shows how to modify the minimum viable scale set template to use autoscale rules based on guest metrics for Linux scale sets.

Modificare la definizione del modelloChange the template definition

Il modello di set di scalabilità a validità minima è disponibile qui, mentre il modello per la distribuzione del set di scalabilità Linux con scalabilità automatica basata su guest è disponibile qui.Our minimum viable scale set template can be seen here, and our template for deploying the Linux scale set with guest-based autoscale can be seen here. Viene ora esaminato il diff usato per creare questo modello, git diff minimum-viable-scale-set existing-vnet, passo per passo:Let's examine the diff used to create this template (git diff minimum-viable-scale-set existing-vnet) piece by piece:

Per prima cosa, si aggiungono i parametri per storageAccountName e storageAccountSasToken.First, we add parameters for storageAccountName and storageAccountSasToken. L'agente di diagnostica archivierà i dati di metrica in una tabella in questo account di archiviazione.The diagnostics agent will store metric data in a table in this storage account. A partire dalla versione 3.0 dell'agente di diagnostica Linux, non è più supportato l'uso di una chiave di accesso di archiviazione.As of the Linux Diagnostics Agent version 3.0, using a storage access key is no longer supported. È necessario usare invece un token di firma di accesso condiviso.We must use a SAS Token.

     },
     "adminPassword": {
       "type": "securestring"
+    },
+    "storageAccountName": {
+      "type": "string"
+    },
+    "storageAccountSasToken": {
+      "type": "securestring"
     }
   },

Successivamente, verrà modificato il set di scalabilità extensionProfile in modo da includere l'estensione di diagnostica.Next, we modify the scale set extensionProfile to include the diagnostics extension. In questa configurazione viene specificato l'ID risorsa del set di scalabilità da cui vengono raccolte le metriche, nonché l'account di archiviazione e il token di firma di accesso condiviso da usare per archiviare le metriche.In this configuration, we specify the resource ID of the scale set to collect metrics from, as well as the storage account and SAS token to use to store the metrics. È possibile specificare anche la frequenza con cui vengono aggregate le metriche (in questo caso, ogni minuto) e le metriche di cui tenere traccia (in questo caso, la percentuale di memoria usata).We also specify how frequently the metrics are aggregated (in this case every minute) and which metrics to track (in this case percent used memory). Per informazioni più dettagliate su questa configurazione e sulle metriche diverse dalla percentuale di memoria usata, vedere questa documentazione.For more detailed information on this configuration and metrics other than percent used memory, see this documentation.

                 }
               }
             ]
+          },
+          "extensionProfile": {
+            "extensions": [
+              {
+                "name": "LinuxDiagnosticExtension",
+                "properties": {
+                  "publisher": "Microsoft.Azure.Diagnostics",
+                  "type": "LinuxDiagnostic",
+                  "typeHandlerVersion": "3.0",
+                  "settings": {
+                    "StorageAccount": "[parameters('storageAccountName')]",
+                    "ladCfg": {
+                      "diagnosticMonitorConfiguration": {
+                        "performanceCounters": {
+                          "sinks": "WADMetricJsonBlob",
+                          "performanceCounterConfiguration": [
+                            {
+                              "unit": "percent",
+                              "type": "builtin",
+                              "class": "memory",
+                              "counter": "percentUsedMemory",
+                              "counterSpecifier": "/builtin/memory/percentUsedMemory",
+                              "condition": "IsAggregate=TRUE"
+                            }
+                          ]
+                        },
+                        "metrics": {
+                          "metricAggregation": [
+                            {
+                              "scheduledTransferPeriod": "PT1M"
+                            }
+                          ],
+                          "resourceId": "[resourceId('Microsoft.Compute/virtualMachineScaleSets', 'myScaleSet')]"
+                        }
+                      }
+                    }
+                  },
+                  "protectedSettings": {
+                    "storageAccountName": "[parameters('storageAccountName')]",
+                    "storageAccountSasToken": "[parameters('storageAccountSasToken')]",
+                    "sinksConfig": {
+                      "sink": [
+                        {
+                          "name": "WADMetricJsonBlob",
+                          "type": "JsonBlob"
+                        }
+                      ]
+                    }
+                  }
+                }
+              }
+            ]
           }
         }
       }

Viene aggiunta infine una risorsa autoscaleSettings per configurare la scalabilità automatica in base a queste metriche.Finally, we add an autoscaleSettings resource to configure autoscale based on these metrics. Questa risorsa include una clausola dependsOn che fa riferimento al set di scalabilità per verificarne l'esistenza prima di tentare l'applicazione della scalabilità automatica.This resource has a dependsOn clause that references the scale set to ensure that the scale set exists before attempting to autoscale it. Se si sceglie una metrica diversa su cui basare la scalabilità automatica, si dovrebbe usare il valore counterSpecifier della configurazione di estensione della diagnostica come valore metricName nella configurazione di scalabilità automatica.If we choose a different metric to autoscale on, we would use the counterSpecifier from the diagnostics extension configuration as the metricName in the autoscale configuration. Per altre informazioni sulla configurazione della scalabilità automatica, vedere Procedure consigliate per la scalabilità automatica e la documentazione di riferimento sulle API REST di monitoraggio di Azure.For more information on autoscale configuration, see the autoscale best practices and the Azure Monitor REST API reference documentation.

+    },
+    {
+      "type": "Microsoft.Insights/autoscaleSettings",
+      "apiVersion": "2015-04-01",
+      "name": "guestMetricsAutoscale",
+      "location": "[resourceGroup().location]",
+      "dependsOn": [
+        "Microsoft.Compute/virtualMachineScaleSets/myScaleSet"
+      ],
+      "properties": {
+        "name": "guestMetricsAutoscale",
+        "targetResourceUri": "[resourceId('Microsoft.Compute/virtualMachineScaleSets', 'myScaleSet')]",
+        "enabled": true,
+        "profiles": [
+          {
+            "name": "Profile1",
+            "capacity": {
+              "minimum": "1",
+              "maximum": "10",
+              "default": "3"
+            },
+            "rules": [
+              {
+                "metricTrigger": {
+                  "metricName": "/builtin/memory/percentUsedMemory",
+                  "metricNamespace": "",
+                  "metricResourceUri": "[resourceId('Microsoft.Compute/virtualMachineScaleSets', 'myScaleSet')]",
+                  "timeGrain": "PT1M",
+                  "statistic": "Average",
+                  "timeWindow": "PT5M",
+                  "timeAggregation": "Average",
+                  "operator": "GreaterThan",
+                  "threshold": 60
+                },
+                "scaleAction": {
+                  "direction": "Increase",
+                  "type": "ChangeCount",
+                  "value": "1",
+                  "cooldown": "PT1M"
+                }
+              },
+              {
+                "metricTrigger": {
+                  "metricName": "/builtin/memory/percentUsedMemory",
+                  "metricNamespace": "",
+                  "metricResourceUri": "[resourceId('Microsoft.Compute/virtualMachineScaleSets', 'myScaleSet')]",
+                  "timeGrain": "PT1M",
+                  "statistic": "Average",
+                  "timeWindow": "PT5M",
+                  "timeAggregation": "Average",
+                  "operator": "LessThan",
+                  "threshold": 30
+                },
+                "scaleAction": {
+                  "direction": "Decrease",
+                  "type": "ChangeCount",
+                  "value": "1",
+                  "cooldown": "PT1M"
+                }
+              }
+            ]
+          }
+        ]
+      }
     }
   ]
 }

Passaggi successiviNext steps

È possibile distribuire il modello precedente seguendo quanto indicato nella documentazione di Azure Resource Manager.You can deploy the preceding template by following the Azure Resource Manager documentation.

Questa serie di esercitazioni può essere avviata dall'articolo sul modello di set di scalabilità a validità minima.You can start this tutorial series from the minimum viable scale set template article.

È possibile vedere come modificare il modello di set di scalabilità a validità minima per distribuire il set di scalabilità in una rete virtuale esistente.You can see how to modify the minimum viable scale set template to deploy the scale set into an existing virtual network.

È possibile vedere come modificare il modello di set di scalabilità a validità minima per distribuire il set di scalabilità con un'immagine personalizzata.You can see how to modify the minimum viable scale set template to deploy the scale set with a custom image.

È possibile vedere come modificare il modello di set di scalabilità a validità minima per distribuire un set di scalabilità Linux con scalabilità automatica basata su guest.You can see how to modify the minimum viable scale set template to deploy a Linux scale set with guest-based autoscale.

Per informazioni più generali al riguardo, vedere la panoramica sui set di scalabilità.For more general information about scale sets, refer to the scale set overview page.