or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

configuration.mdhttp-integration.mdindex.mdruntime-api.md
tile.json

tessl/maven-io-quarkus--quarkus-smallrye-metrics

Quarkus extension that integrates SmallRye Metrics with MicroProfile Metrics for application monitoring and observability

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/io.quarkus/quarkus-smallrye-metrics@3.23.x

To install, run

npx @tessl/cli install tessl/maven-io-quarkus--quarkus-smallrye-metrics@3.23.0

index.mddocs/

Quarkus SmallRye Metrics

Quarkus 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.

Package Information

  • Package Name: quarkus-smallrye-metrics
  • Package Type: maven
  • Language: Java
  • Group ID: io.quarkus
  • Artifact ID: quarkus-smallrye-metrics
  • Installation: Add to Maven dependencies
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-smallrye-metrics</artifactId>
</dependency>

Core Imports

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.*;

Basic Usage

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());
    }
}

Architecture

The extension consists of several key components:

  • Runtime Module: Core classes for metrics collection and HTTP exposure
  • Build-time Processing: Deployment-time metric registration and configuration via SmallRyeMetricsRecorder
  • HTTP Integration: JAX-RS filters for automatic REST endpoint metrics collection
  • MicroProfile Metrics API: Full compatibility with MP Metrics annotations and programmatic API
  • Vert.x Integration: HTTP handler for /metrics endpoint exposure
  • CDI Integration: Metric registry injection and lifecycle management

Capabilities

Core Runtime API

Essential 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);
}

Core Runtime API

HTTP Integration

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);
}

HTTP Integration

Configuration

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
}

Configuration

Migration Notes

This extension is deprecated. For new applications:

  • Use quarkus-micrometer for metrics collection
  • Use the management interface for operational metrics exposure
  • Enable Micrometer compatibility mode for transition: quarkus.smallrye-metrics.micrometer.compatibility=true

MicroProfile Metrics Integration

The 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 metrics

Metrics are automatically exposed at /q/metrics endpoint in Prometheus format, with support for JSON format via Accept headers.