-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Add WrapCollectorWith
and WrapCollectorWithPrefix
#1766
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
I found myself in a situation where I had to instantiate multiple instances of a third party library that registered some metrics and never un-registered them. In my app's lifecycle I needed to un-register them and then register them again, but I couldn't achieve that by wrapping the Registerer. I decided to register that library's metrics in a separate Registry and register that Registry, but in order to handle multiple instances of the library, I also needed to wrap it with labels, and while such functionality existed already as part of the Registerer wrapping, it wasn't exposed. This PR just exposes Collector wrapping as a public function. Signed-off-by: Oleg Zaytsev <mail@olegzaytsev.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the test and example, makes the review process pretty smooth and showcase why we'd ever want something like this :)
LGTM, but if possible I'd like to see an approval from someone else who has been more active than I've been during the last couple of months 😅. Maybe @bwplotka or @kakkoyun ?
Hi, any chance we could get this merged? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm merging it. We will still have time to have subsequent PRs until the next release if we want to change anything. |
I found myself in a situation where I had to instantiate multiple instances of a third party library that registered some metrics and never un-registered them. In my app's lifecycle I needed to un-register them and then register them again, but I couldn't achieve that by wrapping the Registerer. I decided to register that library's metrics in a separate Registry and register that Registry, but in order to handle multiple instances of the library, I also needed to wrap it with labels, and while such functionality existed already as part of the Registerer wrapping, it wasn't exposed. This PR just exposes Collector wrapping as a public function. Signed-off-by: Oleg Zaytsev <mail@olegzaytsev.com>
I found myself in a situation where I had to instantiate multiple instances of a third party library that registered some metrics and never un-registered them. In my app's lifecycle I needed to un-register them and then register them again, but I couldn't achieve that by wrapping the Registerer. I decided to register that library's metrics in a separate Registry and register that Registry, but in order to handle multiple instances of the library, I also needed to wrap it with labels, and while such functionality existed already as part of the Registerer wrapping, it wasn't exposed. This PR just exposes Collector wrapping as a public function. Signed-off-by: Oleg Zaytsev <mail@olegzaytsev.com>
This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [github.com/prometheus/client_golang](https://redirect.github.com/prometheus/client_golang) | `v1.22.0` -> `v1.23.0` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>prometheus/client_golang (github.com/prometheus/client_golang)</summary> ### [`v1.23.0`](https://redirect.github.com/prometheus/client_golang/releases/tag/v1.23.0): - 2025-07-30 [Compare Source](https://redirect.github.com/prometheus/client_golang/compare/v1.22.0...v1.23.0) - \[CHANGE] Minimum required Go version is now 1.23, only the two latest Go versions are supported from now on. [#​1812](https://redirect.github.com/prometheus/client_golang/issues/1812) - \[FEATURE] Add WrapCollectorWith and WrapCollectorWithPrefix [#​1766](https://redirect.github.com/prometheus/client_golang/issues/1766) - \[FEATURE] Add exemplars for native histograms [#​1686](https://redirect.github.com/prometheus/client_golang/issues/1686) - \[ENHANCEMENT] exp/api: Bubble up status code from writeResponse [#​1823](https://redirect.github.com/prometheus/client_golang/issues/1823) - \[ENHANCEMENT] collector/go: Update runtime metrics for Go v1.23 and v1.24 [#​1833](https://redirect.github.com/prometheus/client_golang/issues/1833) - \[BUGFIX] exp/api: client prompt return on context cancellation [#​1729](https://redirect.github.com/prometheus/client_golang/issues/1729) <details> <summary>All Changes</summary> * Update example test by @​SuperQ in prometheus/client_golang#1770 * build(deps): bump golang.org/x/net from 0.34.0 to 0.36.0 in /tutorials/whatsup by @​dependabot[bot] in prometheus/client_golang#1776 * Synchronize common files from prometheus/prometheus by @​prombot in prometheus/client_golang#1771 * Synchronize common files from prometheus/prometheus by @​prombot in prometheus/client_golang#1778 * Synchronize common files from prometheus/prometheus by @​prombot in prometheus/client_golang#1779 * build(deps): bump google.golang.org/protobuf from 1.36.5 to 1.36.6 in /exp by @​dependabot[bot] in prometheus/client_golang#1782 * build(deps): bump github.com/prometheus/common from 0.62.0 to 0.63.0 in /exp by @​dependabot[bot] in prometheus/client_golang#1781 * build(deps): bump github.com/prometheus/common from 0.62.0 to 0.63.0 by @​dependabot[bot] in prometheus/client_golang#1783 * build(deps): bump google.golang.org/protobuf from 1.36.5 to 1.36.6 by @​dependabot[bot] in prometheus/client_golang#1784 * build(deps): bump github.com/prometheus/procfs from 0.15.1 to 0.16.0 by @​dependabot[bot] in prometheus/client_golang#1786 * chore: Upgrade golangci-lint to v2 by @​kakkoyun in prometheus/client_golang#1789 * build(deps): bump the github-actions group across 1 directory with 3 updates by @​dependabot[bot] in prometheus/client_golang#1790 * Synchronize common files from prometheus/prometheus by @​prombot in prometheus/client_golang#1791 * Add `WrapCollectorWith` and `WrapCollectorWithPrefix` by @​colega in prometheus/client_golang#1766 * feat(github-actions): add Go file change detection to golangci-lint workflow by @​kakkoyun in prometheus/client_golang#1794 * chore(ci): Fix flaky tests by @​kakkoyun in prometheus/client_golang#1795 * build(deps): bump golang.org/x/net from 0.36.0 to 0.38.0 in /tutorials/whatsup by @​dependabot[bot] in prometheus/client_golang#1799 * test(registry): Add goleak-based goroutine leak detection by @​surinkim in prometheus/client_golang#1797 * build(deps): bump go.uber.org/goleak from 1.2.0 to 1.3.0 by @​dependabot[bot] in prometheus/client_golang#1806 * build(deps): bump the github-actions group with 2 updates by @​dependabot[bot] in prometheus/client_golang#1804 * Synchronize common files from prometheus/prometheus by @​prombot in prometheus/client_golang#1809 * Add exemplars for native histograms by @​shivanthzen in prometheus/client_golang#1686 * build(deps): bump golang.org/x/sys from 0.30.0 to 0.32.0 by @​dependabot[bot] in prometheus/client_golang#1807 * build(deps): bump github.com/prometheus/client_model from 0.6.1 to 0.6.2 by @​dependabot[bot] in prometheus/client_golang#1805 * build(deps): bump github.com/prometheus/procfs from 0.16.0 to 0.16.1 by @​dependabot[bot] in prometheus/client_golang#1808 * build(deps): bump golang.org/x/net from 0.35.0 to 0.38.0 by @​dependabot[bot] in prometheus/client_golang#1800 * Update supported Go versions by @​SuperQ in prometheus/client_golang#1812 * Cleaup Go modules by @​SuperQ in prometheus/client_golang#1813 * fix: client prompt return on context cancellation by @​umegbewe in prometheus/client_golang#1729 * Simplify buf binary install by @​SuperQ in prometheus/client_golang#1814 * Synchronize common files from prometheus/prometheus by @​prombot in prometheus/client_golang#1815 * build(deps): bump the github-actions group with 5 updates by @​dependabot[bot] in prometheus/client_golang#1817 * Synchronize common files from prometheus/prometheus by @​prombot in prometheus/client_golang#1821 * exp/api: Bubble up status code from writeResponse by @​saswatamcode in prometheus/client_golang#1823 * build(deps): bump github.com/prometheus/common from 0.64.0 to 0.65.0 by @​dependabot[bot] in prometheus/client_golang#1827 * build(deps): bump github.com/prometheus/common from 0.64.0 to 0.65.0 in /exp by @​dependabot[bot] in prometheus/client_golang#1828 * Synchronize common files from prometheus/prometheus by @​prombot in prometheus/client_golang#1831 * Update runtime metrics for Go v1.23 and v1.24 by @​aknuds1 in prometheus/client_golang#1833 * Fix `errNotImplemented` reference by @​aknuds1 in prometheus/client_golang#1835 * build(deps): bump the github-actions group with 3 updates by @​dependabot[bot] in prometheus/client_golang#1826 * Synchronize common files from prometheus/prometheus by @​prombot in prometheus/client_golang#1832 * Cut v1.23.0-rc.0 by @​vesari in prometheus/client_golang#1837 * cut v1.23.0-rc.1 by @​vesari in prometheus/client_golang#1842 </details> #### New Contributors * @​surinkim made their first contributi[https://github.com/prometheus/client_golang/pull/1797](https://redirect.github.com/prometheus/client_golang/pull/1797)l/1797 * @​umegbewe made their first contributi[https://github.com/prometheus/client_golang/pull/1729](https://redirect.github.com/prometheus/client_golang/pull/1729)l/1729 * @​aknuds1 made their first contributi[https://github.com/prometheus/client_golang/pull/1833](https://redirect.github.com/prometheus/client_golang/pull/1833)l/1833 **Full Changelog**: https://github.com/prometheus/client\_golang/compare/v1.22.0...v1.23.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - "on the first day of the month" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/jaegertracing/jaeger). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS40Ni4zIiwidXBkYXRlZEluVmVyIjoiNDEuNDYuMyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiY2hhbmdlbG9nOmRlcGVuZGVuY2llcyJdfQ==--> Signed-off-by: Mend Renovate <bot@renovateapp.com>
I found myself in a situation where I had to instantiate multiple instances of a third party library that registered some metrics and never un-registered them.
In my app's lifecycle I needed to un-register them and then register them again, but I couldn't achieve that by wrapping the Registerer.
I decided to register that library's metrics in a separate Registry and register that Registry, but in order to handle multiple instances of the library, I also needed to wrap it with labels, and while such functionality existed already as part of the Registerer wrapping, it wasn't exposed.
This PR just exposes Collector wrapping as a public function.