カスタムメトリクスを使用した高度な予測スケーリングポリシー設定 - Amazon EC2 Auto Scaling

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

カスタムメトリクスを使用した高度な予測スケーリングポリシー設定

予測スケーリングポリシーでは、事前定義されたメトリクスまたはカスタムメトリクスを使用できます。カスタムメトリクスは、事前定義されたメトリクス (CPU、ネットワーク I/O、および Application Load Balancer のリクエスト数) ではアプリケーションの負荷が十分に反映できない場合に役立ちます。

カスタムメトリクスを使用して予測スケーリングポリシーを作成する場合、 が提供する他の CloudWatch メトリクスを指定するか AWS、自分で定義して公開するメトリクスを指定できます。Metric Math を使用して、既存のメトリクスを集約し、 が自動的に追跡 AWS しない新しい時系列に変換することもできます。新しい合計や平均の計算など、データの値を組み合わせることを、集計すると言います。結果のデータは集計と言います。

以下のセクションには、ポリシー用の JSON 構造を構築する方法のベストプラクティスと例が記載されています。

ベストプラクティス

次のベストプラクティスは、カスタムメトリクスをより効果的に使用するのに役立ちます。

  • 負荷メトリクスの指定では、グループのキャパシティーに関係なく Auto Scaling グループ全体の負荷を表すメトリクスが最も有用です。

  • スケーリングメトリクスの指定では、インスタンスあたりの平均スループットまたは使用率のメトリクスでスケールするのが最も有用です。

  • スケーリングメトリクスは、キャパシティーに反比例する必要があります。つまり、Auto Scaling グループのインスタンス数が増加すると、スケーリングメトリクスはほぼ同じ割合で減少するようにします。予測スケーリングが期待どおりに動作するようにするには、負荷メトリクスとスケーリングメトリクスに強い相関がある必要もあります。

  • ターゲット使用率は、スケーリングメトリクスのタイプと一致する必要があります。CPU 使用率を使用するポリシー設定の場合、これはパーセンテージのターゲットです。リクエスト数やメッセージ数など、スループットを使用するポリシー設定の場合、これは任意の 1 分間のインスタンスあたりのリクエスト数やメッセージ数のターゲットです。

  • これらの推奨事項に従わない場合、予測される将来の時系列の値は、多くの場合、誤りになります。データが正しいことを確認するために、Amazon EC2 Auto Scaling コンソールで予測値を表示できます。または、予測スケーリングポリシーを作成した後、 GetPredictiveScalingForecast API への呼び出しによって返される LoadForecastおよび CapacityForecast オブジェクトを検査します。

  • 予測スケーリングがキャパシティーのアクティブスケーリングを開始する前に予測を評価できるように、予測のみモードで予測スケーリングを設定することを強くお勧めします。

前提条件

予測スケーリングポリシーにカスタムメトリクスを追加するには、cloudwatch:GetMetricData 許可が必要です。

AWS が提供するメトリクスの代わりに独自のメトリクスを指定するには、まずメトリクスを に発行する必要があります CloudWatch。詳細については、「Amazon ユーザーガイド」の「カスタムメトリクスの発行」を参照してください。 CloudWatch

独自のメトリクスを発行するときは、少なくとも 5 分間隔の頻度でデータポイントを発行するようにしてください。Amazon EC2 Auto Scaling は、必要な期間の長さ CloudWatch に基づいて からデータポイントを取得します。例えば、負荷メトリクスの仕様では、時間単位のメトリクスを使用してアプリケーションの負荷を測定します。 は、公開されたメトリクスデータ CloudWatch を使用して、各 1 時間内に収まるタイムスタンプを持つすべてのデータポイントを集約することで、任意の 1 時間の期間にわたって単一のデータ値を提供します。

カスタムメトリクス用の JSON の構築

次のセクションでは、予測スケーリングを設定して からデータをクエリする方法の例を示します CloudWatch。このオプションの設定には 2 つの異なる手法あり、予測スケーリングポリシーの JSON を構築するために使用する形式は、選択される手法の影響を受けます。メトリクス計算を使用する場合は、実行されるメトリクス計算に基づいて JSON の形式がさらに多様化します。

  1. が提供する他の CloudWatch メトリクス AWS や に発行するメトリクスから直接データを取得するポリシーを作成するには CloudWatch、「」を参照してくださいカスタムロードメトリクスとスケーリングメトリクスを使用する予測スケーリングポリシーの例 (AWS CLI)

  2. 複数の CloudWatch メトリクスをクエリし、数式を使用してこれらのメトリクスに基づく新しい時系列を作成できるポリシーを作成するには、「」を参照してくださいMetric Math 式を使用する

カスタムロードメトリクスとスケーリングメトリクスを使用する予測スケーリングポリシーの例 (AWS CLI)

を使用してカスタムロードとスケーリングメトリクスを含む予測スケーリングポリシーを作成するには AWS CLI、 の引数を という名前の --predictive-scaling-configuration JSON ファイルに保存しますconfig.json

カスタムメトリクスの追加は、以下の例にある置き換え可能な値を独自のメトリクスとターゲット使用率に置き換えることによって開始します。

{ "MetricSpecifications": [ { "TargetValue": 50, "CustomizedScalingMetricSpecification": { "MetricDataQueries": [ { "Id": "scaling_metric", "MetricStat": { "Metric": { "MetricName": "MyUtilizationMetric", "Namespace": "MyNameSpace", "Dimensions": [ { "Name": "MyOptionalMetricDimensionName", "Value": "MyOptionalMetricDimensionValue" } ] }, "Stat": "Average" } } ] }, "CustomizedLoadMetricSpecification": { "MetricDataQueries": [ { "Id": "load_metric", "MetricStat": { "Metric": { "MetricName": "MyLoadMetric", "Namespace": "MyNameSpace", "Dimensions": [ { "Name": "MyOptionalMetricDimensionName", "Value": "MyOptionalMetricDimensionValue" } ] }, "Stat": "Sum" } } ] } } ] }

詳細については、「Amazon EC2 Auto Scaling API リファレンスMetricDataQuery」の「」を参照してください。

注記

以下は、メトリクスのメトリクス名、名前空間、ディメンション、統計情報の検索に役立つ追加のリソースです CloudWatch 。

  • AWS サービスで使用可能なメトリクスの詳細については、「Amazon CloudWatch ユーザーガイド」のAWS CloudWatch 「メトリクスを発行する のサービス」を参照してください。

  • を使用してメトリクスの正確な CloudWatch メトリクス名、名前空間、ディメンション (該当する場合) を取得するには AWS CLI、list-metrics を参照してください。

このポリシーを作成するには、次の例に示すように、JSON ファイルを入力として使用して put-scaling-policy コマンドを実行します。

aws autoscaling put-scaling-policy --policy-name my-predictive-scaling-policy \ --auto-scaling-group-name my-asg --policy-type PredictiveScaling \ --predictive-scaling-configuration file://config.json

成功した場合、このコマンドはポリシーの Amazon リソースネーム (ARN) を返します。

{ "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:2f4f5048-d8a8-4d14-b13a-d1905620f345:autoScalingGroupName/my-asg:policyName/my-predictive-scaling-policy", "Alarms": [] }

Metric Math 式を使用する

以下のセクションには、ポリシーでメトリクス計算を使用する方法を説明する予測スケーリングポリシーの情報と例が記載されています。

Metric Math について

既存のメトリクスデータの集計だけを行う場合、 CloudWatch metric Math は別のメトリクスを に発行する労力とコストを節約します CloudWatch。 AWS が提供する任意のメトリクスを使用できます。また、アプリケーションの一部として定義したメトリクスを使用することもできます。例えば、インスタンスごとに Amazon SQS キューバックログを計算したい場合があります。これを行うには、キューから取得可能なメッセージのおおよその数を取得し、その数を Auto Scaling グループの実行中のキャパシティーで割ります。

詳細については、「Amazon CloudWatch ユーザーガイド」の「Metric Math の使用」を参照してください。

予測スケーリングポリシーで Metric Math の数式を使用する場合は、次の点を考慮してください。

  • Metric Math 演算では、メトリクスのメトリクス名、名前空間、ディメンションのキーと値のペアの一意の組み合わせのデータポイントを使用します。

  • 任意の算術演算子 (+ - * / ^)、統計関数 (AVG や SUM など)、または が CloudWatch サポートするその他の関数を使用できます。

  • 数式の関係式では、メトリクスと他の数式の結果の両方を使用できます。

  • Metric Math の数式は、さまざまな集計で構成できます。ただし、最終的な集計結果として、Average をスケーリングメトリクスに使用し、Sum を負荷メトリクスに使用するのがベストプラクティスです。

  • メトリクスの指定で使用される数式はすべて、最終的に単一の時系列を返す必要があります。

Metric Math を使用するには、次の操作を実行します。

  • 1 つ以上の CloudWatch メトリクスを選択します。次に、数式を作成します。詳細については、「Amazon CloudWatch ユーザーガイド」の「Metric Math の使用」を参照してください。

  • コンソールまたは CloudWatch GetMetricData API を使用して CloudWatch、メトリクスの数式が有効であることを確認します。

メトリクス計算を使用してメトリクスを組み合わせる予測スケーリングポリシーの例 (AWS CLI)

場合によっては、メトリクスを直接指定するのではなく、まず何らかの方法でそのデータを処理する必要がある場合があります。例えば、Amazon SQS キューから作業を取り出すアプリケーションがあり、キュー内の項目数を予測スケーリングの基準として使用したいとします。キューにあるメッセージの数だけでは、必要なインスタンスの数は定義されません。インスタンスごとのバックログを計算するために使用できるメトリクスを作成するには、さらに多くの作業が必要です。詳細については、「Amazon SQS に基づくスケーリング」を参照してください。

このシナリオの予測スケーリングポリシー例を次に示します。Amazon SQS ApproximateNumberOfMessagesVisible メトリクス (キューから取得可能なメッセージの数) に基づくスケーリングメトリクスおよび負荷メトリクスを指定します。Amazon EC2 Auto Scaling GroupInServiceInstances メトリクスと、スケーリングメトリクスのインスタンスごとのバックログを計算するための数式も使用します。

aws autoscaling put-scaling-policy --policy-name my-sqs-custom-metrics-policy \ --auto-scaling-group-name my-asg --policy-type PredictiveScaling \ --predictive-scaling-configuration file://config.json { "MetricSpecifications": [ { "TargetValue": 100, "CustomizedScalingMetricSpecification": { "MetricDataQueries": [ { "Label": "Get the queue size (the number of messages waiting to be processed)", "Id": "queue_size", "MetricStat": { "Metric": { "MetricName": "ApproximateNumberOfMessagesVisible", "Namespace": "AWS/SQS", "Dimensions": [ { "Name": "QueueName", "Value": "my-queue" } ] }, "Stat": "Sum" }, "ReturnData": false }, { "Label": "Get the group size (the number of running instances)", "Id": "running_capacity", "MetricStat": { "Metric": { "MetricName": "GroupInServiceInstances", "Namespace": "AWS/AutoScaling", "Dimensions": [ { "Name": "AutoScalingGroupName", "Value": "my-asg" } ] }, "Stat": "Sum" }, "ReturnData": false }, { "Label": "Calculate the backlog per instance", "Id": "scaling_metric", "Expression": "queue_size / running_capacity", "ReturnData": true } ] }, "CustomizedLoadMetricSpecification": { "MetricDataQueries": [ { "Id": "load_metric", "MetricStat": { "Metric": { "MetricName": "ApproximateNumberOfMessagesVisible", "Namespace": "AWS/SQS", "Dimensions": [ { "Name": "QueueName", "Value": "my-queue" } ], }, "Stat": "Sum" }, "ReturnData": true } ] } } ] }

この例では、ポリシーの ARN が返されます。

{ "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:2f4f5048-d8a8-4d14-b13a-d1905620f345:autoScalingGroupName/my-asg:policyName/my-sqs-custom-metrics-policy", "Alarms": [] }

ブルー/グリーンデプロイシナリオで使用する予測スケーリングのポリシーの例 (AWS CLI)

検索式には、複数の Auto Scaling グループからメトリクスをクエリし、それらに対して数式を実行できる高度なオプションが用意されています。これは、Blue/Green デプロイで特に有用です。

注記

Blue/Green デプロイ とは、同一の Auto Scaling グループを 2 つ別々に作成するデプロイ方法です。本番トラフィックを受信するグループは 1 つだけです。ユーザートラフィックは、最初は以前の (「青」の) Auto Scaling グループに送信され、新しいグループ (「緑」) はアプリケーションまたはサービスの新しいバージョンのテストと評価に使用されます。新しいデプロイがテストされ、合格すると、ユーザートラフィックは緑の Auto Scaling グループに送信されるようになります。デプロイが成功したら、青のグループを削除できます。

Blue/Green デプロイの一部として新しい Auto Scaling グループが作成されると、メトリクスの指定を変更する必要なく、各グループのメトリクス履歴を自動的に予測スケーリングポリシーに含めることができます。詳細については、 AWS コンピューティングブログの「Using EC2 Auto Scaling predictive scaling policies with Blue/Green deployments」を参照してください。

次のポリシー例で、これをどのように実行できるかを示します。この例では、ポリシーで、Amazon EC2 が出力する CPUUtilization メトリクスを使用します。Amazon EC2 Auto Scaling GroupInServiceInstances メトリクスとインスタンスごとのスケーリングメトリクスの値を計算するための数式を使用します。また、キャパシティーメトリック仕様を指定して、GroupInServiceInstances メトリクスを取得します。

検索式は、指定した検索条件に基づいて、複数の Auto Scaling グループ内のインスタンスの CPUUtilization を検索します。後で同じ検索条件に一致する新しい Auto Scaling グループを作成すると、新しい Auto Scaling グループのインスタンスの CPUUtilization が、自動的に含まれます。

aws autoscaling put-scaling-policy --policy-name my-blue-green-predictive-scaling-policy \ --auto-scaling-group-name my-asg --policy-type PredictiveScaling \ --predictive-scaling-configuration file://config.json { "MetricSpecifications": [ { "TargetValue": 25, "CustomizedScalingMetricSpecification": { "MetricDataQueries": [ { "Id": "load_sum", "Expression": "SUM(SEARCH('{AWS/EC2,AutoScalingGroupName} MetricName=\"CPUUtilization\" ASG-myapp', 'Sum', 300))", "ReturnData": false }, { "Id": "capacity_sum", "Expression": "SUM(SEARCH('{AWS/AutoScaling,AutoScalingGroupName} MetricName=\"GroupInServiceInstances\" ASG-myapp', 'Average', 300))", "ReturnData": false }, { "Id": "weighted_average", "Expression": "load_sum / capacity_sum", "ReturnData": true } ] }, "CustomizedLoadMetricSpecification": { "MetricDataQueries": [ { "Id": "load_sum", "Expression": "SUM(SEARCH('{AWS/EC2,AutoScalingGroupName} MetricName=\"CPUUtilization\" ASG-myapp', 'Sum', 3600))" } ] }, "CustomizedCapacityMetricSpecification": { "MetricDataQueries": [ { "Id": "capacity_sum", "Expression": "SUM(SEARCH('{AWS/AutoScaling,AutoScalingGroupName} MetricName=\"GroupInServiceInstances\" ASG-myapp', 'Average', 300))" } ] } } ] }

この例では、ポリシーの ARN が返されます。

{ "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:2f4f5048-d8a8-4d14-b13a-d1905620f345:autoScalingGroupName/my-asg:policyName/my-blue-green-predictive-scaling-policy", "Alarms": [] }

考慮事項とトラブルシューティング

カスタムメトリクスの使用中に問題が発生した場合は、次の操作を実行することをお勧めします。

  • エラーメッセージが表示された場合は、メッセージを読み、可能な場合は報告されている問題を解決します。

  • Blue/Green デプロイシナリオで検索式を使用しようとしているときに問題が発生した場合は、まず、完全一致ではなく部分一致を検索する検索式の作成方法を理解していることを確認してください。また、クエリが、特定のアプリケーションを実行している Auto Scaling グループのみを見つけることを確認します。検索式の構文の詳細については、「Amazon CloudWatch ユーザーガイド」のCloudWatch 「検索式の構文」を参照してください。

  • 式を事前に検証しなかった場合は、スケーリングポリシーの作成時にput-scaling-policyコマンドによって検証されます。ただし、このコマンドでは、検出されたエラーの正確な原因を特定できない可能性があります。この問題を解決するには、 get-metric-data コマンドへのリクエストからのレスポンスで受け取るエラーのトラブルシューティングを行います。 CloudWatch コンソールから式をトラブルシューティングすることもできます。

  • コンソールで [Load] (負荷) と [Capacity] (キャパシティー) のグラフを表示すると、[Capacity] (キャパシティー) グラフにはデータがまったく表示されない場合があります。グラフに完全なデータが含まれるようにするには、Auto Scaling グループのグループメトリクスを常に有効にしてください。詳細については、「Auto Scaling グループのメトリクスを有効にする (コンソール)」を参照してください。

  • キャパシティーメトリクスの指定は、有効期間にわたって異なる Auto Scaling グループで実行されるアプリケーションがある場合にのみ、Blue/Green デプロイで役立ちます。このカスタムメトリクスでは、複数の Auto Scaling グループの総キャパシティーを指定できます。予測スケーリングは、これを使用して、履歴データをコンソールの [Capacity] (キャパシティー) グラフに表示します。

  • MetricDataQueries で SUM() のような数学関数を使用せずに、独自の SEARCH() 関数を指定する場合、ReturnDatafalse を指定する必要があります。これは、検索式が複数の時系列を返す可能性がある一方、数式に基づくメトリクス指定は 1 つの時系列しか返すことができないためです。

  • 検索式に含まれるすべてのメトリクスは、同じ解像度である必要があります。

制限事項

  • 1 つのメトリクス指定で最大 10 個のメトリクスのデータポイントをクエリできます。

  • この制限に関しては、1 つの式は 1 つのメトリクスとしてカウントされます。