Linux 확장 집합 템플릿에서 게스트 메트릭을 사용한 자동 크기 조정

Azure에는 VM 및 스케일링 세트에서 수집되는 메트릭 유형이 크게 두 가지가 존재합니다. 바로 호스트 메트릭과 게스트 메트릭입니다. 상위 수준에서 표준 CPU, 디스크 및 네트워크 메트릭을 사용하는 경우 호스트 메트릭이 가장 잘 맞을 것입니다. 그러나 보다 광범위한 메트릭을 선택해야 할 경우에는 게스트 메트릭이 더 적합할 것입니다.

호스트 메트릭은 호스트 VM에서 수집되므로 추가 설정이 필요하지 않습니다. 반면 게스트 메트릭은 게스트 VM에 Microsoft Azure Diagnostic 확장 또는 Linux Azure Diagnostics 확장을 설치해야 합니다. 호스트 메트릭 대신 게스트 메트릭을 사용하는 한 가지 일반적인 원인은 게스트 메트릭에서 제공되는 메트릭이 호스트 메트릭보다 더 많기 때문입니다. 이러한 예로 메모리 소비 메트릭을 들 수 있습니다. 이 메트릭은 게스트 메트릭을 통해서만 사용할 수 있습니다. 지원되는 호스트 메트릭의 목록은 여기에 있으며, 흔히 사용되는 게스트 메트릭의 목록은 여기에 있습니다. 해당 문서에서는 Linux 스케일링 세트용 게스트 메트릭을 기반으로 자동 스케일링 규칙을 사용할 수 있도록 실행 가능한 기본 스케일링 세트 템플릿을 수정하는 방법을 보여 줍니다.

템플릿 정의 변경

이전 문서에서 기본 확장 집합 템플릿을 만들었습니다. 이제 이전 템플릿을 사용하고 수정하여 게스트 메트릭 기반 자동 스케일링 기능으로 Linux 스케일링 세트를 배포하는 템플릿을 만듭니다.

먼저, storageAccountNamestorageAccountSasToken의 매개 변수를 추가합니다. 진단 에이전트가 이 스토리지 계정의 테이블에 메트릭 데이터를 보관합니다. Linux 진단 에이전트 버전 3.0부터는 스토리지 액세스 키를 사용하는 것이 지원되지 않습니다. 대신 SAS 토큰을 사용합니다.

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

다음으로, 진단 확장을 포함하도록 extensionProfile 확장 집합을 수정합니다. 이 구성에서는 메트릭 수집 출처인 확장 집합의 리소스 ID뿐만 아니라 이 메트릭을 저장하는 데 사용할 스토리지 계정 및 SAS 토큰도 지정합니다. 메트릭이 집계되는 빈도(이 경우에는 1분마다)와 추적할 메트릭(이 경우에는 사용된 메모리의 비율)을 지정합니다. 이 구성 및 사용된 메모리 비율 외의 다른 메트릭에 대한 자세한 내용은 이 설명서를 참조하세요.

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

마지막으로, 이러한 메트릭을 기반으로 한 자동 크기 조정을 구성하도록 autoscaleSettings 리소스를 추가합니다. 이 리소스에는 확장 집합을 참조하여 자동 크기 조정을 시도하기 전에 먼저 확장 집합이 존재하는지 확인하는 dependsOn 절이 포함되어 있습니다. 자동 크기 조정의 기반으로 삼을 다른 메트릭을 선택하는 경우는 진단 확장 구성의 counterSpecifier를 자동 크기 조정 구성의 metricName으로 사용합니다. 자동 크기 조정 구성에 대한 자세한 내용은 자동 크기 조정 모범 사례Azure Monitor REST API 참조 설명서를 참조하세요.

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

다음 단계

Azure Resource Manager 설명서에 따라 이전 템플릿을 배포할 수 있습니다.

기본 확장 집합 템플릿 문서에서 이 자습서 시리즈를 시작할 수 있습니다.

기본 확장 집합 템플릿을 수정하여 기존 가상 네트워크에 확장 집합을 배포하는 방법을 보여 줍니다.

기본 확장 집합 템플릿을 수정하여 사용자 지정 이미지로 확장 집합을 배포하는 방법을 보여 줍니다.

기본 확장 집합 템플릿을 수정하여 게스트 기반 자동 크기 조정으로 Linux 확장 집합을 배포하는 방법을 확인할 수 있습니다.

확장 집합에 대한 자세한 내용은 확장 집합 개요 페이지를 참조하세요.