# Micrometer — Application Metrics Facade for the JVM > Micrometer is a vendor-neutral application observability facade for the JVM that provides a simple API for collecting metrics and exporting them to monitoring systems like Prometheus, Datadog, and Grafana. ## Install Save as a script file and run: # Micrometer — Application Metrics Facade for the JVM ## Quick Use ```java // Add dependency: io.micrometer:micrometer-registry-prometheus:1.13.0 MeterRegistry registry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT); Counter requestCounter = registry.counter("http.requests", "method", "GET"); requestCounter.increment(); Timer.Sample sample = Timer.start(registry); // ... do work ... sample.stop(registry.timer("http.request.duration", "endpoint", "/api")); ``` ## Introduction Micrometer is the metrics collection facade for JVM-based applications, often called the SLF4J of metrics. It provides a vendor-neutral API for recording application metrics — counters, gauges, timers, distribution summaries, and histograms — and ships them to the monitoring backend of your choice. Micrometer is the default metrics library in Spring Boot Actuator. ## What Micrometer Does - Provides a unified API for recording counters, gauges, timers, and distribution summaries in JVM applications - Exports metrics to 15+ monitoring systems including Prometheus, Datadog, New Relic, InfluxDB, and CloudWatch - Tracks JVM internals automatically: memory usage, garbage collection, thread pools, and class loading - Records HTTP server and client metrics with automatic dimensional tagging for Spring Boot applications - Supports histogram and percentile computation for latency distribution analysis ## Architecture Overview Micrometer defines a MeterRegistry abstraction that each monitoring backend implements. Application code records metrics through Meter objects (Counter, Timer, Gauge, DistributionSummary) bound to a registry. Tags (key-value pairs) add dimensions to every metric for filtering and grouping. Composite registries allow publishing the same metrics to multiple backends simultaneously. In Spring Boot, auto-configuration creates the appropriate registry bean and binds default JVM and HTTP metrics automatically. ## Self-Hosting & Configuration - Add the core `micrometer-core` dependency plus the registry module for your monitoring backend - In Spring Boot, add `micrometer-registry-prometheus` and metrics are automatically exposed at `/actuator/prometheus` - Configure common tags in `application.properties` to add environment, service name, or region labels to all metrics - Customize metric names and tags using `MeterFilter` beans for renaming, dropping, or transforming meters - Set histogram bucket boundaries and percentile targets for timer and distribution summary metrics ## Key Features - Vendor-neutral API — switch monitoring backends by changing a dependency, not application code - Dimensional metrics with tags enable flexible filtering, grouping, and aggregation in dashboards - Automatic instrumentation for Spring MVC, WebFlux, JDBC, Kafka, and cache libraries - Rate aggregation and histogram support built into timers and distribution summaries - Active maintenance by the Spring team with releases aligned to Spring Boot versions ## Comparison with Similar Tools - **Prometheus Java Client** — Direct Prometheus instrumentation without the abstraction layer; lower overhead but locks you into one backend - **Dropwizard Metrics** — Predecessor metrics library with codahale-style naming; lacks dimensional tagging and multi-backend support - **OpenTelemetry Java SDK** — Broader observability scope covering traces, metrics, and logs, but heavier and more complex for metrics-only use cases - **StatsD** — UDP-based metrics aggregation protocol; simple but requires a separate aggregation daemon and lacks rich type support ## FAQ **Q: Is Micrometer only for Spring Boot?** A: No. Micrometer is a standalone library that works with any JVM application. Spring Boot provides auto-configuration, but you can create and manage MeterRegistries manually in any Java, Kotlin, or Groovy project. **Q: Can I send metrics to multiple monitoring systems?** A: Yes. Use a CompositeMeterRegistry to publish the same metrics to Prometheus, Datadog, and any other supported backend simultaneously. **Q: How does Micrometer relate to OpenTelemetry?** A: Micrometer focuses on metrics with a clean, type-safe API. Micrometer Tracing (formerly Spring Cloud Sleuth) bridges to OpenTelemetry for distributed tracing. You can use both together. **Q: Does Micrometer add significant overhead?** A: Micrometer is designed for production use with minimal overhead. Meter lookups are cached, and recording operations are lock-free where possible. ## Sources - https://github.com/micrometer-metrics/micrometer - https://micrometer.io/ --- Source: https://tokrepo.com/en/workflows/asset-5e10f8fe Author: Script Depot