Eu tenho uma instância do Amazon Elastic Compute Cloud (Amazon EC2) em um grupo do Auto Scaling do Amazon EC2 que não tem acesso à Internet. Quero que a instância do Amazon EC2 envie logs e métricas para o Amazon CloudWatch.
Resolução
Para configurar instâncias do EC2 em um grupo do EC2 Auto Scaling para enviar métricas e logs ao CloudWatch, execute as seguintes ações.
Instalar o agente do CloudWatch
Instale o atendente do CloudWatch em uma instância que tenha conectividade com a Internet. Ou use uma instância que já envia logs e métricas para o CloudWatch com o atendente do CloudWatch.
Observação: inclua o nome do grupo do Auto Scaling como uma dimensão na configuração do seu atendente do CloudWatch. O atendente recupera esse nome das tags da instância e de outros metadados, como ImageId, InstanceId e InstanceType.
Em seguida, verifique se o atendente do CloudWatch envia métricas e logs para o CloudWatch.
Criar um modelo de inicialização para o grupo do EC2 Auto Scaling
Crie um modelo de inicialização para o grupo do EC2 Auto Scaling.
Escolha Detalhes avançados. Em seguida, escolha Perfil de instância do IAM e Dados do usuário. Em Dados do usuário, insira um script para instalar e configurar o atendente do CloudWatch com base no JSON que você configurou. Em Perfil de instância do IAM, selecione o perfil do AWS Identity and Access Management (AWS IAM) que permite que instâncias do EC2 enviem métricas e logs para o CloudWatch. Para obter mais informações sobre essas configurações avançadas, consulte Configurações avançadas.
Exemplo de script de dados do usuário em uma instância:
#!/bin/bashcd /tmp
wget https://s3.REGION.amazonaws.com/amazoncloudwatch-agent-REGION/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm
rpm -U ./amazon-cloudwatch-agent.rpm
cat << EOF > /opt/aws/amazon-cloudwatch-agent/bin/config.json
{
"agent": {
"metrics_collection_interval": 60
},
"metrics": {
"append_dimensions": {
"InstanceId": "\${aws:InstanceId}"
},
"metrics_collected": {
"disk": {
"measurement": [
"disk_used_percent"
],
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
]
}
}
}
}
EOF
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s
Observação: substitua a REGION pela sua região da AWS. Para evitar caracteres especiais dentro do arquivo config.json, use barra invertida (\). O script configura o atendente do CloudWatch para monitorar a utilização da memória e do disco e, em seguida, inicia o atendente. Certifique-se de usar o link de download para a região do seu grupo do EC2 Auto Scaling.
Criar endpoints de VPC para as métricas e logs
Crie endpoints de interface de nuvem privada virtual (VPC) para métricas do CloudWatch e Amazon CloudWatch Logs à VPC que hospeda as sub-redes privadas. Em seguida, atualize suas políticas de endpoint com políticas personalizadas para permitir as ações necessárias do CloudWatch. Para obter mais informações sobre endpoints de serviço, consulte Endpoints e cotas do Amazon CloudWatch.
Observação: certifique-se de usar o endpoint que corresponde à região do seu grupo do EC2 Auto Scaling. Por exemplo, se seu grupo do EC2 Auto Scaling estiver na região eu-west-2, use monitoring.eu-west-2.amazonaws.com para métricas e logs.eu-west-2.amazonaws.com para logs.
Exemplo de política de endpoint da VPC do CloudWatch:
{ "Statement": [
{
"Sid": "PutOnly",
"Principal": "*",
"Action": [
"cloudwatch:PutMetricData"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
Exemplo de política de endpoint da VPC do CloudWatch Logs:
{ "Statement": [
{
"Sid": "PutOnly",
"Principal": "*",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
Em seguida, crie um endpoint de gateway de VPC para o Amazon Simple Storage Service (Amazon S3) na VPC que hospeda suas sub-redes privadas. Esse endpoint permite que instâncias nas sub-redes privadas baixem o pacote do atendente do CloudWatch.
Criar um grupo do EC2 Auto Scaling
Crie um grupo do EC2 Auto Scaling com sub-redes privadas ativadas a partir do modelo de inicialização que você criou.