Skip to content

Conversation

@brunobat
Copy link
Contributor

@brunobat brunobat commented Jun 18, 2025

This is a blog post to communicate the Micromenter Prometheus client v1.x changes.

@github-actions
Copy link

github-actions bot commented Jun 18, 2025

🎊 PR Preview 83f0c34 has been successfully built and deployed to https://quarkus-site-pr-2340-preview.surge.sh

  • Images of blog posts older than 3 months are not available.
  • Newsletters older than 3 months are not available.

@gastaldi gastaldi requested a review from Copilot June 18, 2025 17:26
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR introduces a new documentation post detailing the migration paths and breaking changes resulting from the switch to Prometheus client v1 in the Micrometer registry.

  • Introduces a new post explaining upgrade options and dependency changes
  • Details specific changes to metrics naming and API usage

@brunobat brunobat marked this pull request as draft June 20, 2025 07:43
@brunobat
Copy link
Contributor Author

brunobat commented Jun 20, 2025

There is a plan change:

  1. Keep current extension as is until Quarkus 4.0 (whenever that happens)
  2. Create a new extension called quarkus-micrometer-registry-prometheus-v1 now
  3. Delete current quarkus-micrometer-registry-prometheus on Quarkus 4.0. Provide alternative on Quarkiverse.
  4. Refactor: Stramline the main extension (quarkus-micrometer) and quarkus-micrometer-registry-prometheus-v1 to remove outdated code on Quarkus 4.0.
  5. On the next LTS it would be good to mark for deprecation the old registry and support the new one.

Will re-write the blog to reflect that.

@brunobat
Copy link
Contributor Author

brunobat commented Jun 20, 2025

Re-wrote the post according to the new plan and zulip coments.
I still need to come up with better examples for the changes.
Will finish when I know when we will release the new extension.

@brunobat
Copy link
Contributor Author

brunobat commented Jul 2, 2025

This is on hold due to other ongoing work.

Micrometer prometheus client v1.0 breaking changes
@brunobat
Copy link
Contributor Author

Updated the post. It's now ready to review.

@brunobat brunobat marked this pull request as ready for review October 20, 2025 16:22
@brunobat brunobat changed the title Micrometer Prometheus client v1.0 breaking changes Micrometer Prometheus client v1.x breaking changes Oct 20, 2025
Copy link
Member

@cescoffier cescoffier left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I need to read it again on my machine (on my phone now).

We should also advertise the working group


[INFO]
====
Users should move to the new `quarkus-micrometer-registry-prometheus-v1` extension.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hold on, does this change the metrics? If so, sure they should move but be aware that they dashboards and alerts and queries are now incorrect

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of info it should be inclined, in the flow of the required changes. We should invite the users to check the breaking change section before making a decision.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure, I can tone down the message, but they should work one migration, regardless. Will update.

=== Migration plan

1. Keep current extension as is until Quarkus 4.0 (whenever that happens) so users can migrate at a time of their choice.
2. Introduce a new extension called https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/micrometer-registry-prometheus-v1.html[`quarkus-micrometer-registry-prometheus-v1`].
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What if you use both at the same time? What happens?

Copy link
Contributor Author

@brunobat brunobat Oct 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In theory they could work at the same time but they will clash for sure because they will both try to publish the /q/metrics endpoint.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will test what happens.

* `io.micrometer.prometheusmetrics.PrometheusMeterRegistry` must be used instead of the old `io.micrometer.prometheus.PrometheusMeterRegistry`.
* `io.prometheus.metrics.tracer.common.SpanContext` must be used instead of the old `io.prometheus.client.exemplars.ExemplarSampler`
* The new Prometheus client uses some reserved words that must not be used to name metrics, therefore some metrics were renamed. Some examples of reserved words and renamed metrics:
** `info`. Before: `jvm_info_total`. Now: `jvm_total`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we have the list?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't have a list.
I would need to activate all metrics in a big nr of extensions to get that. It can be done... But I would prefer not to because this is a pattern change that can be extrapolated without an exhaustive list.


Other changes:

* Metrics must be registered always with the same tags. Micrometer will now send a warning if we register the same metric more than once with different Tag names.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would separate these changes into 2 categories:

  • metric format changes (type, name..)
  • implementation changes

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok


Micrometer has become the default metrics framework in Quarkus due to its stability, maturity, and widespread adoption on the Java ecosystem — not https://quarkus.io/guides/opentelemetry-metrics[OpenTelemetry Metrics].

Micrometer support in Quarkus is built on top af a main extension `quarkus-micrometer`, then specific registries extensions include it as a dependency and implement a registry sending out the telemetry. The Prometheus registry (`quarkus-micrometer-registry-prometheus`) is the default and most commonly used, and it is the focus of this announcement.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Of not af :-)

@brunobat
Copy link
Contributor Author

I need to read it again on my machine (on my phone now).

We should also advertise the working group

I can publicize this in that discussion but this is not part of the scope of that group.


1. Keep current extension as is until Quarkus 4.0 (whenever that happens) so users can migrate at a time of their choice.
2. Introduce a new extension called https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/micrometer-registry-prometheus-v1.html[`quarkus-micrometer-registry-prometheus-v1`].
3. Remove current `quarkus-micrometer-registry-prometheus` on Quarkus 4.0 (no timeline at this moment) while providing an alternative on Quarkiverse. Quarkus users will get an additional migration period by using an upcoming community supported Quarkiverse extension.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That list looks like implementation tasks.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They are, we are explaining what we are going to do next.

** Move the new https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/micrometer-registry-prometheus-v1.html[`quarkus-micrometer-registry-prometheus-v1`] extension from Quarkiverse to Quarkus core repo and make it the default registry.
** Refactor the https://quarkus.io/guides/telemetry-micrometer[`quarkus-micrometer`] extension tests to use the new client.

=== Prometheus Client v1.x changes
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rename it to "breaking changes"

* The new Prometheus client uses some reserved words that must not be used to name metrics, therefore some metrics were renamed. Some examples of reserved words and renamed metrics:
** `info`. Before: `jvm_info_total`. Now: `jvm_total`
** `duration`. Before: `http_server_requests_duration_seconds`. Now: `http_server_requests_seconds`
* Some metrics would display Tags ending in a comma (`,`). This tailing comma has now been removed. Example: `"hibernate_flushes_total{entityManagerFactory=\"<default>\",env=\"test\",env2=\"test\",registry=\"prometheus\",} 1.0"`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we have the " ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It was just to delimit the String and it can go away.

* Through the https://github.com/quarkiverse/quarkus-micrometer-registry/[Quarkiverse Micrometer registries]
* Via OpenTelemetry, using a bridge provided by the https://quarkus.io/guides/telemetry-micrometer-to-opentelemetry[Micrometer and OpenTelemetry] extension. This setup allows Micrometer metrics to be sent as OpenTelemetry metrics, offering a unified output via the https://opentelemetry.io/docs/specs/otlp/[OpenTelemetry OTLP protocol].

For more details on Observability in Quarkus please visit https://quarkus.io/guides/observability[this guide].
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Question: do all these ways use the same metric conventions?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, Micrometer and OpenTelemetry follow different semantic conventions, however, Micrometer metrics telemetry going out through the quarkus-micrometer-opentelemetry extension will keep the Micrometer semantic conventions alignment. It's not 1:1 but close and documented here: https://quarkus.io/guides/telemetry-micrometer-to-opentelemetry#semantic-convention-differences
Probably worth mentioning it... Will update.


The prometheus client is not the only option to send out telemetry, there are alternative options such as the Quarkiverse registries or our OpenTelemetry bridge.

You can follow Quarkus release dates here: https://github.com/quarkusio/quarkus/wiki/Release-Planning
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would remove this sentence.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's just because we mention a future version with no estimated date, at least, they can keep an eye here... You still think we should remove it?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants