Você está na página 1de 34
Análise comparativa de ferramentas de monitoramento de erros para aplicações Java Natanael Souza dos Santos
Análise comparativa de ferramentas de monitoramento de erros para aplicações Java Natanael Souza dos Santos

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

Integração com outros serviços
Integração com outros serviços
Integração com outros serviços
Integração com outros serviços
Integração com outros serviços
Integração com outros serviços
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

● 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 01

Airbreake 02

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 01

Raygun 02

Raygun 02

Rollbar ● Instância própria ● UncaughtExceptions ● Manual public static final Rollbar rollbar = new

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 01

Rollbar 02

Rollbar 02

Sentry

● Frameworks de logging

● Log4j

● Log4j2

● Logback

● Java.util.logging

Sentry.init("https://public:private@host:port/1");

Sentry 01

Sentry 01

Sentry 02

Sentry 02

Overops

● 0 código

● JVM

● Micro agent java

● Daemon collector

● 1% overhead

Overops Worfklow

Overops Worfklow

Overops 01

Overops 01

Overops 02

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.

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

Obrigado