Ajudar a melhorar esta página
Quer contribuir para este guia do usuário? Role até o final desta página e selecione Editar esta página no GitHub. Suas contribuições ajudarão a tornar nosso guia do usuário melhor para todos.
Habilitar coleta de métricas do grupo do Auto Scaling
Este tópico descreve como você pode habilitar a coleta de métricas de grupo do Auto Scaling usando o AWS Lambda
Você pode usar métricas de grupo do Auto Scaling para rastrear alterações em um grupo do Auto Scaling e definir alarmes nos valores limite. As métricas de grupo do Auto Scaling estão disponíveis no console do Auto Scaling ou no console do Amazon CloudWatch
Habilitando a coleta de métricas de grupo do Auto Scaling, você poderá monitorar a escalação de grupos de nós gerenciados. As métricas do grupo do Auto Scaling informam o tamanho mínimo, máximo e desejado de um grupo do Auto Scaling. Você pode criar um alarme se o número de nós em um grupo de nós ficar abaixo do tamanho mínimo, o que indicaria um grupo de nós não íntegro. O rastreamento do tamanho do grupo de nós também é útil para ajustar o número máximo para a capacidade do plano de dados não se esgote.
Quando você cria um grupo de nós gerenciados, o AWS CloudTrail envia um evento CreateNodegroup
para o Amazon EventBridgeCreateNodegroup
, você aciona uma função do Lambda para habilitar a coleta de métricas de grupo para o grupo do Auto Scaling associado ao grupo de nós gerenciados.
![Diagrama mostrando o grupo de nós gerenciados, o CloudTrail e o componente EventBridge](images/enable-asg-metrics.png)
Para habilitar coleta de métricas do grupo do Auto Scaling
-
Crie um perfil do IAM para o Lambda.
LAMBDA_ROLE=$(aws iam create-role \ --role-name lambda-asg-enable-metrics \ --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}' \ --output text \ --query 'Role.Arn') echo $LAMBDA_ROLE
-
Crie uma política que permita descrever os grupos de nós do Amazon EKS e habilitar a coleta de métricas de grupo do Auto Scaling.
cat > /tmp/lambda-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks:DescribeNodegroup", "autoscaling:EnableMetricsCollection" ], "Resource": [ "*" ] } ] } EOF LAMBDA_POLICY_ARN=$(aws iam create-policy \ --policy-name lambda-asg-enable-metrics-policy \ --policy-document file:///tmp/lambda-policy.json \ --output text \ --query 'Policy.Arn') echo $LAMBDA_POLICY_ARN
-
Anexe a política ao perfil do IAM para o Lambda.
aws iam attach-role-policy \ --policy-arn $LAMBDA_POLICY_ARN \ --role-name lambda-asg-enable-metrics
-
Adicione a política gerenciada do
AWSLambdaBasicExecutionRole
, que tem as permissões necessárias para a função gravar logs no CloudWatch Logs.aws iam attach-role-policy \ --role-name lambda-asg-enable-metrics \ --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
-
Crie o código do Lambda.
cat > /tmp/lambda-handler.py <<EOF import json import boto3 import time import logging eks = boto3.client('eks') autoscaling = boto3.client('autoscaling') logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): ASG_METRICS_COLLLECTION_TAG_NAME = "ASG_METRICS_COLLLECTION_ENABLED" initial_retry_delay = 10 attempts = 0 #print(event) if not event["detail"]["eventName"] == "CreateNodegroup": print("invalid event.") return -1 clusterName = event["detail"]["requestParameters"]["name"] nodegroupName = event["detail"]["requestParameters"]["nodegroupName"] try: metricsCollectionEnabled = event["detail"]["requestParameters"]["tags"][ASG_METRICS_COLLLECTION_TAG_NAME] except KeyError: print(ASG_METRICS_COLLLECTION_TAG_NAME, "tag not found.") return # Check if metrics collection is enabled in tags if metricsCollectionEnabled.lower() != "true": print("Metrics collection is not enabled in nodegroup tags.") return # Get the name of the associated autoscaling group print("Getting the autoscaling group name for nodegroup=", nodegroupName, ", cluster=", clusterName ) for i in range(0,10): try: autoScalingGroup = eks.describe_nodegroup(clusterName=clusterName,nodegroupName=nodegroupName)["nodegroup"]["resources"]["autoScalingGroups"][0]["name"] except: attempts += 1 print("Failed to obtain the associated autoscaling group for nodegroup", nodegroupName, "Retrying in", initial_retry_delay*attempts, "seconds.") time.sleep(initial_retry_delay*attempts) else: break print("Enabling metrics collection on autoscaling group ", autoScalingGroup) # Enable metrics collection in the autoscaling group try: enableMetricsCollection = autoscaling.enable_metrics_collection(AutoScalingGroupName=autoScalingGroup,Granularity="1Minute") except: print("Unable to enable metrics collection on nodegroup=",nodegroup) print("Enabled metrics collection on nodegroup", nodegroupName) EOF
-
Crie um pacote de implantação.
cd /tmp zip function.zip lambda-handler.py
-
Crie uma função do Lambda.
LAMBDA_ARN=$(aws lambda create-function --function-name asg-enable-metrics-collection \ --zip-file fileb://function.zip --handler lambda-handler.lambda_handler \ --runtime python3.9 \ --timeout 600 \ --role $LAMBDA_ROLE \ --output text \ --query 'FunctionArn') echo $LAMBDA_ARN
-
Crie uma regra de EventBridge.
RULE_ARN=$(aws events put-rule --name CreateNodegroupRuleToLambda \ --event-pattern "{\"source\":[\"aws.eks\"],\"detail-type\":[\"AWS API Call via CloudTrail\"],\"detail\":{\"eventName\":[\"CreateNodegroup\"],\"eventSource\":[\"eks.amazonaws.com\"]}}" \ --output text \ --query 'RuleArn') echo $RULE_ARN
-
Adicione a função do Lambda como destino.
aws events put-targets --rule CreateNodegroupRuleToLambda \ --targets "Id"="1","Arn"="$LAMBDA_ARN"
-
Adicione uma política que permita que o EventBridge invoque a função do Lambda.
aws lambda add-permission \ --function-name asg-enable-metrics-collection \ --statement-id CreateNodegroupRuleToLambda \ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn $RULE_ARN
A função do Lambda permite a coleta de métricas de grupo do Auto Scaling para qualquer grupo de nós gerenciados que você marque com ASG_METRICS_COLLLECTION_ENABLED
definido como TRUE
. Para confirmar se a coleta de métricas do grupo do Auto Scaling está habilitada, navegue até o grupo do Auto Scaling associado no console do Amazon EC2. Na guia Monitoring (Monitoramento), você deve ver que a caixa de seleção Enable (Habilitar) está ativada.