Políticas avanzadas de escalado predictivo mediante métricas personalizadas para Amazon ECS
Puede utilizar métricas predefinidas o personalizadas en una política de escalado predictivo. Las métricas personalizadas son prácticas cuando las métricas predefinidas (como CPU, memoria, etc.) no son suficientes para describir adecuadamente la carga de la aplicación.
Al crear una política de escalado predictivo con métricas personalizadas, puede especificar otras métricas de CloudWatch que proporciona AWS. Si lo desea, también puede especificar las métricas que defina y publique usted. También puede usar las matemáticas métricas para agregar y transformar las métricas existentes en una nueva serie temporal que AWS no realice un seguimiento automático. Por ejemplo, cuando combina valores en los datos al calcular nuevas sumas o promedios, se denomina agregación. Los datos obtenidos se denominan aggregate (agrupación).
En la siguiente sección se encuentran las mejores prácticas y ejemplos de cómo construir la estructura JSON para la política.
Requisitos previos
Para agregar métricas personalizadas en la política de escalado predictivo, debe tener permisos de cloudwatch:GetMetricData
.
Para especificar sus propias métricas en lugar de las métricas que proporciona AWS, debe, en primer lugar, publicar las métricas en CloudWatch. Para obtener más información, consulte Publicación de métricas personalizadas en la Guía del usuario de Amazon CloudWatch.
Si publica sus propias métricas, asegúrese de publicar los puntos de datos con una frecuencia mínima de cinco minutos. Los puntos de datos se recuperan de CloudWatch en función de la duración del periodo que necesita. Por ejemplo, la especificación de la métrica de carga utiliza métricas por horas que permiten medir la carga de su aplicación. CloudWatch utiliza sus datos métricos publicados para proporcionar un único valor de datos en cualquier periodo de una hora mediante la agrupación de todos los puntos de datos con marcas temporales que entran en cada periodo de una hora.
Prácticas recomendadas
Las siguientes prácticas recomendadas pueden ayudarlo a utilizar las métricas personalizadas de manera más eficaz:
-
La métrica más útil para la especificación de las métricas de carga es una métrica que representa la carga en un grupo de escalado automático en su conjunto.
-
La métrica más útil para el escalado por parte la especificación de la métrica de escalado es una métrica de rendimiento o uso promedio por tarea.
-
El uso objetivo debe coincidir con el tipo de métrica de escalado. Para configurar una política que emplee la utilización de la CPU, se trata de un porcentaje objetivo, por ejemplo.
-
Si no se siguen estas recomendaciones, es probable que los valores futuros pronosticados de la serie temporal sean incorrectos. Para validar que los datos son correctos, puede ver los valores pronosticados en la consola. Como alternativa, una vez creada la política de escalado predictivo, examine los objetos
LoadForecast
que se devuelven mediante una llamada a la API GetPredictiveScalingForecast. -
Se recomienda configurar el escalado predictivo en modo Solo pronóstico para poder evaluar el pronóstico antes de que el escalado predictivo comience a escalar de forma activa.
Limitaciones
-
Puede consultar puntos de datos de hasta 10 métricas en una especificación de métrica.
-
A efectos de este límite, una expresión cuenta como una métrica.
Solución de problemas de una política de escalado predictivo con métricas personalizadas
Si se produce un problema durante el uso de las métricas personalizadas, se recomienda seguir los siguientes pasos:
-
Si encuentra un problema en una implementación azul/verde al usar una expresión de búsqueda, asegúrese de haber creado una expresión de búsqueda que busque una coincidencia parcial y no una coincidencia exacta. También debe comprobar que en la consulta solo se busquen los grupos de escalado automático que se ejecutan en la aplicación específica. Para obtener más información sobre la sintaxis de expresiones de búsqueda, consulte Sintaxis de la expresión de búsqueda de CloudWatch en la Guía del usuario de Amazon CloudWatch.
-
El comando put-scaling-policy valida una expresión cuando crea la política de escalado. Sin embargo, existe la posibilidad de que este comando no identifique la causa exacta de los errores detectados. Para corregir esto, solucione los errores que recibe en la respuesta de una solicitud al comando get-metric-data. También puede solucionar problemas de la expresión desde la consola de CloudWatch.
-
Debe especificar
false
paraReturnData
siMetricDataQueries
especifica la función SEARCH() por sí sola sin una función matemática como SUM(). Esto se debe a que las expresiones de búsqueda podrían devolver varias series temporales, mientras que una especificación métrica basada en una expresión solo puede devolver una serie temporal. -
Todas las métricas que aparecen en una expresión de búsqueda deben tener la misma resolución.
Ejemplo de política de escalado predictivo que combina las métricas mediante el uso del cálculo de métricas (AWS CLI)
En ocasiones, en lugar de especificar la métrica directamente, es posible que tenga que procesar primero sus datos de alguna manera. Por ejemplo, puede tener una aplicación que extraiga trabajo de una cola de Amazon SQS y puede querer utilizar el número de elementos en la cola como criterio para realizar un escalado predictivo. El número de mensajes en la cola no define exclusivamente el número de instancias que necesita. Por lo tanto, es necesario trabajar más para crear una métrica que pueda utilizarse para calcular las tareas pendientes por instancia.
A continuación se presenta un ejemplo de política de escalado predictivo para este caso. Especifica las métricas de escalado y carga que dependen de la métrica ApproximateNumberOfMessagesVisible
de Amazon SQS, es decir, el número de mensajes disponibles para recuperar de la cola. Asimismo, utiliza la métrica GroupInServiceInstances
de Amazon EC2 Auto Scaling y una expresión matemática que permite calcular las tareas pendientes por instancia para la métrica de escalado.
aws application-autoscaling put-scaling-policy --policy-name my-sqs-custom-metrics-policy
\
--policy-type PredictiveScaling \
--predictive-scaling-configuration file://config.json
--service-namespace ecs \
--resource-id service/MyCluster/test \
"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
}
]
}
}
]
}
En el ejemplo se devuelve el ARN de la política.
{
"PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:2f4f5048-d8a8-4d14-b13a-d1905620f345:autoScalingGroupName/my-asg:policyName/my-sqs-custom-metrics-policy",
"Alarms": []
}