Advanced predictive scaling policy configurations using custom metrics (Configurazioni avanzate delle policy di dimensionamento predittivo utilizzando parametri personalizzati) - Dimensionamento automatico Amazon EC2

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Advanced predictive scaling policy configurations using custom metrics (Configurazioni avanzate delle policy di dimensionamento predittivo utilizzando parametri personalizzati)

In una policy di dimensionamento predittivo, puoi utilizzare parametri predefiniti o personalizzati. I parametri personalizzati sono utili quando i parametri predefiniti (CPU, I/O di rete e numero di richieste di Application Load Balancer) non descrivono sufficientemente il carico dell'applicazione.

Quando crei una politica di scalabilità predittiva con metriche personalizzate, puoi specificare altre CloudWatch metriche fornite da AWS oppure puoi specificare metriche che definisci e pubblichi tu stesso. Puoi anche utilizzare la matematica metrica per aggregare e trasformare le metriche esistenti in una nuova serie temporale che non viene tracciata automaticamente. AWS Quando si combinano valori nei dati, ad esempio calcolando nuove somme o medie si parla di aggregazione. I dati risultanti sono chiamati aggregato.

La sezione seguente contiene le best practice e alcuni esempi di come costruire la struttura JSON per la policy.

Best practice

Le seguenti best practice consentono di utilizzare i parametri personalizzati in modo più efficace:

  • Per la specifica del parametro del carico, il parametro più utile è un parametro che rappresenta il carico su un gruppo con scalabilità automatica nel suo complesso, indipendentemente dalla capacità del gruppo.

  • Per la specifica del parametro di dimensionamento, il parametro più utile da dimensionare è un parametro di velocità effettiva o utilizzo medio per istanza.

  • Il parametro di dimensionamento deve essere inversamente proporzionale alla capacità. Cioè, se il numero di istanze nel gruppo con scalabilità automatica aumenta, il parametro di dimensionamento dovrebbe diminuire approssimativamente della stessa proporzione. Per garantire che il dimensionamento predittivo si comporti come previsto, anche il parametro del carico e il parametro di ridimensionamento devono essere fortemente correlati tra loro.

  • L'utilizzo di destinazione deve corrispondere al tipo di parametro di dimensionamento. Per una configurazione di policy che utilizza l'utilizzo della CPU, questa è una percentuale di destinazione. Per una configurazione di policy che utilizza la velocità effettiva, ad esempio il numero di richieste o messaggi, si tratta del numero di richieste o messaggi di destinazione per istanza durante un intervallo di un minuto.

  • Se questi suggerimenti non vengono seguiti, i valori futuri previsti della serie temporale probabilmente non saranno corretti. Per verificare che i dati siano corretti, puoi visualizzare i valori previsti nella console Dimensionamento automatico Amazon EC2. In alternativa, dopo aver creato la politica di scalabilità predittiva, ispeziona CapacityForecast gli oggetti restituiti da una LoadForecast chiamata all'API. GetPredictiveScalingForecast

  • Ti suggeriamo vivamente di configurare il dimensionamento predittivo in Forecast only (solo Forecast), in modo da poter valutare il Forecast prima che il dimensionamento predittivo inizi attivamente la capacità di dimensionamento.

Prerequisiti

Per aggiungere parametri personalizzati alla tua policy di dimensionamento predittivo, devi disporre delle autorizzazioni cloudwatch:GetMetricData.

Per specificare le tue metriche anziché le metriche AWS fornite da te, devi prima pubblicarle su. CloudWatch Per ulteriori informazioni, consulta Pubblicazione di metriche personalizzate nella Amazon CloudWatch User Guide.

Quando pubblichi i tuoi parametri, assicurati di pubblicare i punti dati con una frequenza minima di cinque minuti. Amazon EC2 Auto Scaling recupera i punti CloudWatch dati in base alla durata del periodo necessario. Ad esempio, la specifica dei parametri di carico utilizza parametri orari per misurare il carico dell'applicazione. CloudWatch utilizza i dati metrici pubblicati per fornire un unico valore di dati per ogni periodo di un'ora aggregando tutti i punti dati con timestamp che rientrano in ogni periodo di un'ora.

Costruzione di JSON per i parametri personalizzati

La sezione seguente contiene esempi su come configurare la scalabilità predittiva da cui interrogare i dati. CloudWatch Esistono due metodi diversi per configurare questa opzione e il metodo scelto influisce sul formato utilizzato per costruire il JSON per la policy di scalabilità predittiva. Quando si utilizza la formula per i parametri, il formato del JSON varia ulteriormente in base alla formula eseguita.

  1. Per creare una policy che ottenga i dati direttamente da altre CloudWatch metriche fornite da AWS o da metriche su cui pubblichi, consulta. CloudWatch Esempio di policy di dimensionamento predittivo con parametri di carico e dimensionamento personalizzati (AWS CLI)

  2. Per creare una policy in grado di interrogare più CloudWatch metriche e utilizzare espressioni matematiche per creare nuove serie temporali basate su tali metriche, consulta. Utilizzare le espressioni matematiche del parametro

Esempio di policy di dimensionamento predittivo con parametri di carico e dimensionamento personalizzati (AWS CLI)

Per creare una politica di scalabilità predittiva con metriche di carico e scalabilità personalizzate con AWS CLI, memorizza gli argomenti per in un file JSON denominato. --predictive-scaling-configuration config.json

Inizi ad aggiungere parametri personalizzati sostituendo i valori sostituibili nell'esempio seguente con quelli dei tuoi parametri e del tuo obiettivo di destinazione.

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

Per ulteriori informazioni, consulta il riferimento MetricDataQueryall'API Amazon EC2 Auto Scaling.

Nota

Di seguito sono riportate alcune risorse aggiuntive che possono aiutarti a trovare nomi di metriche, namespace, dimensioni e statistiche relative alle metriche: CloudWatch

Per creare questo criterio, esegui il put-scaling-policycomando utilizzando il file JSON come input, come illustrato nell'esempio seguente.

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

In caso di esito positivo, questo comando restituisce l'Amazon Resource Name (ARN) della policy.

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

Utilizzare le espressioni matematiche del parametro

La sezione seguente fornisce informazioni ed esempi di policy di scalabilità predittiva che mostrano come utilizzare la formula dei parametri nella policy.

Comprendere la matematica dei parametri

Se tutto ciò che vuoi fare è aggregare i dati metrici esistenti, la matematica metrica ti consente di risparmiare lo sforzo e il costo della pubblicazione di un'altra CloudWatch metrica su. CloudWatch Puoi utilizzare qualsiasi metrica AWS fornita e puoi anche utilizzare le metriche che definisci come parte delle tue applicazioni. Ad esempio, potresti calcolare il backlog della coda di Amazon SQS per istanza. È possibile eseguire questa operazione prendendo il numero approssimativo di messaggi disponibili per il recupero dalla coda e dividendo tale numero per la capacità operativa del gruppo con scalabilità automatica.

Per ulteriori informazioni, consulta Using metric Math nella Amazon CloudWatch User Guide.

Se scegli di utilizzare un'espressione matematica dei parametri nella policy di dimensionamento predittivo, considera i seguenti punti:

  • Le operazioni di matematica dei parametri utilizzano i punti dati della combinazione univoca di nome del parametro, spazio dei nomi e coppie di parametri chiave/valore delle dimensioni.

  • Puoi utilizzare qualsiasi operatore aritmetico (+ - */^), funzione statistica (come AVG o SUM) o altra funzione che supporti. CloudWatch

  • È possibile utilizzare i parametri e i risultati di altre espressioni matematiche nelle formule dell'espressione matematica.

  • Le espressioni matematiche dei parametri possono essere costituite da aggregazioni diverse. Tuttavia, per il risultato finale dell'aggregazione è una best practice utilizzare Average per il parametro di dimensionamento e Sum per il parametro del carico.

  • Qualsiasi espressione utilizzata in una specifica dei parametri deve restituire una singola serie temporale.

Per utilizzare i parametri matematici, procedi come segue:

  • Scegli una o più metriche. CloudWatch Quindi, crea l'espressione. Per ulteriori informazioni, consulta Using metric Math nella Amazon CloudWatch User Guide.

  • Verifica che l'espressione matematica della metrica sia valida utilizzando la CloudWatch console o l'API. CloudWatch GetMetricData

Esempio di policy di dimensionamento predittivo che combina parametri utilizzando la formula dei parametri (AWS CLI)

A volte, invece di specificare direttamente il parametro, potrebbe essere necessario prima elaborarne i dati in qualche modo. Ad esempio, potresti avere un'applicazione che estrae il lavoro da una coda Amazon SQS e potresti utilizzare il numero di elementi nella coda come policy di dimensionamento predittivo. Il numero di messaggi nella coda non definisce esclusivamente il numero di istanze necessarie. Pertanto, è necessario più lavoro per creare un parametro che si può utilizzare per calcolare il backlog per istanza. Per ulteriori informazioni, consulta Scalabilità basata su Amazon SQS.

Di seguito viene illustrato un esempio di policy di dimensionamento predittivo per questo scenario. Specifica i parametri di dimensionamento e del carico basati sul parametro ApproximateNumberOfMessagesVisible di Amazon SQS, ovvero il numero di messaggi disponibili per il recupero dalla coda. Utilizza anche il parametro GroupInServiceInstancesdi Dimensionamento automatico Amazon EC2 e un'espressione matematica per calcolare il backlog per istanza del parametro di dimensionamento.

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 } ] } } ] }

L'esempio restituisce l'ARN della policy.

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

Esempio di policy di dimensionamento predittivo da utilizzare in uno scenario di implementazione blu/verde (AWS CLI)

Un'espressione di ricerca fornisce un'opzione avanzata in cui è possibile eseguire query per un parametro da più gruppi Auto Scaling ed eseguire espressioni matematiche su di essi. Ciò è particolarmente utile per implementazioni blu/verde.

Nota

Un'implementazione blu/verde è un metodo di implementazione in cui si creano due gruppi Auto Scaling separati ma identici. Solo uno dei gruppi riceve il traffico di produzione. Il traffico utente viene inizialmente indirizzato al gruppo con scalabilità automatica precedente ("blu"), mentre un nuovo gruppo ("verde") viene utilizzato per testare e valutare una nuova versione di un'applicazione o di un servizio. Il traffico utente viene spostato sul gruppo con scalabilità automatica verde dopo che una nuova implementazione è stata testata e accettata. È quindi possibile eliminare il gruppo blu dopo che l'implementazione ha avuto esito positivo.

Quando vengono creati nuovi gruppi Auto Scaling nell'ambito di un'implementazione blu/verde, la cronologia dei parametri di ciascun gruppo può essere automaticamente inclusa nella policy di dimensionamento predittivo senza dover modificare le specifiche dei parametri. Per ulteriori informazioni, consulta Utilizzo delle politiche di scalabilità predittiva di EC2 Auto Scaling con implementazioni Blue/Green sul blog di Compute. AWS

Di seguito viene illustrato un esempio di policy che mostra come eseguire questa operazione. In questo esempio, la policy utilizza il parametro CPUUtilization emesso da Amazon EC2. Utilizza il parametro GroupInServiceInstancesdi Dimensionamento automatico Amazon EC2 e un'espressione matematica per calcolare il valore del parametro di dimensionamento per istanza. Definisce inoltre una specifica del parametro di capacità per ottenere il parametro GroupInServiceInstances.

L'espressione di ricerca trova CPUUtilization delle istanze in più gruppi Auto Scaling in base ai criteri di ricerca specificati. Se successivamente crei un nuovo gruppo con scalabilità automatica che soddisfi gli stessi criteri di ricerca, CPUUtilization delle istanze nel nuovo gruppo con scalabilità automatica viene automaticamente incluso.

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))" } ] } } ] }

L'esempio restituisce l'ARN della policy.

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

Considerazioni e risoluzione dei problemi

Se si verifica un problema durante l'utilizzo di parametri personalizzati, si consiglia di procedere come segue:

  • Se viene restituito un messaggio di errore, leggi il messaggio e risolvi il problema segnalato, se possibile.

  • Se si verifica un problema quando tenti di utilizzare un'espressione di ricerca in uno scenario di implementazione blu/verde, assicurati innanzitutto di capire come creare un'espressione di ricerca che cerca una corrispondenza parziale anziché una corrispondenza esatta. Inoltre, verifica che la query trovi solo i gruppi Auto Scaling che eseguono l'applicazione specifica. Per ulteriori informazioni sulla sintassi delle espressioni di ricerca, consulta la sintassi delle espressioni di CloudWatch ricerca nella Amazon CloudWatch User Guide.

  • Se non hai convalidato un'espressione in anticipo, il put-scaling-policycomando la convalida quando crei la tua politica di scalabilità. Tuttavia, esiste la possibilità che questo comando non riesca a identificare la causa esatta degli errori rilevati. Per risolvere i problemi, risolvete gli errori che ricevete in risposta a una richiesta al comando. get-metric-data È inoltre possibile risolvere i problemi relativi all'espressione dalla console. CloudWatch

  • Quando visualizzi i grafici Load (Carico) e Capacity (Capacità) nella console, il grafico Capacity (Capacità) potrebbe non mostrare alcun dato. Per garantire che i grafici dispongano di dati completi, assicurati di abilitare in modo coerente i parametri di gruppo per i gruppi Auto Scaling. Per ulteriori informazioni, consulta Abilitazione dei parametri del gruppo con scalabilità automatica (console).

  • La specifica del parametro della capacità è utile solo per le implementazioni blu/verdi quando si dispone di applicazioni eseguite in diversi gruppi Auto Scaling nel corso del loro ciclo di vita. Questo parametro personalizzato consente di fornire la capacità totale di più gruppi Auto Scaling. Il dimensionamento predittivo utilizza questo strumento per mostrare i dati cronologici nel grafico Capacità nella console.

  • Devi specificare false per ReturnData se MetricDataQueries specifica la funzione SEARCH() da sola senza una funzione matematica come SUM(). Questo perché le espressioni di ricerca possono restituire più serie temporali e una specifica del parametro basata su un'espressione può restituire solo una serie temporale.

  • Tutti i parametri coinvolti in un'espressione di ricerca devono avere la stessa risoluzione.

Limitazioni

  • Puoi eseguire query su punti dati con un massimo di 10 parametri in un'unica specifica del parametro.

  • Ai fini di questo limite, un'espressione conta come un parametro.