Instalar e configurar o CloudWatch Agent em uma instância EC2 Linux

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!

Bruno Veiga

Bruno Veiga

Arquiteto Cloud e Arquiteto de Soluções. Me dedicando em compartilhar conhecimento e ajudar empresas a encontrar as melhores soluções tecnológicas para os problemas do negócio com agilidade, segurança, equipes alinhadas e dentro do orçamento.