Quarkus extension that integrates SmallRye Metrics with MicroProfile Metrics for application monitoring and observability
npx @tessl/cli install tessl/maven-io-quarkus--quarkus-smallrye-metrics@3.23.0Quarkus SmallRye Metrics is a Quarkus extension that integrates SmallRye Metrics with the MicroProfile Metrics specification for comprehensive application monitoring and observability. The extension provides automatic metrics collection, HTTP endpoint exposure, and seamless integration with Quarkus's reactive and imperative programming models.
IMPORTANT: This extension is deprecated in favor of the newer quarkus-micrometer extension. Existing applications should migrate to Micrometer for metrics collection.
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-metrics</artifactId>
</dependency>import io.quarkus.smallrye.metrics.runtime.MetadataHolder;
import io.quarkus.smallrye.metrics.runtime.TagHolder;
import io.quarkus.smallrye.metrics.runtime.SmallRyeMetricsFactory;
import io.quarkus.smallrye.metrics.runtime.SmallRyeMetricsRecorder;
// MicroProfile Metrics API (provided by extension)
import org.eclipse.microprofile.metrics.*;
import org.eclipse.microprofile.metrics.annotation.*;The extension automatically provides MicroProfile Metrics capabilities to your Quarkus application:
import org.eclipse.microprofile.metrics.*;
import org.eclipse.microprofile.metrics.annotation.*;
import jakarta.inject.Inject;
@ApplicationScoped
public class MyService {
@Inject
MetricRegistry registry;
// Annotation-based metrics
@Counted(name = "service_calls", description = "Number of service calls")
public void myServiceMethod() {
// Your business logic
}
@Timed(name = "processing_time", description = "Processing time")
public String processData(String data) {
return data.toUpperCase();
}
// Programmatic metrics
public void createCustomMetric() {
Counter counter = registry.counter("custom_counter");
counter.inc();
Gauge<Long> gauge = registry.gauge("memory_usage",
() -> Runtime.getRuntime().totalMemory());
}
}The extension consists of several key components:
SmallRyeMetricsRecorder/metrics endpoint exposureEssential classes for metrics metadata handling, factory integration, and build-time processing.
public class MetadataHolder {
public String getName();
public void setName(String name);
public MetricType getMetricType();
public void setMetricType(MetricType metricType);
public String getDescription();
public void setDescription(String description);
public static MetadataHolder from(Metadata metadata);
public Metadata toMetadata();
}
public class SmallRyeMetricsFactory implements MetricsFactory {
public boolean metricsSystemSupported(String name);
public MetricBuilder builder(String name, MetricsFactory.Type type);
}JAX-RS filters and Vert.x handlers for automatic metrics collection from REST endpoints and metrics endpoint exposure.
public class QuarkusRestMetricsFilter {
// Automatic REST metrics collection for Quarkus REST
}
public class SmallRyeMetricsHandler implements Handler<RoutingContext> {
public void setMetricsPath(String metricsPath);
public void handle(RoutingContext routingContext);
}Configuration properties and build-time setup for customizing metrics behavior.
public interface SmallRyeMetricsConfig {
// Configuration properties:
// quarkus.smallrye-metrics.path
// quarkus.smallrye-metrics.extensions.enabled
// quarkus.smallrye-metrics.micrometer.compatibility
// quarkus.smallrye-metrics.jaxrs.enabled
}This extension is deprecated. For new applications:
quarkus-micrometer for metrics collectionquarkus.smallrye-metrics.micrometer.compatibility=trueThe extension provides full MicroProfile Metrics API compatibility:
// Standard MicroProfile Metrics annotations
@Counted // Count method invocations
@Timed // Time method execution
@Metered // Measure throughput
@Gauge // Expose gauge values
@ConcurrentGauge // Track concurrent invocations
// Registry types
MetricRegistry.Type.APPLICATION // Application metrics
MetricRegistry.Type.BASE // JVM metrics
MetricRegistry.Type.VENDOR // Vendor-specific metricsMetrics are automatically exposed at /q/metrics endpoint in Prometheus format, with support for JSON format via Accept headers.