Ir para o conteúdo

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. Entre elas: a stack ELK, New Rellic, e muitas 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. O objetivo é 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. Isso porque passamos por situações onde precisamos realizar a auditoria para entender porque algum evento ocorreu, monitorar o sistema para identificar ou prevenir a ocorrência de sérios problemas, e principalmente, para encontrar pistas do motivo que 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, especialmente 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. Entre eles:

  • Tempo de busca | Por possuir múltiplas instâncias, qualquer uma delas pode ter realizado o processamento e gerado o erro. Dessa forma, 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. 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 instâncias das aplicações também podem ter uma infraestrutura híbrida. Esse cenário pode ocorrer devido a questões de custos ou em sistemas que estão com uma migração de hospedagem em andamento.

Logo, é 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 sejam 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. Entretanto, em um cenário misto com outros clouds ou on-premise, a resolução de problemas com tanta adversidade, pode se tornar complexa. 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. Entre eles podemos citar:

  • Armazenamento de logs | Armazenamento de logs e políticas de exclusão de dados antigos.
  • Facilidade de busca | O serviço oferece uma sintaxe e opções simples que viabilizam a 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.

Por que 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. Além disso, não é possível afirmar que o uso do Amazon Cloudwatch é mais indicado que as demais, pois vai depender diretamente do contexto do ambiente onde você atua. 

Sendo assim, o objetivo deste artigo é destacar situações e características que podem tornar o Cloudwatch uma boa opção para seu caso de uso. Veja:

  • 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 outro serviço cloud de gerenciamento de logs.
  • Infraestrutura Cloud | O Amazon Cloudwatch é um serviço auto gerenciado pela AWS. Ou seja, você não precisa se preocupar com infraestrutura e manutenção, pois sua única função é enviar os logs e a AWS cuida do restante. Existem situações em que os clientes não disponibilizam de uma infraestrutura local que possibilita você abrigar alguns stacks locais de gerenciamento de log. Portanto, 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. Elas podem exigir uma quantidade considerável de horas para configurar as ferramentas e proporcionar uma manutenção que garanta o 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ável 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.

A imagem apresenta um diagrama exemplificando uma arquitetura simples de centralização de logs de uma infraestrutura híbrida.

Essa arquitetura pode ser realizada de outras maneiras e se tornar mais complexa, podendo ser necessário utilizar outras ferramentas em conjunto, conforme o volume de logs e outras questões envolvidas. 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 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 demonstrarei 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 credenciais 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-reload
sudo service docker restart

4- Criar container com logdriver aws logs

Para que o 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. Ele 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

Gerenciamento de logs: como funciona

Gerenciamento de logs: por que usar e como escolher

As 5 ferramentas mais populares para gerenciamento de logs

O que é o Amazon CloudWatch?

Installing and running the CloudWatch agent on your servers

Cloudwatch Agent Manual Install


Outras publicações