Linux スケール セット テンプレートのゲスト メトリックを使用した自動スケール

VM とスケール セットから収集される Azure のメトリックには、ホスト メトリックとゲスト メトリックの 2 つの大きな種類があります。 一般には、標準的な CPU、ディスク、ネットワーク メトリックを使用している場合、ホスト メトリックは適合します。 ただし、メトリックの選択の幅を大きくする必要がある場合は、ゲスト メトリックの方を使用すべきです。

ホスト メトリックの場合は、ホスト VM によってメトリックが収集されるので、特別な設定は必要ありません。ゲスト メトリックの場合は、ゲスト VM に Windows 版の Azure Diagnostics の拡張機能か、Linux 版の Azure Diagnostics の拡張機能をインストールする必要があります。 一般に、ホスト メトリックではなくゲスト メトリックを使用する理由の 1 つとして、ゲスト メトリックではホスト メトリックよりも多くのメトリックが提供される点が挙げられます。 たとえば、メモリ消費に関するメトリックは、ゲスト メトリックでしか利用できません。 サポートされているホスト メトリックについてはこちらを、よく使用されるゲスト メトリックについてはこちらをご覧ください。 この記事では、Linux スケール セットのゲストのメトリックに基づいた自動スケール規則を使用するよう、実行可能な基本のスケール セットのテンプレートを編集する方法を説明します。

テンプレートの定義を変更する

前回のアーティクルでは、基本的なスケール セット テンプレートを作成しました。 では、以前のテンプレートを使用して、Linux スケール セットをゲスト メトリック ベースの自動スケーリングに展開するテンプレートを作成します。

まず、storageAccountNamestorageAccountSasToken のパラメーターを追加します。 この診断エージェントが、メトリック データをこのストレージ アカウントのテーブルに格納します。 Linux 診断エージェント バージョン 3.0 の時点で、ストレージ アクセス キーの使用はサポートされなくなりました。 代わりに、SAS トークンを使用します。

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

次に、診断の拡張機能を含めるようにスケール セット extensionProfile を変更します。 この構成では、メトリックの保存に使用するストレージ アカウントと SAS トークンに加え、メトリックを収集するスケール セットのリソース ID を指定します。 メトリックを集計する頻度 (ここでは 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 スケール セットをデプロイするように基本スケール セット テンプレートを変更する方法を確認できます。

スケール セットの詳細については、スケール セットの概要に関するページを参照してください。