Quarkus Micrometer deployment module that provides build-time processing for metrics collection and monitoring capabilities in Quarkus applications
—
Processors that configure and expose metrics through various registry endpoints, providing different formats and protocols for metrics consumption by monitoring systems.
Build item representing a configured meter registry endpoint that will be exposed by the application.
/**
* Build item representing a configured meter registry endpoint
*/
public final class RegistryBuildItem extends MultiBuildItem {
/**
* Create a registry build item with name and path
* @param name The name identifier of the registry
* @param path The HTTP path where the registry will be exposed
*/
public RegistryBuildItem(String name, String path);
/**
* Get the registry name
* @return The name identifier of this registry
*/
public String name();
/**
* Get the registry path
* @return The HTTP path where this registry is exposed
*/
public String path();
}Configures Prometheus meter registry and creates HTTP endpoints for Prometheus metrics scraping.
/**
* Deployment processor for Prometheus registry configuration
*/
@BuildSteps
public class PrometheusRegistryProcessor {
/**
* Creates Prometheus registry provider
* @param config Micrometer configuration
* @param additionalBeans Producer for additional bean build items
* @return MicrometerRegistryProviderBuildItem for Prometheus registry
*/
@BuildStep
public MicrometerRegistryProviderBuildItem createPrometheusRegistry(
MicrometerConfig config,
BuildProducer<AdditionalBeanBuildItem> additionalBeans
);
/**
* Registers OpenTelemetry exemplar sampler provider when tracing is enabled
* @param additionalBeans Producer for additional bean build items
*/
@BuildStep(onlyIf = TraceEnabled.class)
public void registerOpentelemetryExemplarSamplerProvider(
BuildProducer<AdditionalBeanBuildItem> additionalBeans
);
/**
* Registers empty exemplar provider when tracing is disabled
* @param additionalBeans Producer for additional bean build items
*/
@BuildStep(onlyIfNot = TraceEnabled.class)
public void registerEmptyExamplarProvider(
BuildProducer<AdditionalBeanBuildItem> additionalBeans
);
/**
* Creates Prometheus metrics endpoints
* @param routes Producer for route build items
* @param registries Producer for registry build items
* @param mConfig Micrometer configuration
* @param nonApplicationRootPathBuildItem Non-application root path configuration
* @param managementBuildTimeConfig Management interface build-time configuration
* @param launchModeBuildItem Launch mode build item
* @param recorder Prometheus recorder for runtime operations
*/
@BuildStep
@Record(value = ExecutionTime.STATIC_INIT)
public void createPrometheusRoute(
BuildProducer<RouteBuildItem> routes,
BuildProducer<RegistryBuildItem> registries,
MicrometerConfig mConfig,
NonApplicationRootPathBuildItem nonApplicationRootPathBuildItem,
ManagementInterfaceBuildTimeConfig managementBuildTimeConfig,
LaunchModeBuildItem launchModeBuildItem,
PrometheusRecorder recorder
);
// Enablement conditions
public static class PrometheusEnabled implements BooleanSupplier;
public static class TraceEnabled implements BooleanSupplier;
}Usage Examples:
// Prometheus registry provides metrics at /q/metrics endpoint by default
// Example HTTP request to get Prometheus metrics:
// GET /q/metrics
// Content-Type: text/plain; version=0.0.4; charset=utf-8
// Example Prometheus metrics output:
# HELP http_server_requests_seconds Duration of HTTP server request handling
# TYPE http_server_requests_seconds summary
http_server_requests_seconds{method="GET",outcome="SUCCESS",status="200",uri="/api/users",quantile="0.5",} 0.002
http_server_requests_seconds{method="GET",outcome="SUCCESS",status="200",uri="/api/users",quantile="0.95",} 0.005
http_server_requests_seconds_count{method="GET",outcome="SUCCESS",status="200",uri="/api/users",} 42.0
http_server_requests_seconds_sum{method="GET",outcome="SUCCESS",status="200",uri="/api/users",} 0.123Configures JSON meter registry and creates HTTP endpoints for JSON-formatted metrics output.
/**
* Deployment processor for JSON registry configuration
*/
@BuildSteps
public class JsonRegistryProcessor {
/**
* Initializes JSON registry and endpoints
* @param config Micrometer configuration
* @param registryProviders Producer for registry provider build items
* @param routes Producer for route build items
* @param additionalBeans Producer for additional bean build items
* @param registries Producer for registry build items
* @param nonApplicationRootPathBuildItem Non-application root path configuration
* @param managementBuildTimeConfig Management interface build-time configuration
* @param launchModeBuildItem Launch mode build item
* @param recorder JSON recorder for runtime operations
*/
@BuildStep
@Record(ExecutionTime.STATIC_INIT)
public void initializeJsonRegistry(
MicrometerConfig config,
BuildProducer<MicrometerRegistryProviderBuildItem> registryProviders,
BuildProducer<RouteBuildItem> routes,
BuildProducer<AdditionalBeanBuildItem> additionalBeans,
BuildProducer<RegistryBuildItem> registries,
NonApplicationRootPathBuildItem nonApplicationRootPathBuildItem,
ManagementInterfaceBuildTimeConfig managementBuildTimeConfig,
LaunchModeBuildItem launchModeBuildItem,
JsonRecorder recorder
);
// Enablement condition
public static class JsonRegistryEnabled implements BooleanSupplier;
}Usage Examples:
// JSON registry provides metrics at /q/metrics/json endpoint by default
// Example HTTP request to get JSON metrics:
// GET /q/metrics/json
// Content-Type: application/json
// Example JSON metrics output:
{
"names": ["http.server.requests", "jvm.memory.used", "system.cpu.usage"],
"measurements": [
{
"statistic": "COUNT",
"value": 42.0
},
{
"statistic": "TOTAL_TIME",
"value": 0.123
}
],
"availableTags": [
{
"tag": "method",
"values": ["GET", "POST", "PUT", "DELETE"]
},
{
"tag": "status",
"values": ["200", "404", "500"]
}
]
}// Prometheus registry class constants
public static final String REGISTRY_CLASS_NAME = "io.micrometer.prometheus.PrometheusMeterRegistry";
public static final Class<?> REGISTRY_CLASS; // Lazily loaded class reference
// Registry configuration utilities
public static boolean isPrometheusEnabled() {
return ConfigProvider.getConfig()
.getOptionalValue("quarkus.micrometer.export.prometheus.enabled", Boolean.class)
.orElse(true);
}
public static boolean isJsonRegistryEnabled() {
return ConfigProvider.getConfig()
.getOptionalValue("quarkus.micrometer.export.json.enabled", Boolean.class)
.orElse(false);
}// Example: Adding a custom registry export processor
@BuildSteps
public class CustomRegistryProcessor {
@BuildStep(onlyIf = CustomRegistryEnabled.class)
MicrometerRegistryProviderBuildItem createCustomRegistry() {
return new MicrometerRegistryProviderBuildItem(CustomMeterRegistry.class);
}
@BuildStep(onlyIf = CustomRegistryEnabled.class)
@Record(ExecutionTime.RUNTIME_INIT)
List<RouteBuildItem> createCustomEndpoints(
List<RegistryBuildItem> registries,
CustomRegistryRecorder recorder
) {
return List.of(
RouteBuildItem.builder()
.route("/q/metrics/custom")
.handler(recorder.createCustomHandler())
.build()
);
}
@BuildStep(onlyIf = CustomRegistryEnabled.class)
RegistryBuildItem registerCustomEndpoint() {
return new RegistryBuildItem("custom", "/q/metrics/custom");
}
public static class CustomRegistryEnabled implements BooleanSupplier {
@Override
public boolean getAsBoolean() {
return ConfigProvider.getConfig()
.getOptionalValue("quarkus.micrometer.export.custom.enabled", Boolean.class)
.orElse(false);
}
}
}The Prometheus processor includes special support for OpenTelemetry exemplars when tracing is enabled:
/**
* OpenTelemetry exemplar integration when both Prometheus and tracing are enabled
*/
@BuildStep(onlyIf = {PrometheusEnabled.class, TraceEnabled.class})
UnremovableBeanBuildItem registerOpentelemetryExemplarSamplerProvider() {
return UnremovableBeanBuildItem.beanClassNames(
"io.quarkus.micrometer.runtime.export.exemplars.OpenTelemetryExemplarSamplerProvider"
);
}Configuration Examples:
# Enable Prometheus metrics (enabled by default)
quarkus.micrometer.export.prometheus.enabled=true
# Customize Prometheus endpoint path
quarkus.micrometer.export.prometheus.path=/custom-metrics
# Enable JSON metrics export
quarkus.micrometer.export.json.enabled=true
# Enable OpenTelemetry exemplars for Prometheus
quarkus.micrometer.export.prometheus.enable-exemplars=true
# Configure registry-specific settings
quarkus.micrometer.export.prometheus.step=PT1M
quarkus.micrometer.export.prometheus.descriptions=trueInstall with Tessl CLI
npx tessl i tessl/maven-io-quarkus--quarkus-micrometer-deployment