Escalado automático con métricas de invitado en una plantilla de conjunto de escalado de Linux

Hay dos tipos generales de métricas en Azure que se recopilan desde máquinas virtuales y conjuntos de escalado: métricas de host y métricas de invitado. A nivel general, si quiere usar métricas estándar de CPU, disco y red, las métricas de host resultan adecuadas. Sin embargo, si necesita una selección de métricas más grande, debería considerar las métricas de invitado.

Las métricas de host no requieren configuración adicional porque las recopila la máquina virtual host, mientras que las métricas de invitado requieren la instalación de la extensión Azure Diagnostics para Windows o Azure Diagnostics para Linux en la máquina virtual invitada. Un motivo habitual para usar las métricas de invitado en lugar de las métricas de host es que las métricas de invitado proporcionan una mayor variedad de métricas que las de host. Un ejemplo es las métricas de consumo de memoria, que solo están disponibles mediante las métricas de invitado. La lista de las métricas de host admitidas se encuentran aquí, y las métricas de invitado de uso frecuente se encuentran aquí. En este artículo se muestra cómo modificar la plantilla de conjunto de escalado viable básico para usar reglas de escalado automático en función de las métricas de invitado para conjuntos de escalado de Linux.

Cambio de la definición de la plantilla

En un artículo anterior creamos una plantilla de conjunto de escalado básico. Ahora usaremos esa plantilla anterior y la modificaremos para crear una plantilla que implementa un conjunto de escalado de Linux con escalabilidad automática basada en métricas de invitado.

Primero, se van a agregar parámetros para storageAccountName y storageAccountSasToken. El agente de Diagnostics almacena los datos de las métricas en una tabla, en esta cuenta de almacenamiento. A partir de la versión 3.0 del agente de Diagnostics para Linux ya no admite el uso de una clave de acceso de almacenamiento. En su lugar, use un token de SAS.

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

A continuación, modifique el conjunto de escalado extensionProfile para incluir la extensión Diagnostics. En esta configuración, se especifica el identificador de recurso del conjunto de escalado del que se recopilarán las métricas, así como la cuenta de almacenamiento y el token de SAS que se usará para almacenarlas. Especifique con qué frecuencia se agregan las métricas (en este caso, cada minuto) y las métricas para las que desea realizar un seguimiento (en este caso, porcentaje de memoria usado). Para más información sobre esta configuración y las métricas, aparte del porcentaje de memoria usado, consulte esta documentación.

                 }
               }
             ]
+          },
+          "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"
+                        }
+                      ]
+                    }
+                  }
+                }
+              }
+            ]
           }
         }
       }

Por último, agregue un recurso autoscaleSettings para configurar el escalado automático en función de estas métricas. Este recurso tiene una cláusula dependsOn que hace referencia al conjunto de escalado para asegurarse de que el conjunto de escalado existe antes de intentar realizar el escalado automático. Si se elige una métrica diferente para el escalado automático, se utilizaría el valor de counterSpecifier de la configuración de la extensión Diagnostics como valor de metricName en la configuración del escalado automático. Para más información sobre la configuración de escalado automático, consulte los procedimientos recomendados de escalado automático y la documentación de referencia de la API de REST de Azure Monitor.

+    },
+    {
+      "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"
+                }
+              }
+            ]
+          }
+        ]
+      }
     }
   ]
 }

Pasos siguientes

Para implementar la plantilla anterior, siga la documentación de Azure Resource Manager.

Puede iniciar esta serie de tutoriales con el artículo Más información sobre las plantillas de conjuntos de escalado de máquinas virtuales.

Puede ver cómo modificar la plantilla de conjunto de escalado básico para implementar el conjunto de escalado en una red virtual existente.

Puede ver cómo modificar la plantilla de conjunto de escalado básico para implementar el conjunto de escalado con una imagen personalizada.

Puede ver cómo modificar la plantilla de conjunto de escalado básico para implementar un conjunto de escalado de Linux con escalabilidad automática basada en invitados.

Para obtener más información sobre los conjuntos de escalado, vea la página de información general sobre los conjuntos de escalado.