Language: Java
Monitoring / Metrics
Micrometer was developed to unify metrics collection in Java applications, particularly for modern microservices architectures. It integrates seamlessly with Spring Boot and provides adapters for popular monitoring systems like Prometheus, Graphite, Datadog, and New Relic. This enables developers to monitor performance, track business metrics, and diagnose issues in production environments.
Micrometer is a metrics instrumentation library for Java applications that provides a vendor-neutral interface for capturing application metrics and exposing them to monitoring systems. It supports counters, gauges, timers, distribution summaries, and more.
Add dependency in pom.xml:
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-core</artifactId>
<version>1.12.1</version>
</dependency>implementation 'io.micrometer:micrometer-core:1.12.1'Micrometer provides a consistent API to record metrics like counters, gauges, timers, and distribution summaries. Metrics can be tagged for filtering and organized for export to external monitoring systems.
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Counter;
Counter counter = registry.counter("requests_total");
counter.increment();Creates a counter metric and increments it to track the total number of requests.
import io.micrometer.core.instrument.Gauge;
import java.util.concurrent.atomic.AtomicInteger;
AtomicInteger queueSize = new AtomicInteger(0);
Gauge.builder("queue.size", queueSize, AtomicInteger::get)
.register(registry);Creates a gauge metric to monitor the current size of a queue.
import io.micrometer.core.instrument.Timer;
Timer timer = registry.timer("requests_latency");
timer.record(() -> {
// code to measure
});Measures the execution time of a code block and records it as a timer metric.
import io.micrometer.core.instrument.DistributionSummary;
DistributionSummary summary = DistributionSummary.builder("payload.size").register(registry);
summary.record(1024);Records numeric values to track distributions, e.g., payload sizes.
Counter counter = Counter.builder("requests_total")
.tags("endpoint", "/api/users", "status", "success")
.register(registry);
counter.increment();Adds tags to metrics for filtering and aggregation in monitoring systems.
import io.micrometer.prometheus.PrometheusMeterRegistry;
PrometheusMeterRegistry prometheusRegistry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);Configures Micrometer to expose metrics in Prometheus format for scraping by monitoring tools.
Instrument all important business and technical metrics using counters, gauges, and timers.
Use tags to differentiate metrics by dimensions like endpoint, region, or user.
Export metrics to a centralized monitoring system for alerting and visualization.
Avoid high-cardinality tags that can overwhelm the monitoring backend.
Leverage Micrometer integration with Spring Boot Actuator for automatic metrics collection.