ether-glowroot-jetty12 integra el agente APM Glowroot con el servidor Jetty 12 de Ether, añadiendo visibilidad de transacciones, tiempos de respuesta, contexto de usuario y request IDs sin modificar el código de dominio.
Instalación
<dependency>
<groupId>dev.rafex.ether.glowroot.jetty12</groupId>
<artifactId>ether-glowroot-jetty12</artifactId>
<version>8.0.0-SNAPSHOT</version>
</dependency>
Glowroot también requiere el agente Java: -javaagent:glowroot/glowroot.jar
Middlewares disponibles
| Clase | Propósito |
| GlowrootHttpMiddleware | Middleware principal — marca transacciones HTTP |
| GlowrootSlowThresholdMiddleware | Detecta y etiqueta requests lentos |
| GlowrootHealthExclusionMiddleware | Excluye /health/** de las métricas |
| GlowrootAuthUserMiddleware | Propaga el usuario autenticado al contexto APM |
| GlowrootRequestIdMiddleware | Añade el request ID al span de Glowroot |
| GlowrootStatusCapturingMiddleware | Captura el código HTTP de respuesta |
Registrar los middlewares en JettyModule
public class AppModule implements JettyModule {
@Override
public void configure(JettyModuleContext ctx) {
ctx.middleware(new GlowrootHttpMiddleware());
ctx.middleware(new GlowrootHealthExclusionMiddleware());
ctx.middleware(new GlowrootRequestIdMiddleware());
ctx.middleware(new GlowrootAuthUserMiddleware());
ctx.middleware(new GlowrootStatusCapturingMiddleware());
ctx.middleware(new GlowrootSlowThresholdMiddleware(Duration.ofSeconds(2)));
ctx.middleware(new LoggingMiddleware());
ctx.middleware(new CorsMiddleware(container.securityProfile().cors()));
ctx.route(Route.of("/users", Set.of("GET", "POST")), new UsersResource(container));
}
}
GlowrootWebSocketEndpointWrapper — APM para WebSockets
ctx.websocket(WebSocketRoute.of("/chat/{room}",
new GlowrootWebSocketEndpointWrapper(
new ChatEndpoint(),
"chat"
)
));
GlowrootJettyHandler — integración de bajo nivel
Handler gHandler = new GlowrootJettyHandler(appHandler);
Arrancar con el agente Glowroot
java \
-javaagent:glowroot/glowroot.jar \
-Dglowroot.data.dir=/var/glowroot \
-jar app.jar
Glowroot expone su interfaz en http://localhost:4000 por defecto.
Qué se ve en Glowroot
- Transacciones HTTP por ruta (GET /users, POST /users/{id}, etc.)
- Tiempo de respuesta con percentiles (P50, P95, P99)
- Queries SQL (si usas ether-jdbc) con tiempo y texto
- Errores clasificados por tipo y stack trace
- Usuario autenticado en cada transacción (via GlowrootAuthUserMiddleware)
- Request ID para correlación con logs
- Requests lentos destacados según el umbral configurado
Más información