Política avançada de escalabilidade preditiva usando métricas personalizadas para o Amazon ECS
É possível usar métricas predefinidas ou personalizadas em uma política de escalabilidade preditiva. As métricas personalizadas são úteis quando métricas predefinidas (como CPU, memória etc.) não são suficientes para descrever suficientemente a carga da aplicação.
Ao criar uma política de escalabilidade preditiva com métricas personalizadas, você pode especificar outras métricas do CloudWatch fornecidas pela AWS. Como alternativa, você pode especificar métricas que define e publica. Você também pode usar a matemática de métricas para agregar e transformar métricas existentes em uma nova série temporal que a AWS não rastreia automaticamente. Um exemplo é combinar valores em seus dados calculando novas somas ou médias, o que é chamado de agregação. Os dados resultantes são chamados de um agregado.
A seção a seguir contém as práticas recomendados e exemplos de como sstruturar o JSON para a política.
Pré-requisitos
Para adicionar métricas personalizadas à política de escalação preditiva, você deve ter as permissões cloudwatch:GetMetricData
.
Para especificar suas próprias métricas em vez de usar as métricas que a AWS fornecer, você deve primeiro publicá-las no CloudWatch. Para mais informações, consulte Publishing custom metrics (Publicar métricas personalizadas) no Guia do usuário do Amazon CloudWatch.
Se publicar suas próprias métricas, certifique-se de publicar os pontos de dados com uma frequência mínima de cinco minutos. Os pontos de dados são recuperados do CloudWatch com base na duração do período necessário. Por exemplo, a especificação da métrica de carga usa métricas por hora para medir a carga em sua aplicação. O CloudWatch usa seus dados de métrica publicados para fornecer um único valor de dados para qualquer período de uma hora, agregando todos os pontos de dados com a data/hora que caem dentro de cada período de uma hora.
Práticas recomendadas
As seguintes práticas recomendadas podem ajudar no uso mais eficaz de métricas personalizadas:
-
A métrica mais útil para a especificação da métrica de carga é uma métrica que representa a carga em um grupo do Auto Scaling como um todo.
-
A métrica mais útil para escalar a especificação da métrica de escalabilidade é um throughput médio ou métrica de utilização por tarefa.
-
A utilização visada deve corresponder ao tipo de métrica de escalabilidade. Para uma configuração de política que usa utilização da CPU, isso é um percentual desejado, por exemplo.
-
Se essas recomendações não forem seguidas, provavelmente os valores futuros previstos da série temporal estarão incorretos. Para validar se os dados estão corretos, você pode visualizar os valores previstos no console. Como alternativa, depois de criar sua política de escalabilidade preditiva, inspecione os objetos
LoadForecast
retornados por uma chamada para a API GetPredictiveScalingForecast. -
Recomendamos enfaticamente configurar a escalabilidade preditiva no modo apenas previsão para que você possa avaliar a previsão antes que a escalabilidade preditiva comece a modificar ativamente a escala.
Limitações
-
Você pode consultar pontos de dados de até 10 métricas em uma especificação métrica.
-
Para os propósitos desse limite, uma expressão conta como uma métrica.
Solucionar problemas com uma política de escalabilidade preditiva com métricas personalizadas
Se ocorrer um problema ao usar métricas personalizadas, recomendamos fazer o seguinte:
-
Se você encontrar um problema em uma implantação azul/verde enquanto usa uma expressão de pesquisa, certifique-se de criar uma expressão de pesquisa que procure uma correspondência parcial, e não uma correspondência exata. Verifique também se a consulta está encontrando apenas grupos do Auto Scaling em execução na aplicação específica. Para mais informações sobre essa sintaxe de expressão de pesquisa, consulte CloudWatch search expression syntax (Sintaxe de expressão de pesquisa do CloudWatch) no Guia do usuário do Amazon CloudWatch.
-
O comando put-scaling-policy valida uma expressão quando você cria sua política de dimensionamento. No entanto, existe a possibilidade de que esse comando não identifique a causa exata dos erros detectados. Para corrigir os problemas, solucione os erros que você recebe em uma resposta de uma solicitação para o comando get-metric-data. Você também pode solucionar problemas da expressão no console do CloudWatch.
-
Você deve especificar
false
paraReturnData
seMetricDataQueries
especificar a função SEARCH() (BUSCAR) por conta própria sem uma função matemática como SUM() (SOMA). Isso ocorre porque as expressões de pesquisa podem retornar várias séries temporais, e uma especificação métrica baseado em uma expressão pode retornar apenas uma série temporal. -
Todas as métricas envolvidas em uma expressão de pesquisa devem ter a mesma resolução.
Exemplo de política de escalação preditiva que combina métricas por meio da matemática de métricas (AWS CLI)
Às vezes, ao invés de especificar a métrica diretamente, talvez seja necessário processar seus dados de alguma forma, primeiramente. Por exemplo, você pode ter uma aplicação que extrai o trabalho de uma fila do Amazon SQS e talvez queira usar o número de itens na fila como critério para escalabilidade preditiva. O número de mensagens na fila não define unicamente o número necessário de instâncias. Portanto, é necessário mais trabalho para criar uma métrica que possa ser usada para calcular a lista de pendências por instância.
Veja a seguir um exemplo de política de escalabilidade preditiva para esse cenário. Ele especifica métricas de escalabilidade e carga baseadas na métrica ApproximateNumberOfMessagesVisible
do Amazon SQS, que é o número de mensagens disponíveis para recuperação da fila. Ele também usa a métrica GroupInServiceInstances
do Amazon EC2 Auto Scaling e uma expressão matemática para calcular a lista de pendências por instância para a métrica de escalabilidade.
aws 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
}
]
}
}
]
}
O exemplo retorna o ARN da 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": []
}