ether-observability-core provee contratos para health checks (liveness/readiness), generación de request IDs y registro de tiempos de operación, sin dependencias externas.
Instalación
<dependency>
<groupId>dev.rafex.ether.observability.core</groupId>
<artifactId>ether-observability-core</artifactId>
<version>8.0.0-SNAPSHOT</version>
</dependency>
Health checks — ProbeCheck y ProbeAggregator
Implementar una sonda
ProbeCheck dbCheck = () -> {
try {
db.query(SqlQuery.of("SELECT 1"), rs -> null);
return ProbeResult.up("database");
} catch (Exception e) {
return ProbeResult.down("database", e.getMessage());
}
};
ProbeCheck cacheCheck = () -> {
boolean ok = cache.ping();
return ok
:
ProbeResult.degraded(
"cache",
"Cache lento o no disponible");
};
record ProbeResult(String name, ProbeKind kind, ProbeStatus status, String detail)
Resultado individual de una verificación de probe.
Agregar sondas
List<ProbeCheck> checks = List.of(dbCheck, cacheCheck);
ProbeReport liveness = ProbeAggregator.aggregate(ProbeKind.LIVENESS, checks);
ProbeReport readiness = ProbeAggregator.aggregate(ProbeKind.READINESS, checks);
Interpretar el resultado
ProbeReport report = ProbeAggregator.aggregate(ProbeKind.READINESS, checks);
ProbeStatus overall = report.status();
ProbeKind kind = report.kind();
for (ProbeResult r : report.results()) {
System.out.printf("%s → %s (%s)%n", r.name(), r.status(), r.detail());
}
Map<String, ProbeStatus> byName = report.byName();
ProbeStatus
| Estado | Significado |
| UP | El componente funciona correctamente |
| DOWN | El componente no responde — impacto crítico |
| DEGRADED | Funcionamiento parcial — impacto no crítico |
RequestIdGenerator — IDs de correlación
RequestIdGenerator gen = new UuidRequestIdGenerator();
String requestId = gen.generate();
LOG.info("Procesando request id={}", requestId);
TimingRecorder — medir duración de operaciones
TimingRecorder recorder = ;
TimingSample sample = recorder.start("user.create");
try {
userService.create(request);
} finally {
recorder.stop(sample);
}
Exponer endpoints de salud con ether-http-jetty12
public class AppContainer {
public List<ProbeCheck> livenessChecks() {
return List.of(() -> ProbeResult.up("app"));
}
public List<ProbeCheck> readinessChecks() {
return List.of(dbCheck, cacheCheck);
}
}
Los endpoints /health/live y /health/ready devuelven JSON con el ProbeReport.
Más información