Centralização de logs com Cloudwatch

Janderson Rafael da Silva
CWI Software
Published in
7 min readFeb 9, 2022

Quando atuamos na sustentação de aplicações é essencial que tenhamos uma infraestrutura que armazene logs e nos possibilite um acesso fácil e ágil para conseguirmos monitorar e rastrear eventuais problemas que possam surgir. Pensando principalmente em grandes contextos, onde possuímos diversas aplicações, existem ferramentas no mercado que podem nos ajudar a centralizar os logs facilitando o acesso, como por exemplo, a stack ELK, New Rellic, entre outras.

Em determinados projetos, além de poder existir múltiplas instâncias e servidores, é comum a existência de soluções híbridas de infraestrutura, onde existem algumas aplicações hospedadas em serviços clouds e outras em servidores on-premise, nesse cenário híbrido, também é importante que consigamos unificar e centralizar os logs, independente de onde a aplicação geradora dos logs está hospedada.

Nesse artigo quero apresentar o Amazon Cloudwatch como uma alternativa simples para centralizar logs e que pode atender diversos cenários envolvendo as mais diversas plataformas de hospedagem das aplicações.

O que são logs?

Logs são registros de dados relevantes ou registro de ocorrência de determinados eventos , ao qual são armazenados em linhas dentro de arquivos de texto, a fim de fornecer informações que auxiliem na auditoria e monitoramento de um sistema.

A importância de logs e sua centralização é facilmente identificada em estágios de sustentação de projetos, onde passamos por situações ao qual precisamos realizar a auditoria para entender porque algum evento ocorreu, monitorar o sistema a fim de identificar ou prevenir a ocorrência de sérios problemas, e principalmente para encontrar pistas do motivo ao qual levou ao acontecimento de um problema reportado, para que o mesmo não ocorra novamente.

Importância de centralizar logs

Para entender a importância de centralizar logs é necessário imaginar alguns cenários.É comum que aplicações possuam múltiplas instâncias, principalmente quando se trata de um sistema que precisa atender uma alta carga, pensando nisso se tivermos por exemplo 10 instâncias em 10 servidores diferentes e ocorrer algum problema, para encontrar pistas em logs enfrentaríamos uma série de problemas:

  • Tempo de busca: Por possuir múltiplas instâncias, qualquer uma das instâncias pode ter realizado o processamento e gerado o erro, sendo assim teríamos que acessar manualmente cada um dos servidores até localizar a instância correta.
  • Complexidade de busca: A busca de logs sem alguma ferramenta de centralização pode ser algo complexo, pois além de poder necessitar que o usuário precise de conhecimentos de conexões de máquina via terminal, também será necessário que o usuário conheça a estrutura de pastas do servidor, e por fim o usuário não teria mecanismos simples para trabalhar com os logs e localizar as palavras chaves ou trechos de logs que necessita.
  • Segurança: para acesso aos logs de cada instância provavelmente será necessário expor um acesso ao servidor para que cada desenvolvedor que precise resolver problemas consiga ter acesso.

Com a implementação de um centralizador de logs é possível resolver esses problemas além de habilitar uma série de outras possibilidades úteis ao monitoramento.

Logs on-premise e Logs Cloud Computing

Existem sistemas que além de possuir múltiplas instancias das aplicações também podem ocorrer de sua infraestrutura ser híbrida. Esse cenário híbrido pode ocorrer devido a questões de custos ou em sistemas que estão com uma migração de hospedagem em andamento, sendo assim é comum que certas aplicações que exigem alta disponibilidade sejam hospedadas em um ambiente Cloud e que aplicações mais secundárias sejam armazenadas em servidores on-premise, em cenários mais adversos ainda é possível que seja usadas múltiplas plataformas clouds.

Os serviços de cloud computing normalmente possuem ferramentas próprias de logs que fornecem uma boa gestão dos mesmos, porém quando em um cenário misto com outros clouds ou on-premise pode se tornar complexa a resolução de problemas com tanta adversidade, por isso é essencial pensar sobre a necessidade de centralização desses logs.

Amazon Cloudwatch Logs

O Amazon Cloudwatch é um serviço oferecido pela AWS que permite o monitoramento em tempo real das aplicações e ferramentas oferecidas pela mesma.

Dentro do Amazon CloudWatch existem uma série de serviços que abrangem a ideia de monitoramento e que oferecem uma série de opções que apoiam no gerenciamento e centralização de logs, dentre eles podemos citar:

  • Armazenamento de logs: Armazenamento de logs e politicas de exclusão de dados antigos.
  • Facilidade de busca: O serviço oferece uma sintaxe e opções simples que facilitam na localização de logs.
  • Custo: O serviço oferecido pela AWS cobra gradualmente conforme o uso e pode ser vantajoso caso não exista uma infraestrutura no cliente.
  • Métricas: Possibilidade de criação de métricas em cima de logs.
  • Gráficos: Montagem de painéis gráficos para visualizar métricas.
  • Alarmes: Criação de alarmes que são disparados com base em configurações em cima de métricas, que junto com outros serviços da AWS podem efetuar ações conforme esses alarmes são disparados.

Porque utilizar Amazon Cloudwatch?

Existem inúmeras ferramentas no mercado que poderiam auxiliar nesses cenários de infraestruturas híbridas e fazer a centralização dos logs, e não é possível dizer que o uso do Amazon Cloudwatch é mais indicado que as demais, pois vai depender diretamente do cenário do ambiente onde você atua, sendo assim o objetivo desse artigo é destacar situações e características que podem tornar o Cloudwatch uma boa opção para seu caso de uso:

  • Familiaridade com AWS: Se o seu projeto já possui conta ou principalmente já utiliza de serviços de hospedagem da plataforma da AWS, pode ser mais prático do que buscar outra serviço cloud de gerenciamento de logs.
  • Infraestrutura Cloud: O Amazon Cloudwatch é um serviço autogerenciado pela AWS, ou seja você não precisa se preocupar com infraestrutura e manutenção, pois sua unica função é enviar os logs e a AWS cuida do restante. Existem situações em que clientes não disponibilizam de uma infraestrutura local que possibilidade você abrigar algumas stacks locais de gerenciamento de log, então pode ser interessante essa infraestrutura na nuvem.
  • Facilidade de configuração: Algumas ferramentas de mercado como a stack elk necessitam de uma infraestrutura local por não serem na nuvem, e podem exigir uma quantidade considerável de horas para configurar as ferramentas e para dar manutenção para garantir seu funcionamento.
  • Segurança: O acesso ao seu log pode ser realizado de forma segura de qualquer local, pois é protegido por um sistema de permissionamento customizáveis para cada usuário.
  • Facilidade de busca: A AWS e o Cloudwatch fornecem documentações e sintaxes claras que permitem que usuários consigam facilmente consultar logs sem grandes conhecimentos técnicos.

Tendo o conhecimento dessas características é possível ter um embasamento que apoie na decisão de usar ou não o Amazon Cloudwatch.

Arquitetura para envio de logs

Segue abaixo um diagrama exemplificando uma arquitetura simples de centralização de logs de uma infraestrutura híbrida.

Essa arquitetura pode ser realizada de outras maneiras se tornar mais complexa e ser necessário outras ferramentas em conjunto dependendo do volume de logs e outras questões envolvidas, mas nesse exemplo existem quatro componentes relacionados:

  • Aplicação cloud: Esse componente representa alguma aplicação hospedada em alguma plataforma cloud que deseja enviar seus logs para Cloudwatch.
  • On-premise: Representa aplicações em servidores locais que podem enviar seus logs para o Cloudwatch.
  • Cloudwatch Agent: A maneira como a AWS orienta para realizar o envio dos logs dos servidores é através da utilização de um agente que é instalado junto ao servidor que hospeda a aplicação e que tem a função de capturar e enviar os logs para o Cloudwatch.
  • Usuário: Pessoa que deseja acessar os logs.

Implementação de arquitetura simples com docker

O docker é uma tecnologia de conteinerização mundialmente utilizada que possibilita a implementação de ambientes isolados.

Além do uso do Amazon Cloudwatch Agent para enviar os logs de servidores, o docker possui uma funcionalidade simples de envio direto para o cloudwatch através da configuração do seu log driver, ao qual demostrarei abaixo:

1- Criar conta AWS

Primeiramente para usar o Amazon Cloudwatch é necessário criar uma conta na AWS.

2- Criar usuário IAM.

É necessário criar um usuário na AWS que possua as permissões logs:CreateLogStream e logs:PutLogEvents. Após configurado deve ser gerado credenciais para uso de API.

3- Configurar daemon docker

É preciso configurar as credenciais do usuário iam no serviço docker rodando na máquina. Segue orientação para sistema operacional Linux Ubuntu na versão 15.04 ou superior.

É necessário criar um arquivo de configuração.

sudo mkdir -p /etc/systemd/system/docker.service.d/sudo vi /etc/systemd/system/docker.service.d/aws-credentials.conf

Inserir credencias do usuário

[Service]
Environment="AWS_ACCESS_KEY_ID=<aws_access_key_id>"
Environment="AWS_SECRET_ACCESS_KEY=<aws_secret_access_key>"

Reiniciar Serviço docker

sudo systemctl daemon-reloadsudo service docker restart

4- Criar container com logdriver aws logs

Para que container envie logs para aws é necessário passar as seguintes configurações na criação:

  • log-driver: awslogs
  • log-opt awslogs-group : <nome-log-group>
  • log-opt awslogs-region : <regiao-log-group>

Exemplo de criação de container:

docker run — log-driver=awslogs — log-opt awslogs-region=us-east-1 — log-opt awslogs-group=<log-group-name> — name <nome_container> <nome_imagem>

Conclusão

Para escolher a melhor ferramenta de centralização de logs que atenda seu cenário é necessário entender suas necessidades e contexto, por isso é muito importante que antes de fazer a escolha você leve em consideração diversos pontos que podem impactar na sua decisão.

A ideia desse artigo não foi trazer uma solução universal e detalhada, mas sim demonstrar o Amazon Cloudwatch como uma alternativa rápida para implementar um conceito de logs centralizados e que pode ser facilmente implementado, podendo se encaixar muito rapidamente em seu cenário, removendo a necessidade de uma grande infraestrutura e manutenção.

Referências

--

--