micronaut-projects / micronaut-micrometer

Integration between Micronaut and Micrometer
Apache License 2.0
35 stars 63 forks source link

Race condition at order of MeterRegistryConfigurer(s) being applied #417

Open roehrijn opened 2 years ago

roehrijn commented 2 years ago

Expected Behavior

In the case I configure micronaut.metrics.tags.* I expect those tags being added to every Micrometer meter being created.

Actual Behaviour

In some cases the meters created by io.micronaut.configuration.metrics.aggregator.CompositeMeterRegistryConfigurer#addBinders are not having those common tags. This is because the execution order of io.micronaut.configuration.metrics.aggregator.CompositeMeterRegistryConfigurer and io.micronaut.configuration.metrics.common.tags.CommonTagsConfigurer is not defined. In case io.micronaut.configuration.metrics.micrometer.MeterRegistryFactory#compositeMeterRegistry executes CompositeMeterRegistryConfigurer before CommonTagsConfigurer, the common tags are not yet configured but some meters have already been created.

Steps To Reproduce

Difficult to reproduce because the mentioned order of io.micronaut.configuration.metrics.aggregator.MeterRegistryConfigurer is not configurable.

Environment Information

micronaut-micrometer-core: v4.2.1 micronaut: v3.4.3

Example Application

No response

Version

3.4.3

roehrijn commented 2 years ago

In case you guys agree that this is a problem, I would be eager to help on fixing this but I'm not sure about a good solution for this.

roehrijn commented 2 years ago

Just as background information: I've stumbled over this issue while implementing a MeterRegistry implementation for the Prometheus Remote_Write protocol which I want to use for monitoring Java batch jobs based on Micronaut.

capricube commented 2 years ago

👍

AlarkaSanyal commented 2 years ago

We faced this issue as well while using Meter Registry Configurer. For us, however, using the Meter Filter seems to have solved the issue.