Métricas customizadas no Amazon CloudWatch com o AWS Systems Manager

Olá, pessoal. Tudo bem?

Hoje vamos mudar um pouco o foco, falando de algo um pouco mais prático, para variar.

Por padrão, instâncias EC2 possuem o monitoramento de diversas métricas, como CPU, rede e I/O de disco, porém métricas importantes como memória comprometida e espaço utilizado em disco, por exemplo, não estão disponíveis por padrão. Para estes casos, a AWS oferece a possibilidade de utilizarmos métricas customizadas. Antigamente a extração destas métricas era efetuada através de scripts perl, mas hoje a AWS oferece e recomenda a utilização do CloudWatchAgent, que precisa ser instalado nas instâncias EC2, e que é o foco deste post.

Requisitos

A instalação e configuração do CloudWatchAgent através do Systems Manager é bastante simples, exigindo apenas que alguns passos sejam seguidos. Porém, antes de mais nada precisamos atender a alguns requisitos.

Agente do Systems Manager

Em primeiro lugar, é necessário termos o agente do próprio Systems Manager instalado para permitir a manutenção nas instâncias EC2. Na maioria das imagens, ele vem instalado por padrão, mas o procedimento para instalar e configurar este agente não está no escopo deste post, e a documentação pode ser acessada aqui.

Função do IAM

Para permitirmos que a EC2 seja configurada pelo SSM e envie métricas para o CloudWatch através do agente, devemos atribuir uma função à instância EC2 que possua no mínimo as duas políticas abaixo:

  • AmazonEC2RoleforSSM: Esta política permite a comunicação entre a EC2 e o Systems Manager;
  • CloudWatchAgentServerPolicy: Esta política permite o envio de métricas da instância EC2 para o CloudWatch. Quando configurada pelo SSM, o arquivo de configuração do agente do CloudWatch pode vir da Parameter Store, e caso o nome do parâmetro que armazena o conteúdo do arquivo comece com AmazonCloudWatch-*, ele já estará acessível através desta política. Veremos está política em ação a seguir.

Existe uma terceira política chamada CloudWatchAgentAdminPolicy, que deve ser aplicada a instância somente durante a primeira configuração do agente, pois ela permite que, ao finalizarmos a configuração, seja possível enviar esta configuração à Parameter Store. Por uma questão de segurança e consistência, em instâncias que irão consumir esta configuração, deverá ser utilizada a política CloudWatchAgentServerPolicy citada acima, pois ela tem permissão somente para leitura.

Vale citar que as políticas citadas são gerenciadas pela própria AWS e foram criadas para facilitar a configuração. Contudo, nada impede de criarmos versões customizadas das mesmas.

Abaixo, faremos um exemplo de configuração do agente em duas instância EC2 Linux, uma para demostrar a criação da configuração, e a outra para a aplicação da configuração. Para cada operação utilizaremos uma das funções abaixo:

  • CloudWatchAgentAdminRole: Estarão anexadas as politícas AmazonEC2RoleforSSM e CloudWatchAgentAdminPolicy;
  • CloudWatchAgentServerRole: Estarão anexadas as politícas AmazonEC2RoleforSSM e CloudWatchAgentServerPolicy.

Importante: Apesar de estarmos fazendo um exemplo utilizando uma distribuição do Linux, as métricas customizadas podem ser extraídas do Windows também.

Instalação do CloudWatchAgent e criação da configuração

N primeiro passo, criaremos uma instância EC2 e anexaremos a função CloudWatchAgentAdminRole, para instalarmos o CloudWatchAgent e criarmos o arquivo de configuração.

EC2 para criação do arquivo de configuração

Com a EC2 criada e com a função CloudWatchAgentAdminRole anexada, devemos acessar o Systems Manager, e mandar executar o comando AWS-ConfigureAWSPackage.

Instalação do Cloud Watch Agent

Nos parâmetros de execução do comando, devemos informar que desejamos executar a ação Install do pacote AmazonCloudWatchAgent, selecionar as instancias desejadas e mandar executar.

Instalação do Cloud Watch Agent

Importante: Se a instância desejada não aparecer na lista, verifique se a funcão anexada a ela possui as políticas necessárias e se o agente do SSM está instalado e atualizado.

Após o final da instalação do agente, iremos criar a configuração que utilizaremos para extrair as métricas nas outras instâncias do Linux (A configuração é específica para cada plataforma – Linux/Windows). Para isto, devemos acessar a instância através de SSH, e iniciar o Wizard executando o comando:

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

O agente nos fará uma série de perguntas para adequar a configuração à nossa necessidade, e no final irá perguntar se gostaríamos de enviar para o Parameter Store.

CloudWatchAgent Config Wizard

Finalizada a configuração, podemos verificar a Parameter Store para confirmar que nossa configuração está lá.

CloudWatchAgent Config – Parameter Store

No próximo passo, iremos aplicar a configuração em uma segunda instância.

Aplicação da configuração gerada

Da mesma forma que criamos a instância EC2 para criar a configuração, agora criaremos uma segunda instância, mas anexando a função
CloudWatchAgentServerRole.

EC2 para aplicar o arquivo de configuração

O processo de instalação do CloudWatchAgent é igual ao demonstrado anteriormente, portanto iremos direto para a configuração.

Novamente no Systems Manager, agora executaremos o comando AmazonCloudWatch-ManagerAgent, selecionando a ação configure. 

Run Command – AmazonCloudWatch-ManageAgent

Para utilizarmos a configuração gerada anteriormente, devemos selecionar o source da configuração como SSM, e para o parâmetro Optional Configuration Location devemos informar o nome da configuração gerada, AmazonCloudWatch-linux.

Ao final, selecionamos a instância que será configurada, e mandamos executar o comando.

Run Command – AmazonCloudWatch-ManageAgent

Se a configuração foi efetuada corretamente, esperando alguns minutos aparecerá um novo namespace de métricas no CloudWatch chamado CWAgent (o namespace pode ser customizado no arquivo de configuração), contendo as métricas customizadas.

CloudWatch Metrics
CloudWatch Metrics – CWAgent
CloudWatch Metrics – Detail

Por hoje era isso, pessoal! Para acessar a documentação oficial da AWS sobre as métricas customizadas, basta clicar aqui.

Espero que tenham gostado. E para qualquer dúvida ou sugestão, deixem seus comentários.

Abraços e boa semana!

Postado em AWS

2 comentários sobre “Métricas customizadas no Amazon CloudWatch com o AWS Systems Manager

  1. Muito bom, a centralização das informações de monitoramento facilita muito o dia-a-dia, assim como a possibilidade de customização para cada workload.

    1. Muito obrigado pelo retorno, Diogo!

      Exatamente. Além de criarmos a possibilidade de sermos notificados e automatizar a solução de problemas baseados nestas métricas.
      Um grande abraço!

Deixe uma resposta