This was originally posted on Takipi blog. Takipi tells you when and why code breaks in production. Learn more.
Con el ecosistema Java que sigue avanzando, las aplicaciones web sirviendo un número creciente de solicitudes y la demanda de los usuarios de un alto desempeño, nace una nueva era de herramientas modernas de desarrollo. Un entorno ágil con implementaciones rápidas requiere un seguimiento de errores, así como que se obtenga información sobre el comportamiento de la aplicación a un nivel que resulta insostenible para los métodos tradicionales. En este artículo, hemos decidido reunir cinco de esas herramientas, ver cómo se integran con Java y averiguar qué clase de trucos tienen bajo la manga. Es tiempo de aplastar a algunos errores (bugs).
Raygun, de Mindscape, es un sistema web de administración de errores que realiza un seguimiento de las excepciones arrojadas por tus aplicaciones. Soporta varios lenguajes de programación web, móvil y de escritorio, tales como Java, Scala, .NET, Python, PHP y JavaScript. Además de todo eso, es posible enviar errores a Raygun a través de una API REST y algunos otros Proveedores (así es como llaman a las integraciones entre lenguajes y frameworks) llegaron a existir gracias al compromiso y esfuerzo de la comunidad de desarrolladores.
Características clave:
Agrupamiento de errores: se presenta cada ocurrencia de un error con acceso a cada una de sus instancias, incluyendo la traza de la pila (stack trace).
Búsqueda en todo el texto: se puede buscar en los grupos de errores, así como en todos los datos recolectados.
Vista de la actividad de la aplicación: se muestran todas las acciones en un grupo de errores para que todo tu equipo las pueda ver; actualizaciones de estado, comentarios y más.
Usuarios afectados: Para cada error, aparece la cantidad de usuarios afectados.
Integraciones externas: Github, Bitbucket, Asana, JIRA, HipChat y muchas más.
Desde la óptica de Java: Para usar Raygun con Java, vas a tener que agregar algunas dependencias a tu archivo pom.xml si estás usando Maven o sino añadir los jars de forma manual. El segundo paso sería agregar un UncaughtExceptionHandler, lo cual crearía una instancia de RaygunClient y le enviaría tus excepciones a él. Asimismo, también puedes añadir campos de datos personalizados a tus excepciones y enviarlos todos juntos a Raygun. Aquí puedes ver una explicación más detallada.
Entre bambalinas: Te presentamos a Robie Robot, el operador certificado de Raygun. Como en el auténtico Ray Gun.
Puedes encontrarlo en: https://raygun.io
Iniciado como un proyecto complementario, Sentry es una solución web de código abierto que actúa como una plataforma de agregación y registro de eventos en tiempo real. Monitorea los errores y muestra cuándo, dónde y a quién le ocurren, comprometiéndose a hacerlo sin limitarse a confiar únicamente en el feedback brindado por los usuarios. Algunos de los lenguajes y frameworks soportados son Ruby, Python, JS, Java, Django, iOS, .NET y la lista sigue.
Características clave:
Ve el impacto de nuevas implementaciones en tiempo real
Brinda soporte a usuarios en particular interrumpidos por un error
Detecta y frustra fraudes en el momento en que ocurre el intento: notificaciones de cantidades poco habituales de fallas en compras, autenticación y otras áreas delicadas
Integraciones externas: GitHub, HipChat, Heroku, y muchas más
Desde la óptica de Java: El cliente Java de Sentry se llama Raven y soporta los frameworks de registro más populares en la actualidad, como por ejemplo java.util.logging, Log4j, Log4j2 y Logback con Slf4j. También ofrece un método independiente para enviarle los eventos directamente a Sentry. Para configurar Sentry para Java con Logback, por ejemplo, tienes que añadir las dependencias de forma manual o a través de Maven, luego agregar una nueva configuración de adicionador (appender), y está pronto. Puedes leer las instrucciones aquí.
Entre bambalinas: Sentry fue un proyecto interno de Disqus, allá por 2010, pensado para resolver el registro de excepciones en una aplicación Django, por Chris Jennings y David Cramer
Puedes encontrarlo en: https://www.getsentry.com/
A diferencia de la mayoría de las herramientas, Takipi es mucho más que un embellecedor de la traza de la pila. Fue creado con un objetivo claro en mente: decirle a los desarrolladores cuándo y por qué el código de producción falla. En cualquier momento en que se lanza una nueva excepción u ocurre un error de registro, Takipi lo captura y te muestra qué estado de variable lo causó, a través de métodos y máquinas. Takipi resaltará esto sobre el código que se ejecutó precisamente en el momento del error, para que puedas analizar la excepción como si estuvieras allí cuando ocurrió.
Características clave:
Detección: excepciones capturadas/no capturadas, errores registrados y http.
Priorización: cuán a menudo los errores ocurren a través de tu clúster, si se producen con código nuevo o modificado, y si la frecuencia está aumentando.
Análisis: puedes ver el estado de variable y el código en el momento del inconveniente, aún a través de distintas máquinas y aplicaciones.
Fácil de instalar: no necesitas ningún código, ni realizar cambios en la configuración.
Menos de 2 % de overhead.
Desde la óptica de Java: Takipi fue creado para ser utilizado en entornos de producción en Java y Scala. La instalación dura menos de un minuto e incluye la adición de un agente Java a tu JVM.
Entre bambalinas: Cada tipo de excepción y cada error tiene un monstruo en particular que lo representa. Puedes averiguar más sobre estos monstruos aquí.
Puedes encontrarlo en: http://www.takipi.com/
Otra herramienta que tiene el rastreo de excepciones en la mira es Airbrake, de Rackspace, con la misión declarada de “No más búsquedas de archivos de registro”. Brinda a sus usuarios una interfaz web que contiene un panel de administración con los detalles de los errores y una vista específica para cada aplicación. Los lenguajes que soporta son Ruby, PHP, Java, .NET, Python, y hasta… Swift.
Características clave:
Trazas de pila detalladas, agrupadas por tipo de error, usuario y variables de entorno
Productividad en equipo: Filtra y distingue los errores importantes del ruido
Colaboración en equipo: Ve quién está causando errores y quién los está arreglando
Integraciones externas: HipChat, GitHub, JIRA, Pivotal y arriba de 30 más
Desde la óptica de Java: Oficialmente, Airbrake únicamente soporta Log4j, aunque también hay una librería de Logback disponible. Lo que le falta por ahora es el soporte para Log4j2. El proceso de instalación es muy parecido al de Sentry, agregando algunas dependencias de forma manual o a través de Maven, luego añadiendo un adicionador, y todo pronto. De manera similar, una forma directa de enviar mensajes a Airbrake es hacerlo a través de AirbrakeNotice y AirbrakeNotifier. Puedes encontrar más información al respecto aquí.
Entre bambalinas: Airbrake fue adquirida por Exceptional, a su vez adquirida por Rackspace.
Puedes encontrarlo en: https://airbrake.io/
Actualmente en beta, Stack Hunter brinda una herramienta con alojamiento propio para rastrear tus excepciones Java. Ese tipo de alojamiento representa un cambio con respecto a otras herramientas anteriores. A no ser por eso, apunta a proveer posibilidades similares para informar a los desarrolladores sobre sus excepciones y ayudarlos a resolverlas más rápido.
Características clave:
Una única interfaz web, de alojamiento propio, para ver todas las excepciones
Recolección de datos de las trazas de pila y del contexto que incluye estadísticas clave, tales como excepciones totales, excepciones únicas, usuarios afectados y sesiones afectadas
Alertas inmediatas por correo electrónico cuando ocurren excepciones
Agrupación de excepciones por causa raíz
Desde la óptica de Java: Construido específicamente para Java, StackHunter se ejecuta en cualquier contenedor de servlets que corra Java 6 en adelante. La instalación incluye la ejecución de StackHunter en un servlet local, la configuración de un servidor de correo saliente para enviar alertas, así como la configuración de la aplicación de la que deseas tener registros. Aquí puedes leer instrucciones más detalladas.
Entre bambalinas: StackHunter es desarrollado por Dele Taylor, que también trabaja en Data Pipeline, una herramienta para transformar y migrar datos en Java.
Puedes encontrarlo en: http://stackhunter.com/
Otro abordaje al rastreo de errores que es digno de mención aquí es el usado por ABRT, una herramienta automática de detección e informes de errores del ecosistema Fedora, un proyecto comunitario promovido por Red Hat. A diferencia de las cinco herramientas que analizamos, esta no está pensada exclusivamente para ser utilizada por los desarrolladores de la aplicación, sino también por sus propios usuarios. De esta manera, Red Hat recibe informes de errores con mucho mayor contexto que, de otra forma, hubiera sido muy difícil de entender y depurar.
Desde la óptica de Java: El soporte para excepciones Java está todavía en etapa de prueba del concepto. Aquí puedes encontrar un conector Java desarrollado por Jakub Filák.
Entre bambalinas: ABRT es un proyecto de código abierto desarrollado por Red Hat.
Puedes encontrarlo en: https://github.com/abrt/abrt
¿Nos faltó alguna otra herramienta? ¿Cómo rastreas tú las excepciones? Déjanos saberlo en la sección de comentarios que aparece más abajo.