Skip to main content

Implement observability

Add logging, metrics, and tracing to monitor application health.

Logging

Frontend logging

Use structured logging:

import { logger } from "@/lib/logger";

logger.info("Dataset fetched", { datasetId, userId });
logger.error("Fetch failed", { error, context });

Backend logging

Use SLF4J with Quarkus:

@Inject
Logger log;

public Dataset findById(Long id) {
log.info("Fetching dataset {}", id);
Dataset dataset = repository.findById(id);
log.debug("Found dataset: {}", dataset);
return dataset;
}

Metrics

Quarkus metrics

Enable Micrometer metrics in application.properties:

quarkus.micrometer.enabled=true
quarkus.micrometer.export.prometheus.enabled=true

Access metrics at /q/metrics.

Custom metrics

Track business metrics:

@Inject
MeterRegistry registry;

public void recordDatasetCreation() {
registry.counter("datasets.created").increment();
}

Distributed tracing

Enable OpenTelemetry for request tracing across services:

quarkus.opentelemetry.enabled=true
quarkus.opentelemetry.tracer.exporter.otlp.endpoint=http://jaeger:4317

View traces in Jaeger UI to debug cross-service issues.