AWS / CloudWatch — ETAPA 1 / Enviando logs de sua aplicação para o CloudWatch

Ola Gente

Gerenciar log de aplicações pode parecer simples no começo, 10 mil arquivos de log por dia, depois vai crescendo e acumulando uma quantidade de informação enorme e se torna trabalhoso gerenciar tantas informações.

Para nos ajudar com isto existe o CloudWatch.

Em nosso projeto de teste teremos o seguinte cenário:

  1. Uma aplicação rodando em PHP com sistema de login
  2. Iremos querer monitorar os logins (Sucesso/Falhas)
  3. Iremos agrupar todas estas informações no CloudWatch
  4. Após isto criaremos métricas que irao nos mostrar, em forma de gráfico, a quantidade de sucessos/falhas por hora
  5. Iremos criar um alarme para caso a quantidade de falhas ultrapasse 30 falhas em 1 hora seja disparado um aviso para nó
  6. Iremos conectar os logs do CloudWatch com o serviço ElasticSearch para permitir consultar os logs

Neste primeiro tutorial iremos aprender como postar informações de log no CloudWatch.

Antes de começarmos precisamos criar um Grupo e um Fluxo, dentro deste Fluxo iremos inserir todos os logs deste site.

Exemplo:

Grupo: MeusSites
Fluxo: site1.com.br

1. Acesse o painel da AWS e entre em https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#

2. Clique em “Logs

3. Clique em “Create Log Group

4. Preencha o nome do grupo como “TesteGrupo1” e confirme a ação

5. Clique no recém criado grupo

6. Clique em “Create Log Stream

7. Preencha com o nome “TesteFluxo1” e confirme a ação

Temos o Grupo/Fluxo Pronto! Iremos criar um usuário (E credenciais) para permitir que seja enviados logs através de nossa aplicação.

Este usuário precisa possuir as duas permissões abaixo:

- CloudWatch Logs -> DescribeLogStreams
- CloudWatch Logs -> putLogEvents

1. Acesse https://console.aws.amazon.com/iam/home?region=us-east-1

2. Clique em “Users

3. Clique em “Add User

4. Preencha o nome “TesteUsuario1

5. Selecione “Programmatic Access” (Isto ira gerar as credenciais de acesso a API)

6. Clique em “Next: Permissions

7. Não altere as permissões neste momento, apenas clique em “Next: Review

8. Clique em “Create User

9. Clique em “Show” na coluna “Secret Access Key” e ANOTE o “Access Key ID” e o “Secret Access Key

10. Clique em “Close

11. Clique no Usuário recém criado

12. Clique em “Add Inline Policy

13. Clique em “Json

14. Preencha com o json abaixo, este json concede as duas permissões que iremos utilizar:

15. Clique em “Review Policy

16. No campo “Name” preencha com “TesteUsuario1_Permissoes

17. Clique em “Create Policy

Ótimo, agora temos o usuário com permissão de enviar informações para o log.

Vamos para o PHP!

Aqui vou considerar que você já tem a SDK da AWS em sua aplicação, mas caso não tenha, inclua: https://github.com/aws/aws-sdk-php

Vamos entender como funciona o envio de logs para a AWS.

Os envios dos logs são feitos através do método putLogEvents, caso já tenha sido enviado algo, é necessário enviar o ID do último registro junto, para isto iremos utilizar o DescribeLogStreams

Primeiro iremos definir algumas variáveis com os dados:

Agora iremos iniciar o objeto responsável por acesso ao CloudWatch:

Esta próxima etapa é interessante, iremos consultar o FLUXO para checar o último ID gravado (Se tiver um ID gravado claro!)

E vamos a diversão, enviar informações ao log:

Note que todo json fica dentro da variável “logEvents -> message” e que a codificação é UTF-8!

PRONTO!

Segue script completo:

Veja em nosso cloudwatch:

No próximo tutorial iremos criar métricas com estes dados!

Por hoje é isto, queridos desenvolvedores! 👩‍💼

Até logo! 👋