Análise comparativa de ferramentas

de monitoramento de erros para
aplicações Java
Natanael Souza dos Santos
Introdução
● Paradigma da computação em nuvem
○ Benefícios
■ elasticidade, flexibilidade, on-demand, otimização
de recursos de hardware e software
○ Aumento da complexidade
○ Serviços de monitoramento
■ Monitoramento de datacenters, monitoramento de
billing, gerenciamento de performance...
Introdução
● Ambientes de desenvolvimento de software
● Controle do ambiente de produção
Conceitos e Ferramentas
● Serviço de monitoramento de erros
● SaaS
Objetivos dos Errors Trackers
● Clientes Felizes
○ Desenvolvedor não tem conhecimento dos erros
○ Falta de conhecimento técnico por parte dos usuários
● Tempo é Dinheiro
○ Processo custoso
○ Análise de código fonte
○ Análise de arquivos de logging
○ Depuração interativa
Ferramentas de monitoramento de erros

Linguagem Código Versão Atualizado
Aberto

Airbreake Multi Sim 2.2.8 06/2013

Overops JVM Based Não 4.8.12 07/2017

Raygun Multi Sim 2.2.0 12/2016

Rollbar Multi Sim 0.5.4 05/2017

Sentry Multi Sim 8.18.0 07/2017
Integração com outros serviços
Ambiente de Teste e Metodologia
● Acer, Aspire E 15, E5-573-54ZV
● Intel® Core™ i5-5200U
● 8GB DDR3 L
● 1000 GB HDD
● Fedora 23
● OpenJDK Runtime Environment (build 1.8.0_111-b16)
● Eclipse Neon
● Hibernate 5.2.10
Ambiente de teste de metodologia
for(int i = 0; i < 100000; i++){
try{
manager.getTransaction().begin();
manager.persist(person);
manager.getTransaction().commit();

}catch(Exception e){
e.printStackTrace();
}
}

}
Airbreake
● Log4J
● Appender
Airbreake
log4j.rootLogger=INFO, stdout, airbrake
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d,%p] [%c{1}.%M:%L] %m%n
log4j.appender.airbrake=airbrake.AirbrakeAppender
log4j.appender.airbrake.api_key=YOUR_KEY_HERE
log4j.appender.airbrake.env=development
//log4j.appender.airbrake.env=production
//log4j.appender.airbrake.env=test
log4j.appender.airbrake.enabled=true
log4j.appender.airbrake.url=http://api.airbrake.io/notifier_api/v2/notices
Airbreake 01
Airbreake 02
Raygun
class MyExceptionHandler implements Thread.UncaughtExceptionHandler
{
public void uncaughtException(Thread t, Throwable e) {
RaygunClient client = new
RaygunClient("nQH7dhoBpU/Zc4ltm5Y/sA==");
client.Send(e);
}
}

Thread.setDefaultUncaughtExceptionHandler(new MyExceptionHandler());
Raygun 01
Raygun 02
Rollbar
● Instância própria
● UncaughtExceptions
● Manual

public static final Rollbar rollbar = new
Rollbar("3f6b5d9ab319423db0b4cdf2f49dbe11", "production");

rollbar.handleUncaughtErrors();

rollbar.error(e);

rollbar.warning(e);

rollbar.critical(e);
Rollbar 01
Rollbar 02
Sentry
● Frameworks de logging
● Log4j
● Log4j2
● Logback
● Java.util.logging

Sentry.init("https://public:private@host:port/1");
Sentry 01
Sentry 02
Overops
● 0 código
● JVM
● Micro agent java
● Daemon collector
● 1% overhead
Overops Worfklow
Overops 01
Overops 02
Overops
● Memory
● Garbage Collection
● JVM Process
● Class Loading
● JIT Compilation
● Operating System
● Environment Variables
● System Properties
● Active Threads
Resultados
● Parâmetros
○ Instalação
○ Modificabilidade de código
● Escala
○ Atende
○ Atende parcialmente
○ Não atende
Resultados

Error Tracker Instalação

Airbreake Atende Parcialmente

Raygun Atende

Rollbar Atende

Sentry Atende Parcialmente

Overops Atende
Resultados

Error Tracker Modificabilidade de Código

Airbreake Atende Parcialmente

Raygun Atende Parcialmente

Rollbar Atende Parcialmente

Sentry Atende Parcialmente

Overops Atende
Conclusão e trabalhos futuros
● Overops
● Outras Métricas
○ UX
○ Capacidade de captura de erros
○ Capacidade de notificação
○ Inegração
● Desenvolver uma ferramenta de monitoramento de erro
Referências
AIRBREAKE. Disponível em: <https://airbrake.io/>. Acesso em: 30/06/2017.
AIRBREAKE-JAVA. Disponível em: <https://github.com/airbrake/airbrake-java>. Acesso
em: 12/07/2017.
APPENDERS. Disponível em: <https://logging.apache.org/log4j/2.x/manual/appenders.
html>. Acesso em: 29/06/2017.
INTERFACE Thread.UncaughtExceptionHandler. Disponível em: <https://docs.oracle.
com/javase/7/docs/api/java/lang/Thread.UncaughtExceptionHandler.html>. Acesso em:
29/06/2017.
KNOW When and Why Code Breaks in Production. Disponível em: <https:
//www.overops.com/>. Acesso em: 07/07/2017.
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.
RAYGUN. Disponível em: <https://raygun.com/>. Acesso em: 30/06/2017.
Referências
RAYGUN4JAVA. Disponível em: <https://github.com/MindscapeHQ/raygun4java>.
Acesso em: 12/07/2017.
ROLLBAR. Disponível em: <https://rollbar.com/?dr>. Acesso em: 07/07/2017.
ROLLBAR-JAVA. Disponível em: <https://github.com/rollbar/rollbar-java>. Acesso em:
12/07/2017.
SENTRY. Disponível em: <https://sentry.io/welcome/>. Acesso em: 07/07/2017.
SENTRY. Disponível em: <https://github.com/getsentry/sentry>.
Obrigado