Objetivo
Instalar o CloudWatch Agent em uma instância EC2 Linux em uma VPC privada.
Método
Neste tipo de configuração normalmente utiliza-se o SSM (Systems Manager) para realizar a execução de comandos no sistema operacional, entretanto, não serão utilizados comandos remotos executados via SSM. A instalação será diretamente realizada via shell. A instância onde o agente será configurado não terá conectividade com a internet, fazendo-se necessário a criação de VPC Endpoints para que a instância se comunique com o SSM, com o CloudWatch e com o S3. Durante a configuração do CloudWatch Agent o arquivo de configuração gerado pelo Wizard de configuração será enviado para o SSM, desta forma, o mesmo arquivo de configuração poderia ser utilizado na configuração de outras instâncias EC2 futuramente.
A configuração do ClouWatch Agent irá enviar métricas para CloudWatch assim como o conteúdo do arquivo /var/logs/secure.
Será utilizada uma outra instância (ec2-jumpbox) com acesso à internet para servir como jumpbox e permitir o acesso via SSH à instância (ec2-cwa) onde o agente será efetivamente instalado e configurado.
Abaixo está o diagrama que ilustra o cenário proposto.
Navegação

I) Alterar definição DNS para VPC
Antes de executar a criação de um Interface Endpoint é necessário habilitar a opção DNS hostnames para a VPC.
Na console VPC → 1. VPC → 2. Actions → 3. Edit DNS hostnames
1. Enable → Save changes
II) Criação do VPC Endpoint para S3
Na console VPC → 1. Endpoints → 2. Create endpoint
1. Nome do Endpoint → 2. AWS Services → 3. com.amazonaws.<região>.s3 → 4. VPC → 5. Route Table → 6. Create endpoint
Com este Endpoint criado será possível instalar pacotes Linux armazenados em buckets S3. Este Endpoint será utilizado em breve para instalar o CloudWatch Agent.
III) Repita o passo A) para a criação do Endpoint para o SSM
Selecionar com.amazonaws.<região>.ssm
Selecionar a subnet e security group corretos.
IV) Repita o passo B) para a criação do Endpoint para o SSM Messages
Selecionar com.amazonaws.<região>.ssmmessages.
Selecionar a subnet e security group corretos.
V) Repita o passo B) para a criação do Endpoint para o CloudWatch
Selecionar com.amazonaws.<região>.logs
Selecionar a subnet e security group corretos.
VI) Repita o passo B) para a criação do Endpoint para o EC2Messages
Selecionar
com.amazonaws.<região>.ec2messages
Selecionar
a subnet e security group corretos.
VII) Repita o passo B) para a criação do Endpoint para o EC2
Selecionar com.amazonaws.<região>.ec2
Selecionar a subnet e security group corretos.
VIII) Repita o passo B) para a criação do Endpoint para o Monitoring
Selecionar com.amazonaws.<região>.monitoring
Selecionar a subnet e security group corretos.
Ao final da configuração teremos 7 Endpoints.
IX) Criar IAM Role
É necessário criar uma Role com as políticas apropriadas e que permitam a instância ec2-cwa interagir com o SSM e CloudWatch.
Na console IAM → 1. Roles → 2. Create role
1. AWS Services → 2. EC2 → 3. Next
1. CloudWatchAgentAdminPolicy → 2. CloudWatchAgentServerPolicy → 3. AmazonSSMManagedInstanceCore → 4. AmazonEC2RoleforSSM → 5. Next
1. Nome da Role → 2. Create role
X) Adicionar uma Inline Policy que permita ao CloudWatch Agent configurar a retenção correta dos logs no CloudWatch
Na console IAM → 1. Roles → 2. Selecione a Role que acabamos de criar
Em Permissions → 1. Add Permision → 2. Create inline policy
1. JSON → 2. Entrar com a definição da policy → 3. Review policy
1. Entrar com o nome da policy → 2. Create policy
XI) Fazer associação da Role a Instância ec2-cwa
Na console EC2 → 1. Instance → 2. Selecionar ec2-cwa → Actions → Security → Modify IAM role
1. Selecionar a Role → Update IAM role
XII) Adicionar regra no Security Group dos VPC Endpoints
Para liberar a comunicação nos Endpoints é preciso liberar a porta 443 no SG.
1. Selecione HTTP → 2. Entre com a origem → Save Rules
XIII) Neste ponto a instância ec2-cwa deveria estar sendo mostrada na console do SSM
Busque por Fleet Manger na console SSM
Alguns comando úteis para reiniciar o agente do SSM e verificar os logs.
sudo systemctl stop amazon-ssm-agent
sudo systemctl start amazon-ssm-agent
cat /var/log/amazon/ssm/amazon-ssm-agent.log
cat /var/log/amazon/ssm/errors.log
XIV) Acessar ec2-jumpbox via SSH usando o IP público da instância
Clique aqui para saber como estabelecer conexões SSH.

XV) Acessar a instância ec2-cwa via SSH

XVI) Instalar o CloudWatchAgent
Já na instância ec2-cwa passe para root usando sudo su –
1. Execute o comando de instalação → 2. Yes
yum install amazon-cloudwatch-agent
Obs: A porta 443 precisa estar liberada no SG do Endpoint do S3.
XVII) Iniciar o CloudWatchAgent.
No shell da intância ec2-cwa execute os seguintes comandos:
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a start
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status
XVIII) Iniciar o wizard de configuração do CloudWatchAgent
Observar que durante a configuração iremos definir que o conteúdo do arquivo /var/log/secure seja enviado para o CloudWatch.
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
Entre com as configurações desejadas para o agente.
Depois de concluída a configuração, um novo parâmetro deveria ter sido adicionado ao Parameter Store.
XIX) Buscar as configurações feitas pelo wizard
Executar o comando:
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c ssm:AmazonCloudWatch-linux
(opcional) – Buscar pelo arquivo local de configuração:
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json
Poder ocorrer um erro durante este passo.
Neste caso, crie o diretório e arquivo com os seguintes comandos:
mkdir -p /usr/share/collectd
touch /usr/share/collectd/types.db
Execute novamente o comando para buscar as configurações geradas pelo wizard.
Comando úteis para o CloudWath Agent:
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a start
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a stop
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status
XX) Verificar os logs e métricas
Neste ponto as métricas e logs já podem ser visualizadas no CloudWatch.
Na console do CloudWatch → 1. Log groups → 2. Secure
Será criado um log stream para cada instância EC2 onde o CloudWatchAgent foi configurado.
1. <instance_id>
1. Metrics → 2. All metrics → CWAgent
As métricas disponíveis irão depender da configuração feita no wizard na opção “Which default metrics config do you want?”
It’s done!