Como monitorar seu APP Rails

Hoje vamos falar de um tema muito interessante quando precisamos lidar com a verificação da saúde do nosso ambiente de produção: a instrumentação.

Antes de começar a falar sobre instrumentação, queremos dizer que esse post está seguindo a linha de uma palestra excelente apresentada pelo André Luis na Ruby Conf 2017.

 

O que vamos aprender?

  • O que é instrumentação e porque ela é importante
  • Como usar o ActiveSupport::TaggedLogging
  • Como usar o New Relic
  • Como usar o Rollbar

 

Ferramentas

  • Rails 5.1.4
  • Tagged Logging (nativo do Rails)
  • gem newrelic_rpm
  • gem rollbar

 

O que é instrumentação?

Instrumentar é um termo médico usado para definir a ajuda que é prestada a um cirurgião durante uma operação, onde os instrumentos são passados para ele. Pra gente, é algo parecido, é a aplicação de ferramentas que nos apoiem na verificação da saúde da nossa aplicação (para verificar os erros em produção, consumo de memória e etc).

 

O que faremos?

Neste post, nós vamos criar um app que será utilizado por uma empresa de locação de carros. Após a criação do app, vamos ver a implementação de cada uma das ferramentas que utilizaremos.

Então, vamos ao app.

 

Construindo o App para Locação de Carros

1. Primeiro vamos criar nosso app:

2. Entrar no diretório do app:

3. Inserir a gem do Devise no Gemfile:

4. Instalar as gems com o Bundle:

5. Instalar o Devise com o comando:

6. Agora vamos gerar o model User pelo Devise com o comando:

7. Criaremos dois scaffolds, um para cadastrarmos os carros e outro para criarmos o aluguel. Para isso, executaremos os comandos:

8. Agora vamos executar as migrations:

9. Precisamos atualizar a partial com o formulário de aluguel para exibir um select box para Usuários e Carros. A nossa partial ficará desse jeito (app/views/rentals/_form.html.erb):

10. Vamos adicionar um filtro no ApplicationController para verificar a autenticação do usuário. Ele ficará desse jeito: (app/controllers/application_controller.rb):

11. Agora, só pra facilitar a nossa navegabilidade quando quisermos testar o app, vamos adicionar um pequeno menu no topo do app. Para isso, vamos alterar o body do layout do nosso app, que ficará assim (app/views/layouts/application.html.erb):

12. Por último, vamos configurar a nossa rota raiz para a lista de alugueis feitos. Então, nosso arquivos de rotas ficará desse jeito (config/routes.rb):

 

Utilizando as ferramentas o/

Agora vamos começar a utilizar as ferramentas de instrumentação. Passaremos por cada uma explicando como implementar.

 

A. Tagged Logging

O Tagged Logging é um recurso nativo do Rails e é fornecido através do ActiveSupport.  O que ele faz é identificar trechos do log com Tags definidas por nós.

Como exemplo, vamos inserir um carro no nosso app via interface. Agora daremos um start no servidor e depois vamos clicar item “Cars” no menu, clicar em “New Card” página que foi carrega e criar um novo com as seguintes informações:

  • Name: Palio 1.0
  • Manufacturer: Fiat
  • Year: 2016
  • Additional information: Awesome car with Power Steering, Air Conditioning and and much more

Se formos verificar os logs, temos uma parte que trata especificamente da operação de inserção do banco, que é:

Agora vamos imaginar o trabalho necessário pra identificar este INSERT no meio de dezenas de outras informações inseridas no log.

É nessa parte que o Tagged Logging pode ser colocado em ação. Com ele nós conseguimos adicionar uma Tag de identificação para este trecho específico dos logs. Então, vamos lá.

1. Primeiro, vamos atualizar a nossa action create que deverá ficar assim (app/controllers/cars_controller.rb):

Neste trecho de código, nós utilizamos o recurso logger.tagged que vai utilizar o ActiveSupport::TaggedLogging para adicionar uma tag em algum trecho do nosso log.

Como nós queríamos adicionar no momento da criação do Carro, eu coloquei este trecho dentro um bloco que do logger.tagged. Ou seja, todas as operações que forem feitas dentro deste bloco terão a tags “Add CAR”. Utilizei também logger.info para acrescentar ao log uma mensagem informando que o objeto foi criado e que estava sendo salvo.

2. Agora vamos tentar adicionar mais um carro via interface. Adicionei com um as seguintes informações:

  • Name: Gol G5
  • Manufacturer: Volkswagen
  • Year: 2017
  • Additional information: Nice car!

3. Vamos procurar agora nos logs o trecho que exibe a inserção. Este é o trecho que foi gerado no meu console: ( procure também no seu : ] )

4. Além dessa inserção “manual” de tags, também podemos configurar o ambiente para exibir tags utilizando atributos do request. Por exemplo, vamos adicionar o a seguinte linha no nosso arquivo de configuração de desenvolvimento (config/environments/development.rb):

Este log_tags recebe uma lista com todos os atributos da variável request do Rails que queremos adicionar na tag. Nós poderíamos, por exemplo, ter adicionado também o atributo subdomain do request que ele também seria apresentado nas tags caso exista.

5. Vamos reiniciar o servidor e excluir o carro que criamos anteriormente.

6. Se voltarmos nos logs, perceberemos que a parte que diz respeito a exclusão ficou desse jeito:

 

Como vimos, usando o Tagged Logging, podemos tornar a leitura de alguns trechos do log rastreáveis de uma maneira fácil.

 

B. Rollbar

O Rollbar é uma ferramenta que nos permite enviar os logs para um dashboard online para análises futuras. Para isso, precisamos fazer um cadastro no Rollbar, instalar a gem e depois adicionar os trechos que código com o que queremos enviar pro dashboard.

Lembrando que o Rollbar não é uma ferramenta totalmente grátis. A partir de uma quantidade de envio de logs e dependendo do tempo que eles ficarão armazenados, alguma quantia pode passar a ser cobrada. Mas para o nosso caso, a versão grátis está excelente.

Então bora!

 

1. Primeiro é necessário fazermos o cadastro no Rollbar pelo link https://rollbar.com

2. Após criar a conta, vamos criar um projeto com o nome “Rent Cars” e escolher como backend “Rails”

3. Feito isso, vamos seguir alguns passos que também estão na própria página do Rollbar.

4. Primeiro, vamos adicionar a gem do Rollbar ao nosso Gemfile

5. Agora vamos instalar a gem com o comando:

6. Instalada a gem, agora vamos gerar as configs do Rollbar:

O token to Rollbar pode ser obtido no menu Project Access Token nas configurações do projeto. Nesta página há 4 tokens. Para enviar as informações a partir do nosso servidor, precisaremos usar o token post_server_item. Este token que colocaremos no lugar de <seu_token_do_rollbar>.

Ao executar este comando, será criado um arquivo de inicializaçao do Rollbar.

7. Agora vamos adicionar o Rollbar em alguns trechos do nosso código para podermos ver o resultado no dashboard.

8. Primeiro, vamos criar uma notificação para nos informar quando um aluguel der erro na hora de salvar. Então, em nosso controller de aluguéis, a nossa action create ficará desse jeito (app/controllers/rentals_controller.rb):

9. Agora vamos restartar o nosso servidor e tentar criar um aluguel. Mas para que seja gerado um erro, vamos deixar o carro em branco e ver o que acontece.

10. Ao tentar criar o aluguel com o campo do carro em branco, percebemos que ele nos retorna um erro na página. Se formos até o nosso dashboard no Rollbar, a mensagem que nós colocamos lá também vai aparecer \o/.

Além de Rollbar.error, podemos chamar outras funções como info e warning (dentre outras) para que possamos classificar os logs no Dashboard para melhor organização.

11. Este é um print da tela do Rollbar. Se dermos uma olhada na área Top  5 active items, o item #4 é o que diz respeito ao log que inseri na action.

12. Se nós buscarmos os detalhes do log que criamos, veremos que ele traz bastante informação. Conseguimos até ver quem foi o usuário que executou a açao.

Para fazer isso, o Rollbar utiliza por padrão método current_user no controller onde ele está sendo chamado. É possível alterar o método que será chamado nas configurações do Rollbar no app.

 

O Rollbar é uma ferramentas que nos traz detalhes organizados de forma mais amigável, sem que precisemos ficar monitorando logs do servidor.

Além disso, não são exibidos os logs apenas do que configuramos. Este logs adicionais são customizações que fizemos. Mas por padrão, o Rollbar envia para o dashboard os erros que gerados durante a operação do app.

Ele também permite integrações com APIs externas como o Slack, por exemplo. Imagine como seria incrível ter notificações a respeito do seu negócio sendo lançados para o canal do seu time.

 

C. New Relic

O New Relic também é uma ferramenta online. Igualmente ao Rollbar, informações são envidas para um serviço externo à aplicação, porém o New Relic possui informações mais aprofundadas a respeito do servidor como um todo.

 

Para começar a usar o New Relic, vamos seguir os passos a seguir

1. Primeiro, vamos criar uma conta no New Relic no site https://newrelic.com/

2. Depois de criar a conta, vamos selecionar o agente New Relic APM

3. Nele existe a opção de configuração de um ambiente Ruby. Na seção Get you License Key nós vamos clicar em Reveal license key e guardar este número que foi gerado.

4. Agora vamos adicionar a gem no New Relic no nosso Gemfile

5. Instalar a gem

6. Vamos gerar o arquivo de configuração do New Relic do nosso app

Onde está o conteúdo <sua_license_key> nós vamos colocar a chave que nós guardamos no item 3. O atributo seguinte “Rent Cars” é o nome da nossa aplicação e aqui pode ter qualquer valor.

7. Vamos reiniciar o nosso server.

8. De volta à página do New Relic, na última seçao vamos clicar no botão Listen for my application.

9. Após isso, na mesma página do New Relic, vamos na opção Tools no menu superior e clicar em Create custom Dashboard.

 

Ao criarmos um dashboard no New Relic e adicionamos uma novo gráfico ou tabela, perceberemos que ele possui uma profundidade maior de informações. Não apenas com informações sobre requisições client-server mas também informações como consumo de memória, VM Ruby etc.

Este é um exemplo do meu dashboard com um gráfico de memória do meu servidor

Nós vimos apenas uma parte do New Relic neste post. Ele possui diversos outros dados como Brower, acesso a URLS, sessões etc.

E assim como o Rollbar, o New Relic também pode gerar notificações no Slack e em diversas outras ferramentas, embora possua recursos mais avançamos para captação dos gatilhos de notificações.



12 formas de vencer o bloqueio criativo e escrever textos memoráveis (e 6 dicas extras)

Não perca nenhum conteúdo

Receba nosso resumo semanal com os novos posts, cursos, talks e vagas \o/



Mas, qual eu vou utilizar?

Existem dois pontos relevantes que devemos considerar para poder escolher uma solução para instrumentação: política interna da empresa e necessidade.

Se a sua empresa possui uma política de segurança bem fechada e não permite envio de informações do servidor para terceiros você não terá outra escolha senão usar o TaggedLogging.

Caso queira apenas monitorar as requisições do servidor e possuir um acesso mais fácil e legível para os seus logs, a simplicidade do Rollbar te atenderá muito bom.

Mas, se o seu foco por monitorar seu servidor e seu serviço como um todo, opte pelo New Relic. Nele além de poder customizar seu proprio dashboard, ele possui recursos avançados para definição de gatilhos de notificações para manter a equipe bem alerta tanto ao app quando à saúde do ambiente como um todo.

 

O que nós vimos aqui foi um exemplo básico para aplicarmos as ferramentas, mas elas podem ser usadas para soluções ainda maiores. Imagine você ter uma dessas técnicas monitorando uma API de pagamento do seu app, ou até mesmo monitorando processos de alto valor para o negócio.

 

Bem, galera, essa foi passagem bem rápida sobre estes recusos que nos permitem fazer uma ótima Instrumentação no nosso ambiente Rails.

 

Pra quem quiser ir mais a fundo, segue os readmes das gems do Rollbar e do New Relic e o link do Github do codigo do nosso app.

 

E é claro que não pode faltar o link do vídeo do André Luis que inspirou este post. Valeu, André!! =D

https://www.eventials.com/locaweb/effective-rails-instrumentation-com-andre-luis

 

Finalizamos por aqui, galera. Quem tiver dúvidas, à vontade para me contactar! : )

 


Você é novo por aqui?

Primeira vez no OneBitCode? Curtiu esse conteúdo?
O OneBitCode tem muito mais para você!

O OneBitCode trás conteúdos de qualidade e em português sobre programação com foco em Ruby on Rails e outras tecnologias como Angular, Ionic, React, desenvolvimento de Chatbots e etc.

Se você deseja aprender mais, de uma forma natural e dentro de uma comunidade ativa, visite nosso Facebook e nosso Twitter, veja os screencasts e talks no Youtube, alguns acontecimentos no Instagram, ouça os Podcasts e faça parte de nossa Newsletter.

Além disso, também estamos com alguns e-Books muito interessantes para quem deseja se aprimorar como programador e também como freelancer (os e-Books são gratuitos!):

Espero que curta nossos conteúdos e sempre que precisar de ajuda com os tutoriais, fala com a gente!
Seja por
Facebook ou e-mail, estamos aqui para você 🙂

Bem-vindo à família OneBitCode \o/

abril 2, 2018

2
Deixe um comentário

avatar
1 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
Leonardo ScorzaLucas Vieira Recent comment authors
  Subscribe  
newest oldest most voted
Notify of
Lucas Vieira
Visitante

Usamos esse no nosso sistema: https://instrumentalapp.com/

Não tem um track tão bom, mas para ver alguns números é bem interessante, por exemplo: uso de cpu, número de erros 5**, número queries, número de requests…

Leonardo Scorza

Opa legal essa ferramenta em Lucas 🙂

Feito com s2 por OneBitCode
%d blogueiros gostam disto: