Configurações avançadas de política de escalabilidade preditiva usando métricas personalizadas - Amazon EC2 Auto Scaling

Configurações avançadas de política de escalabilidade preditiva usando métricas personalizadas

Em uma política de escalabilidade preditiva é possível usar métricas predefinidas ou personalizadas. Métricas personalizadas são úteis quando as métricas predefinidas (CPU, E/S da rede e contagem de solicitações do Application Load Balancer) não descrevem suficientemente a carga da aplicação.

Ao criar uma política de escalação preditiva com métricas personalizadas, você pode especificar outras métricas do CloudWatch fornecidas pela AWS ou especificar métricas que você mesmo 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. A combinação de valores em seus dados, por exemplo, calculando novas somas ou médias, é chamada 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áticas recomendadas

As seguintes práticas recomendadas podem ajudar no uso mais eficaz de métricas personalizadas:

  • Para a especificação da métrica de carga, a métrica mais útil é uma métrica que represente a carga em um grupo do Auto Scaling como um todo, independentemente da capacidade do grupo.

  • Para a especificação da métrica de escalabilidade, a métrica mais útil para escalar é throughput ou utilização média por métrica de instância.

  • A métrica de escalabilidade deve ser inversamente proporcional à capacidade. Ou seja, se o número de instâncias no grupo do Auto Scaling aumentar, a métrica de escalabilidade deve diminuir aproximadamente na mesma proporção. Para garantir que a escalabilidade preditiva se comporte conforme o esperado, a métrica de carga e a métrica de escalabilidade também devem se correlacionar fortemente entre si.

  • A utilização visada deve corresponder ao tipo de métrica de escalabilidade. Para uma configuração de política que use a utilização da CPU, essa é uma porcentagem visada. Para uma configuração de política que use throughput, como o número de solicitações ou mensagens, esse é o número visado de solicitações ou mensagens por instância durante qualquer intervalo de um minuto.

  • 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 do Amazon EC2 Auto Scaling. Como alternativa, depois de criar sua política de escalabilidade preditiva, inspecione os objetos LoadForecast e CapacityForecast retornados por uma chamada para a API GetPredictiveScalingForecast.

  • Recomendamos a configuração da escalabilidade preditiva no modo apenas previsão para avaliar a previsão antes que a escalabilidade preditiva comece a modificar ativamente a capacidade.

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. O Amazon EC2 Auto Scaling recupera os pontos de dados 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.

Estruture o JSON para métricas personalizadas

A seção a seguir contém exemplos de como configurar escalação preditiva para consultar dados do CloudWatch. Há dois métodos diferentes de configurar essa opção, e o método escolhido afeta qual será o formato usado para estruturar JSON para a política de escalação preditiva. Quando você usa matemática de métricas, o formato do JSON varia ainda mais com base na matemática de métrica que está sendo aplicada.

  1. Para criar uma política que obtenha dados diretamente de outras métricas do CloudWatch fornecidas pela AWS ou das métricas que você publica no CloudWatch, consulte Exemplo de política de escalação preditiva com métricas personalizadas de carga e de dimensionamento (AWS CLI).

  2. Para criar uma política que possa consultar várias métricas CloudWatch e usar expressões matemáticas para criar novas séries temporais baseadas nessas métricas, consulte Usar expressões de matemática métrica.

Exemplo de política de escalação preditiva com métricas personalizadas de carga e de dimensionamento (AWS CLI)

Para criar uma política de escalação preditiva com métricas personalizadas de carga e dimensionamento com a AWS CLI, armazene os argumentos para a --predictive-scaling-configuration em um arquivo JSON denominado config.json.

Você começa a adicionar métricas personalizadas substituindo os valores substituíveis no exemplo a seguir por suas métricas e sua meta de utilização.

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

Para obter mais informações, consulte MetricDataQuery na Amazon EC2 Auto Scaling API Reference (Referência de API do Amazon EC2 Auto Scaling).

nota

Veja a seguir alguns recursos adicionais que podem ajudar você a encontrar nomes de métricas, namespaces, dimensões e estatísticas para as métricas do CloudWatch:

  • Para mais informações sobre as métricas disponíveis para produtos da AWS, consulte Produtos da AWS que publicam métricas do CloudWatch no Guia do usuário do Amazon CloudWatch.

  • Para obter os valores exatos de nome da métrica, namespace e dimensões (se aplicável) para uma métrica do CloudWatch com a AWS CLI, consulte list-metrics.

Para criar essa política, execute o comando put-scaling-policy usando como entrada o arquivo JSON, como demonstrado no exemplo a seguir.

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

Se bem-sucedido, esse comando gerará o nome do recurso da Amazon (ARN) da política.

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

Usar expressões de matemática métrica

A seção a seguir fornece informações e exemplos de políticas de escalação preditiva que mostram como você pode usar a matemática de métricas em sua política.

Noções básicas de matemática métrica

Se tudo o que deseja fazer é agregar dados métricos existentes, a matemática métrica do CloudWatch poupa o esforço e o custo de publicar outra métrica no CloudWatch. Você pode usar qualquer métrica que a AWS fornece, e também pode usar métricas definidas como parte de suas aplicações. Por exemplo, talvez você queira calcular a lista de pendências da fila do Amazon SQS por instância. Você pode fazer isso usando o número aproximado de mensagens disponíveis para recuperação da fila e dividindo esse número pela capacidade de execução do grupo do Auto Scaling.

Para obter mais informações, consulte Usar matemática métrica no Guia do usuário do Amazon CloudWatch.

Se você optar por usar uma expressão matemática métrica em sua política de escalabilidade preditiva, considere os seguintes pontos:

  • As operações matemáticas métricas usam os pontos de dados da combinação exclusiva de nome da métrica, namespace e pares de métricas de chaves-valor da dimensão.

  • Você pode usar qualquer operador aritmético (+ - * / ^), função estatística (como AVG ou SUM) ou outra função compatível com o CloudWatch.

  • Você pode usar as métricas e os resultados de outras expressões matemáticas nas fórmulas da expressão matemática.

  • Suas expressões matemáticas métricas podem ser compostas de agregações diferentes. No entanto, uma prática recomendada para o resultado final da agregação é usar Average para a métrica de escalabilidade e Sum para a métrica de carga.

  • Qualquer expressão usada em uma especificação de métrica deve eventualmente retornar uma única série temporal.

Para usar matemática métrica, faça o seguinte:

  • Escolha uma ou mais métricas do CloudWatch. Em seguida, crie a expressão. Para obter mais informações, consulte Usar matemática métrica no Guia do usuário do Amazon CloudWatch.

  • Verifique se a expressão matemática métrica é válida usando o console do CloudWatch ou a API do CloudWatch GetMetricData.

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. Para mais informações, consulte Escalabilidade baseada no Amazon SQS.

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

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": [] }

Exemplo de política de escalação preditiva para usar em um cenário de implantação azul/verde (AWS CLI)

Uma expressão de pesquisa fornece uma opção avançada na qual você pode consultar para obter uma métrica de vários grupos do Auto Scaling e realizar expressões matemáticas neles. Isso é útil especialmente para implantações azul/verde.

nota

Uma implantação azul/verde é um método de implantação no qual você cria dois grupos do Auto Scaling separados, mas idênticos. Apenas um dos grupos recebe tráfego de produção. O tráfego do usuário é inicialmente direcionado para o grupo do Auto Scaling anterior (“azul”), enquanto um novo grupo (“verde”) é usado para testar e avaliar uma nova versão de uma aplicação ou serviço. O tráfego do usuário é deslocado para o grupo do Auto Scaling verde depois que uma nova implantação é testada e aceita. Em seguida, é possível excluir o grupo azul depois que a implantação for bem-sucedida.

Quando novos grupos do Auto Scaling são criados como parte de uma implantação azul/verde, o histórico de métricas de cada grupo pode ser incluído automaticamente na política de escalabilidade preditiva sem que você precise alterar suas especificações métricas. Para obter mais informações, consulte Using EC2 Auto Scaling predictive scaling policies with Blue/Green deployments (Como usar políticas de escalabilidade preditiva do EC2 Auto Scaling com implantações azul/verde) no AWS Compute Blog (Blog de computação).

O exemplo de política a seguir mostra como isso pode ser feito. Neste exemplo, a política usa a métrica CPUUtilization emitida pelo Amazon EC2. Ela também usa a métrica GroupInServiceInstances do Amazon EC2 Auto Scaling e uma expressão matemática para calcular o valor da métrica de escalabilidade por instância. Ela também especifica uma especificação de métrica de capacidade para obter a métrica GroupInServiceInstances.

A expressão de pesquisa encontra o CPUUtilization de instâncias em vários grupos do Auto Scaling com base nos critérios de pesquisa especificados. Se, posteriormente, você criar um novo grupo do Auto Scaling que corresponda aos mesmos critérios de pesquisa, o CPUUtilization das instâncias no novo grupo do Auto Scaling são incluídas automaticamente.

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

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-blue-green-predictive-scaling-policy", "Alarms": [] }

Considerações e solução de problemas

Se ocorrer um problema ao usar métricas personalizadas, recomendamos fazer o seguinte:

  • Se uma mensagem de erro for fornecida, leia a mensagem e resolva o problema que ela relata, se possível.

  • Se ocorrer um problema quando você estiver tentando usar uma expressão de pesquisa em um cenário de implantação azul/verde, primeiro certifique-se que você entende como criar uma expressão de pesquisa que procure uma correspondência parcial ao invés de uma correspondência exata. Além disso, confira se sua consulta localiza apenas os grupos do Auto Scaling que estão executando a 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.

  • Se você não validou uma expressão com antecedência, o comando put-scaling-policy a valida quando você cria sua política de escalabilidade. 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.

  • Quando você visualiza os gráficos de Carga e de Capacidade no console, o gráfico da Capacidade pode não mostrar nenhum dado. Para garantir que os gráficos tenham dados completos, certifique-se de habilitar consistentemente métricas de grupo para seus grupos do Auto Scaling. Para mais informações, consulte Ativar métricas do grupo do Auto Scaling (console).

  • A especificação da métrica de capacidade só é útil para implantações azul/verde quando você tem aplicações que são executadas em diferentes grupos do Auto Scaling ao longo de suas vidas úteis. Essa métrica personalizada permite que você forneça a capacidade total de vários grupos do Auto Scaling. A escalabilidade preditiva usa isso para mostrar dados históricos nos gráficos de Capacidade no console.

  • Você deve especificar false para ReturnData se MetricDataQueries 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.

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.