Você está na página 1de 44

CENTRO DE INFORMTICA

GRADUAO EM CINCIA DA COMPUTAO

NATANAEL SOUZA DOS SANTOS

Avaliao de ferramentas de monitoramento de excees e


eventos de logging para aplicaes java

MONOGRAFIA

Recife
2017
NATANAEL SOUZA DOS SANTOS

Avaliao de ferramentas de monitoramento de excees e


eventos de logging para aplicaes java

Trabalho de graduao apresentado ao pro-


grama de graduao em Cincia da Compu-
tao da Universidade Federal de Pernam-
buco, como parte dos requisitos parciais ne-
cessrios obteno do ttulo de Bacharel
em Cincia da Computao.

Orientador: Vinicius Garcia


Coorientador: Josino Rodrigues Neto

Recife
2017
Natanael Souza dos Santos
Avaliao de ferramentas de monitoramento de excees e eventos de logging para aplica-
es java/ Natanael Souza dos Santos. Recife, 2017-
43 p. : il. (algumas color.) ; 30 cm.

Orientador: Vinicius Garcia

Monografia CENTRO DE INFORMTICA


GRADUAO EM CINCIA DA COMPUTAO , 2017.
IMPORTANTE: ESSE APENAS UM TEXTO DE EXEMPLO DE FICHA CATALOGRFICA.
VOC DEVER SOLICITAR UMA FICHA CATALOGRFICA PARA SEU TRABALHO NA
BILBIOTECA DA SUA INSTITUIO (OU DEPARTAMENTO).
Natanael Souza dos Santos

Avaliao de ferramentas de monitoramento de excees e eventos de logging


para aplicaes java

IMPORTANTE: ESSE APENAS UM


TEXTO DE EXEMPLO DE FOLHA DE
APROVAO. VOC DEVER SOLICITAR
UMA FOLHA DE APROVAO PARA SEU
TRABALHO NA SECRETARIA DO SEU
CURSO (OU DEPARTAMENTO).

Trabalho aprovado. Recife, DATA DA APROVAO:

Vinicius Garcia
Orientador

Professor
Convidado 1

Professor
Convidado 2

Recife
2017
A minha me Severina Maria de Souza e meu Pai Jos Paulino dos Santos que
nunca deixaram de acreditar na minha capacidade, sem vocs eu no teria conseguido.
Agradecimentos

Sou grato a minha noiva Maria Ferreira, aquela que me deu o maior dos presen-
tes, minha filha Ivanete Natalie, pelo apoio e confiana na minha jornada.
Ao professores Vinicius Garcia, Leandro Marques e Josino Neto pela ajuda e
confiana que me ajudaram a finalizar esse arduo caminho.
Aos amigos da graduo, que me inspiraram e me ajudaram nessa jornada.
A todos que de alguma forma fizeram parte dessa experincia de se graduar
em Cincia da Computao no Centro de Informtica.
A todos vocs, muito obrigado.
All we have to decide is what to do with the
time that is given us. (J. R. R. Tolkien)
Resumo

Com o advento da computao em nuvem, os sistemas passaram a executar


totalmente nesses ambientes de produo, fora da infraestrutura de desenvolvimento,
impondo um limite ao desenvolvedor no controle da infraestrutura de produo. Esse
comportamento impulsionou o desenvolvimentos de ferramentas de monitoramento
de erros e logs para diversos ambientes e tecnologias de programao. Este trabalho
tem como objetivo apresentar essas ferramentas, denotando seus objetivos e apontar
as vantagens de uso das mesmas, alm fazer uma avaliao entre esses servios de
monitoramento de excees para linguagem de programao Java, executando suas
integraes e analisando alguns parmetros que influenciam a escolha e utilizao
desses servios pelos desenvolvedores a fim de facilitar a escolha e utilizao dessas
ferramentas.

Palavras chave: Logging, Exceptions, Java, Monitoring Tools


Abstract

With the advent of cloud computing, applications have been fully executed
in these production environments, outside the development infrastructure, Imposing
a limit to the developer in control of the production infrastructure. This behavior has
boosted the development of error and logs monitoring tools for various environments and
programming technologies. This academic work aims to present these tools, denoting
its goals and expose its advantages, in addition to making an appraisal of these error
monitoring tools for Java programming language, performing their integration and
analyzing some parameters that influence the choice and use of these services by
developers to facilitate the choice and use of these tools.

Keywords: Logging, Exceptions, Java, Monitoring Tools


Lista de ilustraes

Figura 1 Usando altitude como analogia, essa figura ilustra a estrutura em


Saas em vrios nveis de detalhes. . . . . . . . . . . . . . . . . . . . 14
Figura 2 Aba de overview da aplicao Airbrake . . . . . . . . . . . . . . . . 26
Figura 3 Aba de occurrences da aplicao Airbrake . . . . . . . . . . . . . . . 26
Figura 4 Dashboard da aplicao Raygun . . . . . . . . . . . . . . . . . . . . 29
Figura 5 Aba de environment da viso do erro RollbackException . . . . . . . 29
Figura 6 Aba de itens da aplicao Rollbar . . . . . . . . . . . . . . . . . . . 32
Figura 7 Aba de community solutions relacionada a um erro na aplicao Rollbar 32
Figura 8 Aba de issues da aplicao Rollbar . . . . . . . . . . . . . . . . . . . 34
Figura 9 Viso relacionada a um erro na aplicao Sentry . . . . . . . . . . . 35
Figura 10 Overops Workflow . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Figura 11 Aba de all events da aplicao Overops . . . . . . . . . . . . . . . . 37
Figura 12 Viso relacionada ao erro SQL Error na aplicao Overops . . . . . 38
Lista de tabelas

Tabela 1 Tabela I: Servios de Monitoramento de Erro . . . . . . . . . . . . . 18


Tabela 2 Resultados: Instalao . . . . . . . . . . . . . . . . . . . . . . . . . 39
Tabela 3 Resultados: Modificabilidade de Cdigo . . . . . . . . . . . . . . . . 39
Sumrio

1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2 Conceitos e Ferramentas . . . . . . . . . . . . . . . . . . . . . . . . 14
2.1 Software as a Service (Saas) . . . . . . . . . . . . . . . . . . . . . . 14
2.2 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.1 Localizar o bug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3 Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4 Monitoramento de exceo . . . . . . . . . . . . . . . . . . . . . . . 16
2.5 Benefcios de uma ferramenta de monitoramento de excees . 16
2.5.1 Clientes Felizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.5.2 Tempo dinheiro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.5.3 Servios de monitoramento de excees e eventos de logging avaliados 17
2.6 Consideraes do captulo . . . . . . . . . . . . . . . . . . . . . . . 19

3 Ambiente de avaliao . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.1 Detalhes do Ambiente . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.1.1 Cdigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.1.2 Dependencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2 Configuraes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2.1 Airbrake (AIRBRAKE, 2017) . . . . . . . . . . . . . . . . . . . . . . . 24
3.2.2 Raygun (RAYGUN, 2017) . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2.3 Rollbar (ROLLBAR, 2017) . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.4 Sentry (SENTRY, 2017) . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.2.5 Overops (KNOW. . . , 2017) . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

4 Concluso e trabalhos futuros . . . . . . . . . . . . . . . . . . . . . 41

Referncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
12

1 Introduo

O paradigma de computao em nuvem tem sido adotado amplamente para


desenvolver servios atravs da internet. Isso se deve s caractersticas tcnicas e
econmicas que o paradigma garante entregar, incluindo: elasticidade, flexibilidade,
esquema de servio on-demand, otimizao de recursos de hardware e software. Se
por um lado os benefcios so muitos, do outro h um aumento na complexidade
de infraestrutura. Esse aumento de complexidade criou uma demanda por servios
de monitoramento remoto, dentre eles: monitoramento de capacidade e recursos;
gerenciamento de datacenters; gerenciamento de SLA (do ingls, Acordo de nvel de
Servio), gerenciamento de billing, gerenciamento de performance e gerenciamento de
segurana (ACETO et al., 2013).
Essa mudana de Paradigma tambm teve reflexo nos ambientes de desenvolvi-
mento de software. Com a facilidade e barateamento proporcionada pelos ambientes
de computao em nuvem, desenvolvedores de software passaram a usar ambientes
remotos como ambiente de produo, resultando em um pouco de perda de controle
do ambiente de produo (CHARAN; RAO; SRINIVAS, 2011; ZHANG, 2013). Esse
comportamento, assim como no gerenciamento de nuvens, resultou na criao de
ferramentas que garantissem mais controle no gerenciamento de aplicaes remotas,
essas ferramentas so conhecidas como Application Performance Monitoring (APM),
responsveis por monitorar a execuo e disponibilidade de aplicaes em produ-
o atravs da internet. Algumas ferramentas APM que suportam a linguagem Java
so: New Relic, AppDynamics, Dynatrace e Pinpoint (AHMED et al., 2016). O tipo de
ferramenta de monitoramento em nuvem de aplicaes abordado neste trabalho o
monitoramento de excees ou eventos de log. Com esse servio possvel fazer o
monitoramento de logs ou erros de sistemas em produo em tempo real, e em alguns
casos at possvel checar o estado do programa, visualizando o cdigo do programa
e o estado da variveis no momento do lanamento do erro. Esse modelo de ferramenta
relativamente novo no mercado e sofre com a falta de contedo de nvel tcnico ou
acadmico. Motivado pela necessidade de explorar mais esse nicho, esse estudo tem
a inteno apresentar algumas ferramentas convencionais de monitoramento de erros
e fazer uma avaliao entre as suas principais caractersticas.
O objetivo deste trabalho apresentar de forma concisa o conceito de ferramen-
tas de monitoramento de exceo, apresentar algumas destas ferramentas e fazer uma
avaliao de cada uma delas, analisando o processo de configurao e integrao
destas ferramentas de acordo com a modificabilidade de cdigo e instalao, em um
ambiente de programao utilizando linguagem Java.
Captulo 1. Introduo 13

No captulo 2 discutiremos sobre os conceitos e ferramentas abordados nesse


trabalho. Nesse captulo discutido sobre os conceitos de Saas, debugging, logging,
monitoramento de excees e apresentao das ferramentas selecionadas para esse
trabalho. No captulo 3 exploraremos o ambiente de teste, as configuraes e depen-
dncias necessrias para fazer a integrao entre as ferramentas e o cdigo, alm de
avaliar cada ferramenta utilizada. No captulo 4 conclumos o trabalho e fazemos uma
classificao das ferramentas buscando relacionar cada uma com um tipo de projeto
especificado e discutiremos alguns desafios para trabalhos futuros.
14

2 Conceitos e Ferramentas

Este captulo responsvel por apresentar os conceitos que so requisitos para


o entendimento deste trabalho, e as ferramentas que so usadas durante as avaliaes.
Se o leitor dominar os conceitos descritos nessa sesso, no obrigatrio sua leitura,
no entanto pode ser til para reviso de literatura.

2.1 Software as a Service (Saas)

Servio de monitoramento de erros em aplicaes um Software as a Service


(SaaS), ou seja um servio oferecido via internet onde o fornecedor do software
disponibiliza uma estrutura completa e suficiente para dar suporte ao servio por um
preo correspondente quantidade de recursos utilizados(NAZIR, 2012).

O modelo de software as a service d a possibilidade de desdobramento


na utilizao dos servios, onde o cliente pode ceder o software locado
para uso de terceiros, aos quais iremos nome-los de usurios finais.
Portanto o cliente pode desenvolver diversas relaes de negcios
com usurios finais, podendo utilizar os meios de cobranas como:
assinatura mensal ou anual, volumes de servios pela utilizao de
software e servio disponibilizado gratuitamente (LIMA, 2012)

Figura 1 Usando altitude como analogia, essa figura ilustra a estrutura em Saas em vrios
nveis de detalhes.

Fonte: Armando Fox;David Patterson, 2012 p. 61.


Captulo 2. Conceitos e Ferramentas 15

O Saas est inserido no contexto da web, logo ele utiliza o padro cliente-
servidor para oferecer um servio distribudo, e faz uso de todos os protocolos e
tecnologias, no sendo necessrio instalao local. Uma aplicao SAAS WEB
um exemplo do padro arquitetural cliente-servidor, onde o software cliente atua na
interao com o usurio e faz requisies para o servidor, enquanto que o software no
servidor atua processamento dos dados e atendendo as requisies do cliente. (FOX;
PATTERSON, 2012)

2.2 Debugging

A definio popular descreve debugging como um processo metdico de encon-


trar e reparar uma quantidade de bugs ou defeitos em um programa de computador. Em
termos simplificados, quando o cdigo no faz o que era esperado pelo desenvolvedor,
se configura um bug, e consequentemente esse bug dever ser encontrado e corrigido.
O processo de debugging dividido em quatro etapas: localizar o bug; classificar o
bug; entender o bug; e por fim reparar o bug. (ADRAGNA, 2008)

2.2.1 Localizar o bug

Desenvolvedores inexperientes tendem a achar que localizar um bug uma


tarefa trivial, isso se deve por confiarem em saber o que o cdigo deveria fazer. Um
bug nasce da premissa de que algo pensado em ser correto, na verdade est errado.
Para ajudar nesse processo de localizar um bug, existem alguns mtodos padres
usados por desenvolvedores. Segundo (SPINELLIS, 2006), a estratgia bottom-up
dos mtodos mais eficientes, pois comea do sintoma e procura pela causa. Um
sintoma pode ser um acesso uma varivel no inicializada pelo programa ou at
mesmo um loop infinito. O debugger normalmente mostra uma captura do momento
em que o sintoma ocorreu, e atravs das chamadas de cdigo aps o momento do
sintoma possvel chegar na causa do erro. Alm dessa tcnica, possvel fazer o
debugging da aplicao usando o auxlio de algum IDLE, como o Eclipse, atravs da
funcionalidade de debugging interativo.

2.3 Logging

Logs so eventos que proporcionam uma viso de determinado estado em


um sistema de software e pode ser salvos em arquivos ou escritos em consoles.
Logs geralmente so compostos por mensagens curtas, e seu contedo pode variar
dependendo da aplicao ou sistema. Um sistema web pode gerar logs indicando quais
e quando pginas foram requisitadas, enquanto que um drive de impressora pode gerar
logs indicando que ocorreu algum problema ao conectar com a impressora (OLINER;
GANAPATHI; XU, 2011).
Captulo 2. Conceitos e Ferramentas 16

No ambiente de programao, logging uma prtica comumente usada para


salvar informaes pertinentes relacionadas execuo do software. Essa prtica
feita adicionando declaraes em trechos do cdigo que consistem em funes que
recebem parmetros como mensagens de texto explicando o ocorrido, variveis e o
nvel de verbosidade que indica o nvel de gravidade do log (Fatal, error, warning, debug,
info, etc) (FU1 et al., 2014).
O logging usado para facilitar o debugging de uma aplicao. Desenvolvedores
ainda fazem uso do logging usando o comando de print, seja para o console ou para o
disco. Se o programa de software falhar, o desenvolvedor pode filtrar por mensagens
relacionadas com o erro lanado. Se o desenvolvedor acreditar que o sistema de
software falhou porque houve uma queda de conexo com a internet, ele pode procurar
pela frase connection error e capturar informaes relacionadas com a execuo no
momento da falha (OLINER; GANAPATHI; XU, 2011).

2.4 Monitoramento de exceo

Monitorar uma exceo ou um evento de log o processo de capturar, reportar


e gerenciar dados de excees que ocorrem em software. O objetivo aumentar a
produtividade e qualidade do software, usando o monitoramento de excees possvel
checar em tempo real as excees que so lanadas pela aplicao e gerenciar as
mesmas para que a equipe de desenvolvimento conserte as mesmas. Quando uma
exceo ocorre, uma ferramenta de monitoramento de excees captura informaes
importantes como ambiente, sistema operacional, endereo remoto do ambiente de
produo e at o nmero de usurios afetados pelo erro. Tambm possvel visualizar
os grficos que marcam a frequncia de ocorrncias de excees, integrao com
servios de gerenciamento de software e comunicao. (JANK, 2009; WHAT. . . , 2017)

2.5 Benefcios de uma ferramenta de monitoramento de excees

Esta sesso aponta alguns benefcios que resultam da utilizao destas ferra-
mentas para monitoramento de software em produo, tanto da perspectiva do cliente,
como da perspectiva dos responsveis pelo software.

2.5.1 Clientes Felizes

Em um cenrio onde uma aplicao esteja em produo, o sistema est suscet-


vel a diversos comportamentos que podem ou no terem sido previstos no ambiente
de desenvolvimento ou no ambiente de testes. Esses comportamentos podem ser
rastreados e gravados em arquivos que registram eventos do sistema para possveis
auditorias e diagnsticos do sistema, esses arquivos so conhecidos como arquivos
Captulo 2. Conceitos e Ferramentas 17

de log. Quando esses comportamentos se refletem em uma falha na aplicao, de


fundamental importncia que os responsveis pela aplicao se adiantem para analisar
o log, e consequentemente encontrar a raiz que provocou o erro no sistema para que
posteriormente os responsveis possam corrigir essa exceo.
Quando esses erros ocorrem e os desenvolvedores no tm acesso a eles,
necessrio que os usurios do sistema em questo relatem o ocorrido para que os
desenvolvedores possam reproduzir e posteriormente corrigir o erro. O problema surge
quando o usurio no tem conhecimento tcnico suficiente para relatar o problema ou
quando o problema passa despercebido pelo mesmo. Comportamentos no previstos
pelo sistema podem impactar negativamente a experincia de uso da aplicao e o
processo de manuteno do software. (WHAT. . . , 2008)
Mas esse cenrio de problemas pode ser corrigido se a aplicao estiver sendo
monitorada por um servio de monitoramento de erros. Com esse servio, os respon-
sveis pelo software sero informados por cada erro notificado pelo sistema atravs de
vrias interfaces de comunicao, como e-mail, chats ou servios de gerenciamentos
de software. Ter o conhecimento prvio desses erros previnem que os desenvolvedores
interroguem os clientes com o objetivo de ter conhecimento sobre o comportamento
que produziu o erro.

2.5.2 Tempo dinheiro

Depurar um erro ou exceo em uma aplicao um processo custoso e pode


ser executado de vrias formas, como depurao interativa, estruturas de controle,
anlise de cdigo fonte, anlise de logs entre diversos outros.
O uso de servios de monitoramento impede o desperdcio de tempo que
gasto revendo o cdigo fonte ou lendo interminveis arquivos de logs que so muitas
vezes no estruturados e extensos. O SaaS notifica a ocorrncia desse erro, expondo
a causa do erro, e dependendo da aplicao exibir o estado dos objetos no momento
que aconteceu o erro.

2.5.3 Servios de monitoramento de excees e eventos de logging avaliados

Com a finalidade de escolher as ferramentas para serem estudadas nesse


trabalho, foram usados alguns parmetros para escolha:

integrao com linguagem java. O Java foi a linguagem escolhida para fazer a
integrao com as ferramentas de monitoramento de excees.

Comunidade ativa ou ter atualizaes recentes. As ferramentas elegidas neste


trabalho foram atualizadas no mnimo durante os ltimos cinco anos. As atua-
Captulo 2. Conceitos e Ferramentas 18

lizaes foram confirmadas de acordo com os repositrios oficiais no GitHub,


nas ferramentas open sources, ou em suas prprias pginas.

As ferramentas escolhidas foram: Airbrake, Overops, Raygun, Rollbar e Sentry.


Todas essas ferramentas obedeceram os parmetros de escolha, e foram selecionados
atravs de pesquisas realizadas no buscador Google. Alguns desses servios tambm
foram referenciadas em (ZHITNITSKY, 2014).

Tabela 1 Tabela I: Servios de Monitoramento de Erro

Linguagem Verso Atualizado Cdigo Aberto

Airbrake Multi 2.2.8 06/2013 Sim

Overops Multi* 4.8.12 07/2017 No

Raygun Multi 2.2.0 12/2016 Sim

Rollbar Multi 0.5.4 05/2017 Sim

Sentry Multi 8.18.0 07/2017 Sim

Airbrake: Airbrake (AIRBRAKE, 2017) uma ferramenta online que permite o


monitoramento de erros. A ferramenta suporta as principais linguagens de programao
e frameworks. O software possui planos pagos e gratuitos e da suporte a integrao com
diversas ferramentas de gerenciamento: GitHub, Trello, Slack, HipChat, JIRA, Pivotal
Tracker, GitHub Enterprise, GitLab, GitLab CE/EE, Bitbucket, Lighthouse, Flowdock,
Campfire, Assembla e outros. O Airbrake licenciado sob as condies do Apache
License 2.0, apesar de sua ltima atualizao ter ocorrido no final de 2013, seu ltimo
commit ocorreu em dezembro de 2016(AIRBRAKE-JAVA, 2017). O Airbrake oferece 14
dias gratutos para teste, aps esse perodo, o servio passa a cobrar a partir de US$
49,00 mensais.
Overops: Overops (KNOW. . . , 2017) uma ferramenta que monitora erros
que ocorrem no ambiente de produo. Ela suporta apenas linguagens baseadas na
mquina virtual java: Java, Scala e Clojure, porm a nica ferramenta que permite
visualizar o cdigo e o estado das variveis que se relacionam com o erro ocorrido. O
servio tambm oferece integrao com servios como o AppDynamics, CloudWatch,
DataDog, Grafana, Graphite, HipChat, Librato, New Relic, PagerDuty, Slack, Zabbix.
Este o nico servio que no possui cdigo aberto, no entanto sua escolha se deu
necessria devido a exclusividade de ser a nica ferramenta que atua no nvel da
mquina virtual java.
Raygun: Raygun (RAYGUN, 2017) uma ferramenta que alm de apresentar
o monitoramento de erros e integrao com servios de gerenciamento de projetos;
Captulo 2. Conceitos e Ferramentas 19

plataformas de hospedagem de cdigo para controle de verso e colaborao e fer-


ramentas de colaborao, tem um foco especial no usurio final do software a ser
monitorado, a ferramenta promete identificar esses usurios finais e saber quando o
mesmo for afetado por comportamento inesperado. Esse servio suporta integrao
com as seguintes ferramentas de gerenciamento e notificao: HipChat, Campfire,
YouTrack, GitHub, FogBugz, Trello, Sprintly, JIRA, JIRA OAuth, Bitbucket, PivotalTracker,
Webhook, Slack, Flowdock, BugHerd, Visual Studio Team Services, Lighthouse, Asana,
Zendesk, Moxtra, VictorOps, CA Agile CentralAssembla, PagerDuty, GitLab, Target-
process, Amazon SQS, Azure Service Bus. O Raygun licenciado sob as restries
do MIT License e seu ltimo commit ocorreu em fevereiro de 2017 (RAYGUN4JAVA,
2017). O Raygun oferece apenas 14 dias gratuitos para teste, possuindo planos a partir
de US$ 199,00 mensais.
Rollbar: Rollbar (ROLLBAR, 2017) uma ferramenta que prope fazer monito-
ramento de erros, possui integrao com as principais linguagens de desenvolvimento
e frameworks. A ferramenta possui um agrupamento inteligente de erros e promete
acompanhar o impacto de cada implantao de cdigo no ambiente de produo. O
Rollbar oferece uma API para acesso dos dados e integrao com outros servios, alm
do Rollbar Query Language, que fornece uma rica interface de consulta para os dados
do servio. O Rollbar tambm permite enviar eventos para softwares de gerenciameno
ou noficao: HipChat, Campfire, GitHub, Trello, Sprintly, JIRA, Bitbucket, PivotalTracker,
Webhook, Slack, Flowdock, Asana, VictorOps, PagerDuty, GitLab. Licenciado sob o MIT
Liscense, seu ltimo commit foi em maio de 2017 (ROLLBAR-JAVA, 2017). O servio
possui um plano gratuito com eventos limitados, e planos a partir US$ 49,00 mensais.
Sentry: Sentry (SENTRY, 2017) uma ferramenta que faz o monitoramento
de excees e possui integrao com as principais linguagens e seus frameworks.
A ferramenta oferece uma interface simples, porm intuitiva e possui integrao com
os principais servios de gerenciamento de projetos, plataformas para hospedagem
de cdigo para controle de verso e ferramentas de colaborao. Licenciado sob
as restries do BSD 3-clause New or Revised License, o Sentry possui uma
comunidade bastante ativa e tem commits semanais (SENTRY, 2017). O servio
oferece um plano gratuito e planos a partir de US$ 26,00 mensais ou planos on-
demand.

2.6 Consideraes do captulo

Este captulo exps os principais conceitos que compe as ferramentas de


monitoramento de excees e eventos de log. Apresentou o conceito de Software as a
Service, que a maneira que as ferramentas utilizam para entregarem o servio para
os desenvolvedores, tambm foram expostos os conceitos de logging e debugging ,
Captulo 2. Conceitos e Ferramentas 20

tal como a prtica de monitorar excees, sendo esses os conceitos que motivam
o uso dessas ferramentas de monitoramento de excees. Por fim, as ferramentas
que sero avaliadas so apresentadas. Todos os princpios explorados neste captulo
so necessrios para melhor entendimento e compreenso das avaliaes que sero
realizadss no prximo captulo.
21

3 Ambiente de avaliao

O objetivo deste captulo explicar a configurao do ambiente de teste, assim


como as tecnologias usadas ao decorrer deste trabalho, detalhes da implementao,
dependncias necessrias para replicao desses exemplos e por fim, na sesso
3.2, um passo a passo de como configurar cada ferramentas de monitoramento de
excees e eventos de logs descritas no captulo anterior.
Esta sesso importante pois ela faz uma avaliao das nuncias de cada
ferramenta, ou seja, como cada ferramenta se diferencia no momento de se fazer
a integrao com aplicao, seja por dependncias de bibliotecas externas ou por
modificao de cdigo.

3.1 Detalhes do Ambiente

O ambiente de teste construdo em uma computador da fabricante Acer,


Aspire E 15, E5-573-54ZV, com processador Intel Core i5-5200U, memria 8GB
DDR3 L, armazenamento de 1000 GB HDD. O sistema operacional o Fedora 23 com
configurao padro de de internet. A verso do JDK usada o OpenJDK Runtime
Environment (build 1.8.0_111-b16). A IDE usada o Eclipse, verso Neon.1a Release
(4.6.1).
Com a finalidade de utilizar todo o potencial de cada servio de monitoramento,
e fazer uma comparao mais justa, suas configuraes foram implementadas de
acordo com os guias dos seus respectivos websites.

3.1.1 Cdigo

Para seguirmos o foco deste trabalho, iremos utilizar uma aplicao trivial em
java que consiste apenas em consultas a um banco de dados, onde faremos insero
de objetos. O levantamento de excees se dar pelo desligamento do banco de
dados no meio a uma consulta ao mesmo. O Hibernate verso 5.2.10 foi utilizado para
facilitar o mapeamento objeto relacional, o uso do framework se faz necessrio para
que apenas possamos focar nas configuraes dos servios de monitoramento. Para
o gerenciamento de dependncias do projeto foi utilizado o Maven, uma ferramenta
de integrao de projetos, dado a grande adoo da ferramenta no ambiente de
desenvolvimento java.
O seguinte Cdigo 3.1 descreve a entidade Person, que ser utilizada para ser
persistida no banco de dados. A implementao da classe Person trivial, possuindo
apenas dois atributos, id e name. Com auxlio das classes do pacote javax.persistence,
Captulo 3. Ambiente de avaliao 22

foi usado alguns java annotations para fazer o mapeamento objeto-relacional. Mapea-
mento objeto-relacional uma tcnica que abstrai o modelo relacional, usado em banco
de dados, para o o modelo orientado a objetos, essa tcnica importante pois permite
que o desenvolvedor no escreva cdigo para banco de dados, melhorando a produtivi-
dade e diminuindo o tempo de desenvolvimento da aplicao. (CANDIDO NETO et al.,
2016) A anotao @Entity na linha 6 configura que a classe Person uma entidade do
mapeamento objeto-relacional. As anotaes das linhas 9 e 10 respectivamente con-
figura que o atribute id o identificador da entidade Person e que o valor gerado
automaticamente. A linhas 13 descreve que o atribute name uma coluna da entidade
da Person.

Cdigo 3.1 Person.java


1 import j a v a x . p e r s i s t e n c e . Column ;
2 import javax . persistence . E n t i t y ;
3 import j a v a x . p e r s i s t e n c e . GeneratedValue ;
4 import javax . persistence . Id ;
5
6 @Entity
7 p u b l i c c l a s s Person {
8
9 @Id
10 @GeneratedValue
11 p r i v a t e long i d ;
12
13 @Column ( n u l l a b l e = f a l s e , unique= f a l s e )
14 p r i v a t e S t r i n g name ;
15
16 p u b l i c S t r i n g getName ( ) {
17 r e t u r n name ;
18 }
19 p u b l i c v o i d setName ( S t r i n g name ) {
20 t h i s . name = name ;
21 }
22 }

O cdigo 3.2 a implementao da classe App, onde executada todas as avali-


aes e descritas neste trabalho. A linha 1 at a linha 3 so feitos os imports das classes
necessrias para implementao do JPA (Java Persistence Aplication) (HIBERNATE-
JPA-2. . . , 2013) na nossa classe App. O JPA uma padro da plataforma java para
persistncia de dados, e implementada pelo Hibernate, que o framework usado nesse
trabalho para fazer o mapeamento objeto-relacional (BALDUINO; RUFINO, 2014). Na
linha 11 criado uma instncia da classe EntityManagerFactory, essa classe res-
ponsvel por fazer a ligao com o arquivo de configurao e com a entidade Person
(Cdigo 3.1). Para fazer comunicao com o JPA, criada uma instncia da classe
EntityManager atravs da instncia j conhecida criada na linha 11. Da linha 17 at a
Captulo 3. Ambiente de avaliao 23

linha 26 feita um loop onde um objeto da entidade Person persistido a cada iterao
do loop. Esse o alicerce de onde ser lanada as excees e os logs de eventos
que sero capturados pelas ferramentas de monitoramento de excees e logs citadas
neste trabalho. A exceo ser lanada quando a conexo com o banco de dados for
encerrada, impedindo a persistncia da nossa entidade no banco de dados.

Cdigo 3.2 App.java


1 i m p o r t j a v a x . p e r s i s t e n c e . EntityManager ;
2 import javax . persistence . EntityManagerFactory ;
3 import javax . persistence . Persistence ;
4
5 i m p o r t t g . n a t a n a e l . e n t i t y . Person ;
6
7 p u b l i c c l a s s App {
8
9 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] args ) {
10
11 EntityManagerFactory f a c t o r y = Persistence .
c r e a t e E n t i t y M a n a g e r F a c t o r y ( " mariaDB " ) ;
12 EntityManager manager = f a c t o r y .
createEntityManager ( ) ;
13
14 Person person = new Person ( ) ;
15 person . setName ( " Jhon " ) ;
16
17 f o r ( i n t i = 0 ; i < 100000; i ++) {
18 try {
19 manager . g e t T r a n s a c t i o n ( ) . begin
() ;
20 manager . p e r s i s t ( person ) ;
21 manager . g e t T r a n s a c t i o n ( ) . commit
() ;
22
23 } c a t c h ( E x c e p ti o n e ) {
24 e . printStackTrace ( ) ;
25 }
26 }
27
28 manager . c l o s e ( ) ;
29 f a c t o r y . close ( ) ;
30 }
31 }

3.1.2 Dependencias

O arquivo pom.xml (Cdigo 3.3) responsvel pela declarao de todas as


dependncias usadas no cdigo base da aplicao. O arquivo pom.xml o principal
arquivo de configurao usado pelo maven. Da linha 10 linha 14 declarado a
dependncia da biblioteca org.hibernate vero 5.2.10, e da linha 17 at a linha 21
Captulo 3. Ambiente de avaliao 24

declarada a dependncia do pacote org.mariadb.jdbc, esse pacote responsvel por


fazer a ligao da nossa aplicao com o banco de dados MariaDB.

Cdigo 3.3 pom.xml


1 < p r o j e c t xmlns= " h t t p : / / maven . apache . org /POM/ 4 . 0 . 0 " x m l n s : x s i = "
h t t p : / / www. w3 . org / 2 0 0 1 /XMLSchemai n s t a n c e "
x s i : s c h e m a L o c a t i o n = " h t t p : / / maven . apache . org /POM/ 4 . 0 . 0 h t t p :
/ / maven . apache . org / xsd / maven 4 . 0 . 0 . xsd " >
2 <modelVersion> 4 . 0 . 0 < / modelVersion>
3 <groupId>tg . natanael< / groupId>
4 < a r t i f a c t I d >ErrorTrackingTest< / a r t i f a c t I d >
5 < v e r s i o n >0.0.1 SNAPSHOT< / v e r s i o n >
6 <name> E r r o r T r a c k i n g T e s t < / name>
7
8 <dependencies>
9 < ! h t t p s : / / m v n r e p o s i t o r y . com / a r t i f a c t / org . h i b e r n a t e /
h i b e r n a t e core >
10 <dependency>
11 < g r o u p I d >org . h i b e r n a t e < / g r o u p I d >
12 < a r t i f a c t I d > h i b e r n a t e core < / a r t i f a c t I d >
13 <version>5.2.10. Final< / version>
14 < / dependency>
15
16 < ! h t t p s : / / m v n r e p o s i t o r y . com / a r t i f a c t / org . mariadb .
j d b c / mariadbjavac l i e n t >
17 <dependency>
18 < g r o u p I d >org . mariadb . j d b c < / g r o u p I d >
19 < a r t i f a c t I d >mariadbjavac l i e n t < / a r t i f a c t I d >
20 <version>1.1.7< / version>
21 < / dependency>
22 < / dependencies>
23
24 < / p r o j e c t >

3.2 Configuraes

Usaremos como referncia a documentao oficial de cada servio de monitora-


mento que ser tratado neste trabalho. Essa uma forma de garantir uma comparao
justa, impedindo a interferncia de facilitadores de terceiros.

3.2.1 Airbrake (AIRBRAKE, 2017)

O Airbrake oferece suporte para repositrios Maven e funciona com uma inte-
grao com o framework de logging, Log4J 1.2, atravs de appenders. Appenders so
classes Java que implementam a interface Appender e so responsveis por entregar
os logs de eventos no destino, e esse destino pode ser em um simples console, escre-
ver em arquivos, banco de dados ou at enviar atravs do mtodo POST do servio
REST (APPENDERS, ). No entanto o framework log4j j se encontra descontinuado
Captulo 3. Ambiente de avaliao 25

desde agosto de 2015, a verso mais atual nomeada log4j2 e j se encontra na


verso 2.8.2.
O Airbrake configurado atravs do arquivo de propriedades do log4j, onde
so fornecidos a chave de acesso alm de informaes relacionadas ao appender
do log4j. Para que o framework passe a enviar as mensagens de log para o servidor,
necessrio utilizar a classe Logger do log4j. Como o objetivo do trabalho no
explicar o funcionamento do log4j, no entraremos em mais detalhes sobre o seu
funcionamento.

Cdigo 3.4 Dependencias do Airbreak


<dependency>
<groupId> l o g 4 j < / groupId>
< a r t i f a c t I d >log4j</ a r t i f a c t I d >
<version>1.2.17< / version>
< / dependency>

<dependency>
<groupId> i o . a i r b r a k e < / groupId>
< a r t i f a c t I d > a i r b r a k e j a v a < / a r t i f a c t I d >
<version>2.2.8< / version>
< / dependency>

Cdigo 3.5 log4j.properties


l o g 4 j . r o o t L o g g e r =INFO , s t d o u t , a i r b r a k e

l o g 4 j . appender . s t d o u t =org . apache . l o g 4 j . ConsoleAppender


l o g 4 j . appender . s t d o u t . l a y o u t =org . apache . l o g 4 j . P a t t e r n L a y o u t
l o g 4 j . appender . s t d o u t . l a y o u t . C o n v e r s i o n P a t t e r n =[%d,%p ] [%c { 1 } . %
M:%L ] %m%n

l o g 4 j . appender . a i r b r a k e = a i r b r a k e . AirbrakeAppender
l o g 4 j . appender . a i r b r a k e . api_key =YOUR_KEY_HERE
l o g 4 j . appender . a i r b r a k e . env=development
/ / l o g 4 j . appender . a i r b r a k e . env= p r o d u c t i o n
/ / l o g 4 j . appender . a i r b r a k e . env= t e s t
l o g 4 j . appender . a i r b r a k e . enabled= t r u e
l o g 4 j . appender . a i r b r a k e . u r l = h t t p : / / a p i . a i r b r a k e . i o / n o t i f i e r _ a p i
/ v2 / n o t i c e s
Captulo 3. Ambiente de avaliao 26

Figura 2 Aba de overview da aplicao Airbrake

Fonte: print screen do painel de controle do Airbrake

Figura 3 Aba de occurrences da aplicao Airbrake

Fonte: print screen tirada do dashboard do Airbrake

O dashboard do Airbrake se apresenta de forma simples e intuitiva, nele


possvel verificar informaes pertinentes ao erro como quando aconteceu, a mensa-
gem passada, o endereo remoto do servidor onde ocorreu o erro, alm do backtrace
Captulo 3. Ambiente de avaliao 27

da ocorrncia. Algumas dessas caractersticas podem ser visualizadas na Figura 1 e


Figura 2. A principal vantagem do Airbrake a facilidade de configurao quando a
aplicao j faz uso do framework log4j, dessa forma o custo de alterao de cdigo
mnimo. Em contrapartida o log4j no recebe mais suporte da comunidade, pondo em
risco a manutenibilidade do cdigo.

3.2.2 Raygun (RAYGUN, 2017)

As dependncias do Raygun tambm esto disponveis no repositrio Maven,


simplificando bastante a instalao. Diferentemente do Airbrake, o Raygun no utiliza
nenhum framework de logging como dependncia, ele utiliza uma instancia da inter-
face java Thread.UncaughtExceptionHandler, que invocada quando uma thread
terminada abruptamente devido a um uncaught exception (INTERFACE. . . , ). No nosso
cdigo, implementamos uma instncia da interface Thread.UncaughtExceptionHandler,
e na implementao do mtodo uncaughtException criada uma instncia do Ray-
gunClient, essa instncia responsvel por enviar as excees no capturadas para
o Raygun (Cdigo 3.5, 33 - 39). Para fazer o rastreio das excees no capturadas
no nosso mtodo main, necessrio passar como parmetro a nossa instncia do
Thread.UncaughtExceptionHandler para o mtodo esttico setDefaultUncaughtExcepti-
onHandler da classe Thread (Cdigo 3.5, 13).

Cdigo 3.6 App.java


1 i m p o r t j a v a x . p e r s i s t e n c e . EntityManager ;
2 import javax . persistence . EntityManagerFactory ;
3 import javax . persistence . Persistence ;
4
5 i m p o r t com . mindscapehq . raygun4java . core . RaygunClient ;
6
7 i m p o r t t g . n a t a n a e l . e n t i t y . Person ;
8
9 p u b l i c c l a s s App {
10
11 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] args ) throws Throwable
{
12
13 Thread . s e t D e f a u l t U n c a u g h t E x c e p t i o n H a n d l e r ( new
MyExceptionHandler ( ) ) ;
14
15 EntityManagerFactory f a c t o r y = Persistence .
c r e a t e E n t i t y M a n a g e r F a c t o r y ( " maria " ) ;
16 EntityManager manager = f a c t o r y .
createEntityManager ( ) ;
17
18 Person person = new Person ( ) ;
19 person . setName ( " Jhon " ) ;
20
Captulo 3. Ambiente de avaliao 28

21 f o r ( i n t i = 0 ; i < 100000; i ++) {


22
23 manager . g e t T r a n s a c t i o n ( ) . begin ( ) ;
24 manager . p e r s i s t ( person ) ;
25 manager . g e t T r a n s a c t i o n ( ) . commit ( ) ;
26 }
27
28 manager . c l o s e ( ) ;
29 f a c t o r y . close ( ) ;
30 }
31 }
32
33 c l a s s MyExceptionHandler implements Thread .
UncaughtExceptionHandler
34 {
35 p u b l i c v o i d uncaughtException ( Thread t , Throwable e ) {
36 RaygunClient c l i e n t = new RaygunClient ( "
nQH7dhoBpU / Zc4ltm5Y / sA== " ) ;
37 c l i e n t . Send ( e ) ;
38 }
39 }

Como visto no cdigo anterior, a configurao desse framework tem um impacto


mnimo no cdigo, visto que s necessrio algumas inseres de linhas de cdigo.
Essa abordagem bastante vantajosa porque no necessrio se preocupar com o
lanamento das excees. Fazendo um paralelo com o Airbrake, usando o primeiro
framework s possvel capturar os eventos que foram capturados via o log4j, enquanto
que aqui s capturado as excees que no esperadas pelos desenvolvedores. Essa
abordagem d a vantagem de usar o Raygun em conjunto com outro servio de
rastreamento de erro justamente por capturar eventos que outras ferramentas no so
capazes de capturar.
Captulo 3. Ambiente de avaliao 29

Figura 4 Dashboard da aplicao Raygun

Fonte: print screen capturado da aplicao Raygun

Figura 5 Aba de environment da viso do erro RollbackException

Fonte: print screen capturado da aplicao Raygun

O painel de controle do Raygun se apresenta repleta de opes para o usurio,


porm aqui sero tratados apenas as opes que concernem com o propsito do
trabalho. O framework oferece opes para gerenciar os erros capturados, nele
Captulo 3. Ambiente de avaliao 30

possvel agrupar os erros em categorias e atribuir a cada erro um usurio especfico


para ficar responsvel com o tratamento deste erro. Outro aspecto importante que
possvel analisar algumas mtricas relacionadas ao servidor de produo que podem
ser importante para entender o contexto que originou o erro, dentre essas mtricas
esto: memria virtual disponvel, memria virtual total e contador de processador.
Alm dessas caractersticas, o framework cumpre bem aes como notificao por
e-mail e criar integrao com outras ferramentas. Tudo isto pode ser visualizado na
Figura 3 e Figura 4.

3.2.3 Rollbar (ROLLBAR, 2017)

As dependncias do Rollbar tambm so disponveis via Maven, e sua configura-


o bastante semelhante as configuraes do Raygun, porm com uma diferena, ele
utiliza uma instncia prpria da classe Rollbar, alm de poder capturar manualmente
os eventos que so lanados na aplicao, esses eventos so classificados em error,
critical, warning, log, debug e info e so capturados usando os mtodos com os res-
pectivos nomes da classe Rollbar. Essas implementaes sero melhores explicadas
com o cdigo adiante. A integrao com o cdigo executada criando uma instncia
da classe Rollbar, mandatrio passar como parmetro to token de acesso conta,
que pode ser encontrado nas configuraes da interface web do Rollbar (Cdigo 3.7,
11). Aps a criao da instncia da classe Rollbar, j possvel lanar os eventos
manualmente (Cdigo 3.7, 31) ou lanar as excees no tratadas chamando o mtodo
handleUncaughtErrors() (Cdigo 3.7, 15).

Cdigo 3.7 Main.java


1 i m p o r t j a v a x . p e r s i s t e n c e . EntityManager ;
2 import javax . persistence . EntityManagerFactory ;
3 import javax . persistence . Persistence ;
4
5 i m p o r t com . r o l l b a r . R o l l b a r ;
6
7 i m p o r t t g . n a t a n a e l . e n t i t y . Person ;
8
9 p u b l i c c l a s s App {
10
11 p u b l i c s t a t i c f i n a l R o l l b a r r o l l b a r = new R o l l b a r ( " 3
f6b5d9ab319423db0b4cdf2f49dbe11 " , " p r o d u c t i o n " ) ;
12
13 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] args ) throws Throwable
{
14
15 r o l l b a r . handleUncaughtErrors ( ) ;
16
17 EntityManagerFactory f a c t o r y = Persistence .
c r e a t e E n t i t y M a n a g e r F a c t o r y ( " maria " ) ;
Captulo 3. Ambiente de avaliao 31

18 EntityManager manager = f a c t o r y .
createEntityManager ( ) ;
19
20 Person person = new Person ( ) ;
21 person . setName ( " Jhon " ) ;
22
23 f o r ( i n t i = 0 ; i < 100000; i ++) {
24 try {
25 manager . g e t T r a n s a c t i o n ( ) . begin
() ;
26 manager . p e r s i s t ( person ) ;
27 manager . g e t T r a n s a c t i o n ( ) . commit
() ;
28
29 } c a t c h ( E x c e p ti o n e ) {
30 e . printStackTrace ( ) ;
31 rollbar . error (e) ;
32 }
33 }
34
35 manager . c l o s e ( ) ;
36 f a c t o r y . close ( ) ;
37
38 }
39 }

Como visto no cdigo anterior, as modificaes no cdigo fonte so mnimas


dependendo do nvel de captura de eventos desejvel pelo usurio. Se o objetivo for
capturar excees no tratadas no cdigo, s necessrio adicionar duas linhas de
cdigo como visto nas linhas 11 e 15 do cdigo 3.7 - App.java acima. Se o objetivo
tambm for tratar individualmente cada evento, exigido o lanamento do devido evento,
como visto na linha 31 do cdigo 3.7.
Essa abordagem bastante vantajosa pois possibilita para o desenvolvedor
escolher a melhor forma de integrar o framework com a aplicao. Se a integrao
for feita desde o incio da implementao do cdigo, pode ser pertinente o uso atravs
de lanamentos de eventos manuais, enquanto que a integrao for feito no meio do
ciclo de vida do cdigo, pode ser mais vivel capturar apenas os erros no tratados,
mas nada impede o uso dos dois tratamentos. Se algum outro framework j seja
responsvel pelo lanamento manual desses eventos, e o objetivo de se integrar o
rollbar capturar os eventos inesperados, pode ser vivel utilizar apenas o Rollbar
para ambos tratamento, se por um lado vai existir um custo com modificao de cdigo,
por outro haver uma vantagem de custo financeiro e gerenciamento, pois apenas um
framework ser usado na aplicao.
Captulo 3. Ambiente de avaliao 32

Figura 6 Aba de itens da aplicao Rollbar

Fonte: print screen tirada da aplicao Rollbar

Figura 7 Aba de community solutions relacionada a um erro na aplicao Rollbar

Fonte: print screen tirada da aplicao Rollbar

A interface do usurio do Rollbar apresenta uma funcionalidade de filtrar eventos


baseada nos tipos de eventos lanados na aplicao pelos desenvolvedores, esses
eventos so: Critial, Error, Warning, Infor e Debug. Essa funcionalidade pode ser
Captulo 3. Ambiente de avaliao 33

visualizada na Figura 5. Utilizando a configurao padro fornecida pelo site do Rollbar


no foi possvel visualizar informaes relacionadas ao ambiente de produo, como
o ip do servidor ou alguma informao padro como o nome do sistema operacional.
Uma caraterstica exclusiva que no foram vistas nos error trackers at agora a
possibilidade de encontrar solues de erros especficos fornecidas pela comunidade
do Rollbar, essa particularidade pode ser utilizada pelos desenvolvedores para acelerar
o processo de correo dos erros relatados, essa funcionalidade pode ser visualizada
na Figura 6.

3.2.4 Sentry (SENTRY, 2017)

O Sentry concede duas formas de lanamentos de eventos utilizando a lingua-


gem java, a primeira reporta eventos manualmente utilizando a classe SentryClient, a
segunda se baseia na integrao com frameworks de logging. Neste trabalho iremos
utilizar a segunda forma de reportar eventos pelos seguintes motivos: No ser necess-
rio aprender uma biblioteca nova, alm de aumentar o nvel de modificao do cdigo
e por j existir um modo de levantar logs maduro e adotado pela comunidade.
A configurao do Sentry utilizando um framework de logging bastante seme-
lhante com a configurao do Airbrake. Diferente do seu semelhante, o Sentry suporta
o Log4j2, que licenciada sob os termos do Apache License 2.0; o Logback, licenciado
sob os termos do Eclipse Public License v1.0 e GNU Lesser General Public License
version 2.1, alm da classe Logging que faz parte do pacote Util do java.

Cdigo 3.8 Sentry - log4j2.xml


1 <?xml v e r s i o n = " 1 . 0 " encoding= "UTF8" ?>
2 < c o n f i g u r a t i o n s t a t u s = " warn " packages= " org . apache . l o g g i n g . l o g 4 j
. core , i o . s e n t r y . l o g 4 j 2 " >
3 <appenders>
4 <Console name= " Console " t a r g e t = "SYSTEM_OUT" >
5 < P a t t e r n L a y o u t p a t t e r n = "%d { HH:mm:ss . SSS} [% t ] %5
l e v e l %l o g g e r { 3 6 } %msg%n " / >
6 < / Console>
7
8 < S e n t r y name= " S e n t r y " / >
9 < / appenders>
10
11 <loggers>
12 < r o o t l e v e l = " INFO " >
13 <appenderr e f r e f = " Console " / >
14 < ! Note t h a t t h e S e n t r y l o g g i n g t h r e s h o l d i s
o v e r r i d d e n t o t h e WARN l e v e l >
15 <appenderr e f r e f = " S e n t r y " l e v e l = "WARN" / >
16 </ root>
17 < / loggers>
18 < / c o n f i g u r a t i o n >
Captulo 3. Ambiente de avaliao 34

Por simplicidade e por j termos usado o log4j na configurao do Airbrake,


iremos utilizar o log4j2 para fazer a integrao com o Sentry. O uso bastante inteligvel,
sendo necessrio apenas configurar o arquivo log4j2.xml, adicionando o appender que
referencia o Sentry, o exemplo dessa configurao pode ser visualizada no cdigo 3.8
acima, e inicializar o sentry no mtodo main da classe App, passando como parmetro
o DSN(Data Source Name). A configurao do DSN a primeira e mais importante
tarefa a se concluir, pois ela diz ao SDK para onde os eventos devem ser enviados,
o DSN pode ser encontrado nas configuraes do projeto dentro da interface web do
Sentry. O exemplo da inicializao do Sentry pode ser visto no cdigo 3.9.

Cdigo 3.9 Sentry - App.java


1 S e n t r y . i n i t ( " h t t p s : / / p u b l i c : private@host : p o r t / 1 " ) ;

A interface web do Sentry no oferece muitas novidades. A estrutura bastante


simples entregando uma lista de eventos lanados agrupados pela quantidade de lan-
amentos. O Sentry tambm pode ser usado como uma ferramenta de gerenciamento
de tarefas para desenvolvedores, j que possvel atribuir usurios especficos para
tratarem determinados erros. Informaes como o stacktrace ou detalhes do ambiente,
como quando o evento ocorreu ou o nome do servidor tambm esto presentes, assim
como nos demais frameworks. Algumas dessas informaes podem ser confirmadas
na Figura 7 e Figura 8.

Figura 8 Aba de issues da aplicao Rollbar

Fonte: print screen tirada da aplicao Sentry


Captulo 3. Ambiente de avaliao 35

Figura 9 Viso relacionada a um erro na aplicao Sentry

Fonte: print screen tirada da aplicao Sentry

3.2.5 Overops (KNOW. . . , 2017)

Diferente de todas as ferramentas vistas agora, o Overops se destaca por agir no


nvel da mquina virtual java (JVM), ou seja, no necessrio a insero de nenhuma
linha de cdigo ou uso de framework de logging. Esse comportamento possibilita que
a ferramenta colete dados relacionados com o estado das variveis e o cdigo atual
que executado no instante do erro, alm de detectar caught/uncaught exceptions e
logs de erro. Todas essas funcionalidades no funcionam como mgica, tudo isso
possvel porque o Overops executa no servidor como um micro-agent Java(cada um
por JVM), e um coletor daemon, quando combinado os dois, o Overops detecta todos
os eventos citado no incio deste pargrafo.
Captulo 3. Ambiente de avaliao 36

Figura 10 Overops Workflow

http://blog.takipi.com/why-is-takipi-made-for-production/

Para instalar e configurar o Overops, mandatrio fazer o download e instalar o


pacote Overops. A ferramenta prov suporte para diversas distribuies Linux, desde
que no sejam 32-bits, macOS (10.6+) e Windows Server 2008/Windows Vista ou
novas verses desde que no sejam 32-bits. Como o sistema operacional usado nesse
projeto o Fedora 23, iremos instalar o Overops utilizando um comando shell que faz
o download do pacote e executa o script de instalao. mandatrio trocar o MyKey
pela chave de instalao que pode ser gerada nas configuraes da interface web do
Overops:

Cdigo 3.10 Script de instalao do Overops


wget O o / dev / n u l l h t t p : / / g e t . t a k i p i . com | sudo bash / dev /
s t d i n i sk=<MyKey>

Em seguida necessrio conectar o Overops Agent como argumento da JVM.


Isto pode ser feito adicionando este valor como argumento da JVM:
-agentlib:TakipiAgent
Se o eclipse for utilizado, esse argumento pode ser adicionado na aba de
VM arguments que pode ser alcanado acessando o menu Debug Configuration ->
Arguments Tab. Aps essas etapas, o Overops j est pronto para comear a receber
os dados da aplicao.
A interface web do Overops bastante intuitiva. A ferramenta tem uma carac-
Captulo 3. Ambiente de avaliao 37

terstica de classificar os eventos em categorias, JVM errors; Logged errors; Logged


warnings; Uncaught exceptions; DB errors; Network errors. Essa funcionalidade sim-
plifica bastante a busca por determinados eventos. Alm das categorias, o Overops
oferece uma funcionalidade de classificar os eventos em labels, Critical; High priority;
Low priority; Archive; Resolved e Resurfaced, seus nomes so auto explicativos. Na
interface relacionada a um evento, possvel visualizar o cdigo fonte do programa
no momento da ocorrncia do evento, alm do estados de todas a variveis que de
alguma forma se relaciona com o evento, alm disso tambm possvel visualizar
as mensagens de logging que foram lanadas no processo e tambm as mtricas
relacionadas JVM, sendo elas: Memory; Garbage Collection; JVM Process; Class
Loading; JIT Compilation; Operating System; Environment Variables; System Properties
e Active Threads. Estas so particularidades que fazem o Overops se distanciar das
outras ferramentas se o nvel de detalhamento dos eventos exigido for superior. Boa
parte do que foi discutido aqui pode ser visualizado na Figura 10 e Figura 11.

Figura 11 Aba de all events da aplicao Overops

Fonte: print screen tirada da aplicao Overops


Captulo 3. Ambiente de avaliao 38

Figura 12 Viso relacionada ao erro SQL Error na aplicao Overops

Fonte: print screen tirada da aplicao Overops

3.3 Resultados

Como sntese das avaliaes vistas neste captulo, iremos colocar as ferramen-
tas lado a lado e fazer uma comparao entre os dois parmetros que mais foram
abordados neste trabalho: Instalao e Modificabilidade de cdigo.

Instalao - o nvel de facilidade que um framework tem de ser integrado com


o cdigo fonte da aplicao a ser monitorada. Aqui ser abordado a necessidade
de dependncias por parte do framework.

Modificabilidade de cdigo - o nvel do quanto o cdigo precisa ser modifi-


cado para que a integrao com o framework funcione corretamente.

Os parmetros sero classificados em uma escala de trs nveis: Atende;


Atende Parcialmente e No Atende. A instalao atende quando no necessrio
nenhuma outra dependncia em relao prpria ferramenta, ou seja, apenas com
a biblioteca da ferramenta possvel concluir a instalao. A instalao atende parci-
almente quando exigido o uso de algum outro framework, como por exemplo o uso
de uma biblioteca de logging como o log4j. E por fim, a instalao no atende quando
no possvel realizar a integrao. Neste trabalho conseguimos fazer a integrao
com xito de todas as ferramentas, logo todas as ferramentas pelo menos atenderam
parcialmente no parmetro de instalao. A modificabilidade de cdigo atende quando
Captulo 3. Ambiente de avaliao 39

no necessrio fazer alteraes no cdigo, nem que seja uma nica linha. A modifi-
cabilidade de cdigo atende parcialmente quando exigido que o lanamentos dos
eventos sejam feitas manualmente, via uso de framework de logging ou no. E por
fim, a modificabilidade de cdigo no atende quando a estrutura do cdigo precisa ser
modificada totalmente.
Tabela 2 Resultados: Instalao

Exception Tracker Instalao

Airbrake Atende Parcialmente

Raygun Atende

Rollbar Atende

Sentry Atende Parcialmente

Overops Atende

Tabela 3 Resultados: Modificabilidade de Cdigo

Exception Tracker Modificabilidade de Cdigo

Airbrake Atende Parcialmente

Raygun Atende Parcialmente

Rollbar Atende Parcialmente

Sentry Atende Parcialmente

Overops Atende

Como sntese destas avaliaes, as ferramentas foram qualificadas de acordo


com os dois parmetros escolhidos pelo autor no comeo deste captulo. Na Tabela 2
possvel ver os resultados das ferramentas qualificadas no quesito instalao, enquanto
que na Tabela 3 possvel ver os resultados das ferramentas qualificadas no quesito
de modificabilidade de cdigo.
compreensvel que as ferramentas que utilizam frameworks de logging atende-
ram parcialmente o parmetro de instalao devido a esta dependncia. J no quesito
de modificabilidade de cdigo, com exceo do Overops, todas atenderam parcialmente
pela necessidade de implementao de cdigo. importante mencionar que estes
resultados foram obtidos baseados pela avaliao do autor deste trabalho, e que os
parmetros, tais como suas escalas foram descritos de acordo com o ponto de vista
do mesmo. Tambm considervel deixar claro que a escolha de uma ferramenta de
Captulo 3. Ambiente de avaliao 40

monitoramento de excees baseada nas avaliaes exploradas neste trabalho no


garantem exatido nesta escolha, se um software escrito sem o uso de um framework
de logging, nada impede que o desenvolvedor do cdigo d preferncia pelo uso do
Airbrake ou Sentry que dependem desses frameworks para se integrar com a aplicao.
41

4 Concluso e trabalhos futuros

Neste trabalho introduzimos o conceito de servio de monitoramento de erros


passando por seus objetivos e motivaes de uso. Apresentamos as cinco principais
ferramentas de monitoramento de erros para linguagem java e discutimos a integrao
de cada uma das ferramentas com o sistema a ser monitorado. Os exemplos de cdigos
e ferramentas foram descritos de forma a serem facilmente reproduzidos e testados.
Da comparao entre as ferramentas, o Overops foi o que obteve melhor xito,
desde que essa soluo atua no nvel da JVM, no necessrio nenhuma alterao no
cdigo, consequentemente possvel que essa soluo seja integrada a qualquer sis-
tema em produo que j esteja sendo executado. Enquanto que as outras ferramentas
exigem pelo menos que os eventos sejam lanados manualmente, mesmo que sejam
via framework de logging. Para quem j utiliza algum framework de logging como o
log4j, pode ser vantajoso usar o Airbrake ou Sentry. Se o objetivo for apenas capturar
eventos que no so esperados pelo sistema, o Raygun ou Rollbar pode ser a melhor
opo.
As avaliaes concludas aqui foram baseadas apenas na capacidade dessas
ferramentas se integrarem com o cdigo, outros parmetros como capacidade de
captura de erros, capacidade de notificao, capacidade de integrao com outras
ferramentas de gerenciamento ou at mesmo uma anlise de UX design podem ser
feitas em outros trabalhos futuros para aumentar o escopo de classificao dessas
ferramentas.
Realizar testes mais robustos essencial para uma avaliao mais tcnica
dessas ferramentas. Expor as ferramentas avaliadas neste trabalho a testes de desem-
penho usando grandes quantidades de excees para observar como as ferramentas
se comportam diante de um cenrio de estresse importante para uma anlise mais
tcnica. Outra vertente que tambm pode ser explorada a execuo de uma anlise
dos algoritmos usados no cdigo fonte das ferramentas open sources avaliadas neste
trabalho para pode otimizar seus resultados ou estudar a criao de uma ferramenta de
monitoramento de excees e eventos de log otimizada de acordo com as ferramentas
analisadas. Todos esses experimentos so desafios que podero ser explorados em
trabalhos futuros.
42

Referncias

ACETO, G. et al. Cloud monitoring: A survey. Computer Networks, n. 57, p. 2093


2115, 2013.

ADRAGNA, P. Software debugging techniques. 2008.

AHMED, T. M. et al. Studying the Effectiveness of Application Performance Management


(APM) Tools for Detecting Performance Regressions for Web Applications: An
Experience Report. In: 13TH WORKING CONFERENCE ON MINING SOFTWARE
REPOSITORIES, 2016. [S.l.], 2016.

AIRBRAKE. 2017. Disponvel em: <https://airbrake.io/>. Acesso em: 30/06/2017.

AIRBRAKE-JAVA. 2017. Disponvel em: <https://github.com/airbrake/airbrake-java>.


Acesso em: 12/07/2017.

APPENDERS. Disponvel em: <https://logging.apache.org/log4j/2.x/manual/appenders.


html>. Acesso em: 29/06/2017.

BALDUINO, T. H. G. da S.; RUFINO, R. R. ALTO DESEMPENHO UTILIZANDO


FRAMEWORK HIBERNATE E PADRO JAVA PERSISTENCE API. Paranava, 2014.

CANDIDO NETO, A. A. et al. HIBERNATE E JPA: CONCEITOS PARA UTILIZAO. In:


. [S.l.: s.n.], 2016.

CHARAN, N. R. G.; RAO, S. T.; SRINIVAS, D. P. Deploying an Application on the Cloud.


(IJACSA) International Journal of Advanced Computer Science and Applications, v. 2,
n. 5, p. 119 125, 2011.

FOX, A.; PATTERSON, D. Engineering Long-Lasting Software: An Agile Approach


Using SaaS and Cloud Computing Beta Edition 0.9.0. 0.9.0. ed. [S.l.]: Strawberry
Canyon LLC, 2012.

FU1, Q. et al. Where Do Developers Log? An Empirical Study on Logging Practices in


Industry. ICSE Companion14, p. 24 33, 2014.

HIBERNATE-JPA-2.1-API 1.0.0.Final API. 2013. Disponvel em: <http://docs.jboss.org/


hibernate/jpa/2.1/api/>. Acesso em: 17/07/2017.

INTERFACE Thread.UncaughtExceptionHandler. Disponvel em: <https://docs.oracle.


com/javase/7/docs/api/java/lang/Thread.UncaughtExceptionHandler.html>. Acesso em:
29/06/2017.

JANK, J. Issue Tracking Systems. 2009 MASARYK UNIVERSITY FACULTY OF


INFORMATICS. Acesso em: 20/07/2017.

KNOW When and Why Code Breaks in Production. 2017. Disponvel em:
<https://www.overops.com/>. Acesso em: 07/07/2017.

LIMA, C. A. C. de. Um modelo de gerenciamento de identidade para segurana de


aplicativos SAAS. 2012 C.E.S.A.R.
Referncias 43

NAZIR, M. Cloud Computing: Overview & Current Research Challenges. IOSR Journal
of Computer Engineering, v. 8, p. 14 22, Dezembro 2012. Acesso em: 10/07/2017.

OLINER, A.; GANAPATHI, A.; XU, W. Advances and Challenges in Log Analysis. Acm
Queue, ACM, 2011.

RAYGUN. 2017. Disponvel em: <https://raygun.com/>. Acesso em: 30/06/2017.

RAYGUN4JAVA. 2017. Disponvel em: <https://github.com/MindscapeHQ/raygun4java>.


Acesso em: 12/07/2017.

ROLLBAR. 2017. Disponvel em: <https://rollbar.com/?dr>. Acesso em: 07/07/2017.

ROLLBAR-JAVA. 2017. Disponvel em: <https://github.com/rollbar/rollbar-java>. Acesso


em: 12/07/2017.

SENTRY. 2017. Disponvel em: <https://sentry.io/welcome/>. Acesso em: 07/07/2017.

SENTRY. 2017. Disponvel em: <https://github.com/getsentry/sentry>. Acesso em:


12/07/2017.

SPINELLIS, D. Debuggers and Logging Frameworks. IEEE SOFTWARE, IEE Computer


Society, p. 98 99, 2006. Acesso em: 18/07/2017.

WHAT is Bug Tracking? 2017. Disponvel em: <https://airbrake.io/what-is-bug-tracking>.


Acesso em: 20/07/2017.

WHAT IS ISSUE TRACKING? 2008. Disponvel em: <https://sifterapp.com/academy/


overview/why/>. Acesso em: 2017.

ZHANG, Y. Automatic software deployment using user-level virtualization for


cloud-computing. 2013.

ZHITNITSKY, A. 5 Error Tracking Tools Java Developers Should Know. 2014. White
Paper.