CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-io-quarkus--quarkus-micrometer-deployment

Quarkus Micrometer deployment module that provides build-time processing for metrics collection and monitoring capabilities in Quarkus applications

Pending
Overview
Eval results
Files

core-processors.mddocs/

Core Build Items and Processors

Core deployment-time components that handle the fundamental Micrometer configuration and registry management during Quarkus application builds.

Capabilities

MicrometerRegistryProviderBuildItem

Build item for registering MeterRegistry classes in the composite registry during build time.

/**
 * Build item that registers MeterRegistry classes for inclusion in the composite registry
 */
public final class MicrometerRegistryProviderBuildItem extends MultiBuildItem {
    /**
     * Register a MeterRegistry class by Class reference
     * @param providedRegistryClass The MeterRegistry class to register
     */
    public MicrometerRegistryProviderBuildItem(Class<?> providedRegistryClass);
    
    /**
     * Register a MeterRegistry class by class name string
     * @param registryClassName The fully qualified class name of the MeterRegistry
     */
    public MicrometerRegistryProviderBuildItem(String registryClassName);
    
    /**
     * Get the registry class that was registered
     * @return The MeterRegistry class
     */
    public Class<? extends MeterRegistry> getRegistryClass();
    
    /**
     * String representation of the build item
     * @return String describing the registered registry
     */
    public String toString();
}

Usage Examples:

// Register by class reference
@BuildStep
MicrometerRegistryProviderBuildItem prometheusRegistry() {
    return new MicrometerRegistryProviderBuildItem(PrometheusMeterRegistry.class);
}

// Register by class name
@BuildStep  
MicrometerRegistryProviderBuildItem customRegistry() {
    return new MicrometerRegistryProviderBuildItem("com.example.CustomMeterRegistry");
}

RootMeterRegistryBuildItem

Build item providing access to the root MeterRegistry runtime value.

/**
 * Build item that provides runtime value of the root MeterRegistry
 */
public final class RootMeterRegistryBuildItem extends SimpleBuildItem {
    /**
     * Create build item with registry runtime value
     * @param value The runtime value containing the MeterRegistry
     */
    public RootMeterRegistryBuildItem(RuntimeValue<MeterRegistry> value);
    
    /**
     * Get the runtime value of the root MeterRegistry
     * @return RuntimeValue wrapping the MeterRegistry
     */
    public RuntimeValue<MeterRegistry> getValue();
}

MicrometerProcessor

Main deployment processor handling core Micrometer configuration and setup.

/**
 * Main processor for Micrometer configuration and setup
 */
@BuildSteps(onlyIf = MicrometerProcessor.MicrometerEnabled.class)
public class MicrometerProcessor {
    
    /**
     * Creates metrics capability build item when Prometheus is not enabled
     * @return MetricsCapabilityBuildItem for general metrics support
     */
    @BuildStep(onlyIfNot = PrometheusRegistryProcessor.PrometheusEnabled.class)
    public MetricsCapabilityBuildItem metricsCapabilityBuildItem();
    
    /**
     * Registers empty exemplar provider when Prometheus is not enabled
     * @param additionalBeans Producer for additional beans
     */
    @BuildStep(onlyIfNot = PrometheusRegistryProcessor.PrometheusEnabled.class)
    public void registerEmptyExamplarProvider(
        BuildProducer<AdditionalBeanBuildItem> additionalBeans
    );
    
    /**
     * Creates Prometheus-specific metrics capability when Prometheus is enabled
     * @param nonApplicationRootPathBuildItem Non-application root path configuration
     * @return MetricsCapabilityBuildItem for Prometheus metrics
     */
    @BuildStep(onlyIf = PrometheusRegistryProcessor.PrometheusEnabled.class)
    public MetricsCapabilityBuildItem metricsCapabilityPrometheusBuildItem(
        NonApplicationRootPathBuildItem nonApplicationRootPathBuildItem
    );
    
    /**
     * Registers core Micrometer beans and configures reflection for CDI
     * @param indexBuildItem Combined index for annotation processing
     * @param providerClasses Producer for registry provider build items
     * @param reflectiveClasses Producer for reflective class build items
     * @param additionalBeans Producer for additional bean build items
     * @param interceptorBindings Producer for interceptor binding registrar build items
     * @param reflectiveMethods Producer for reflective method build items
     * @return UnremovableBeanBuildItem for core unremovable beans
     */
    @BuildStep
    public UnremovableBeanBuildItem registerAdditionalBeans(
        CombinedIndexBuildItem indexBuildItem,
        BuildProducer<MicrometerRegistryProviderBuildItem> providerClasses,
        BuildProducer<ReflectiveClassBuildItem> reflectiveClasses,
        BuildProducer<AdditionalBeanBuildItem> additionalBeans,
        BuildProducer<InterceptorBindingRegistrarBuildItem> interceptorBindings,
        BuildProducer<ReflectiveMethodBuildItem> reflectiveMethods
    );
    
    /**
     * Configures logging levels for Micrometer components
     * @param logCategoryProducer Producer for log category build items
     */
    @BuildStep
    public void configLoggingLevel(BuildProducer<LogCategoryBuildItem> logCategoryProducer);
    
    /**
     * Creates the root meter registry
     * @param recorder Micrometer recorder for runtime operations
     * @param nonApplicationRootPathBuildItem Non-application root path configuration
     * @return RootMeterRegistryBuildItem with configured registry
     */
    @BuildStep
    @Consume(BeanContainerBuildItem.class)
    @Record(ExecutionTime.STATIC_INIT)
    public RootMeterRegistryBuildItem createRootRegistry(
        MicrometerRecorder recorder,
        NonApplicationRootPathBuildItem nonApplicationRootPathBuildItem
    );
    
    /**
     * Registers static initialization extension metrics
     * @param recorder Micrometer recorder for runtime operations
     * @param metricsFactoryConsumerBuildItems List of metrics factory consumer build items
     */
    @BuildStep
    @Consume(RootMeterRegistryBuildItem.class)
    @Record(ExecutionTime.STATIC_INIT)
    public void registerExtensionMetrics(
        MicrometerRecorder recorder,
        List<MetricsFactoryConsumerBuildItem> metricsFactoryConsumerBuildItems
    );
    
    /**
     * Configures meter registries with customizers and runtime initialization metrics
     * @param recorder Micrometer recorder for runtime operations
     * @param providerClassItems List of registry provider build items
     * @param metricsFactoryConsumerBuildItems List of metrics factory consumer build items
     * @param shutdownContextBuildItem Shutdown context for cleanup
     */
    @BuildStep
    @Consume(RootMeterRegistryBuildItem.class)
    @Consume(LoggingSetupBuildItem.class)
    @Record(ExecutionTime.RUNTIME_INIT)
    public void configureRegistry(
        MicrometerRecorder recorder,
        List<MicrometerRegistryProviderBuildItem> providerClassItems,
        List<MetricsFactoryConsumerBuildItem> metricsFactoryConsumerBuildItems,
        ShutdownContextBuildItem shutdownContextBuildItem
    );
    
    /**
     * Creates DevUI card for development mode (development only)
     * @param registries Available registry build items
     * @return CardPageBuildItem for DevUI integration
     */
    @BuildStep(onlyIf = IsDevelopment.class)
    public CardPageBuildItem createCard(List<RegistryBuildItem> registries);
}

MicrometerConfigAlwaysEnabledProcessor

Always-enabled processor for basic Micrometer configuration that runs regardless of feature enablement.

/**
 * Always-enabled processor for basic configuration
 */
public class MicrometerConfigAlwaysEnabledProcessor {
    
    /**
     * Returns FeatureBuildItem for Micrometer
     * @return Feature build item identifying Micrometer support
     */
    @BuildStep
    public FeatureBuildItem feature();
    
    /**
     * Makes MicrometerConfig unremovable for CDI
     * @return UnremovableBeanBuildItem for config preservation
     */
    @BuildStep
    public UnremovableBeanBuildItem mpConfigAsBean();
}

Core Constants and Utilities

// Feature enablement condition
public static class MicrometerEnabled implements BooleanSupplier {
    /**
     * Check if Micrometer is enabled
     * @return true if Micrometer feature is enabled
     */
    public boolean getAsBoolean();
}

// Important DotName constants for annotation processing and build items
public static final DotName METER_REGISTRY = DotName.createSimple(MeterRegistry.class.getName());
public static final DotName METER_BINDER = DotName.createSimple(MeterBinder.class.getName());
public static final DotName METER_FILTER = DotName.createSimple(MeterFilter.class.getName());
public static final DotName METER_REGISTRY_CUSTOMIZER = DotName.createSimple(MeterRegistryCustomizer.class.getName());
public static final DotName NAMING_CONVENTION = DotName.createSimple(NamingConvention.class.getName());

// Annotation processing constants
public static final DotName COUNTED_ANNOTATION = DotName.createSimple(Counted.class.getName());
public static final DotName COUNTED_INTERCEPTOR = DotName.createSimple(MicrometerCountedInterceptor.class.getName());
public static final DotName TIMED_ANNOTATION = DotName.createSimple(Timed.class.getName());
public static final DotName TIMED_INTERCEPTOR = DotName.createSimple(MicrometerTimedInterceptor.class.getName());
public static final DotName METER_TAG_SUPPORT = DotName.createSimple(MeterTagsSupport.class.getName());

// Operating system bean class names for system metrics reflection
public static final List<String> OPERATING_SYSTEM_BEAN_CLASS_NAMES = List.of(
    "com.ibm.lang.management.OperatingSystemMXBean", // J9
    "com.sun.management.OperatingSystemMXBean" // HotSpot
);

Usage Examples:

// Custom extension using MicrometerProcessor features
@BuildSteps
public class CustomMetricsProcessor {
    
    @BuildStep(onlyIf = MicrometerProcessor.MicrometerEnabled.class)
    AdditionalBeanBuildItem addCustomMetrics() {
        return AdditionalBeanBuildItem.builder()
            .addBeanClass(CustomMetricProducer.class)
            .setUnremovable()
            .build();
    }
    
    @BuildStep
    @Record(ExecutionTime.RUNTIME_INIT)
    SyntheticBeanBuildItem configureCustomMetrics(
        RootMeterRegistryBuildItem rootRegistry,
        CustomMetricsRecorder recorder
    ) {
        return SyntheticBeanBuildItem.configure(CustomMetricsManager.class)
            .supplier(recorder.createCustomMetricsManager(rootRegistry.getValue()))
            .done();
    }
}

Install with Tessl CLI

npx tessl i tessl/maven-io-quarkus--quarkus-micrometer-deployment

docs

core-processors.md

framework-binders.md

index.md

mp-metrics-compatibility.md

registry-exports.md

tile.json