prometheus / prometheus/common
expfmt: Implement OpenMetrics generation
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 295
- Forks
- 367
- Avg merge
- 2d 10h
- Merged PRs (30d)
- 18
Description
To support OpenMetrics in v1 of prometheus/client_golang, we need to add OpenMetrics generation to the expfmt package, effectively a proto-to-OpenMetrics converter.
For this to work, we need to add the needed additional fields to metrics.proto. This should be backwards compatible for still existing protobuf consumers, while it provides an "inofficial" protobuf representation for OpenMetrics as a byproduct. This has the potential of creating confusion. However, the prometheus/client_model repo is anyway mostly deprecated, so we might as well abuse it for this "hack".
Update: Basic support is done. Here are the remaining TODOs (some of them will require more or less breaking changes, so we might consider bundling them and perhaps even starting to use major version numbers for this repo):
- Feature support:
-
# UNIT. -
_created. -
infotype. -
statesettype. -
gaugehistogramtype.
-
- Figure out how to deal with the
_totalsuffix. (Currently, we require it to be in the metric name and truncate it forTYPE/HELP, which is arguably the opposite of what would be expected but which simplifies the transition from current Prom text format usage.) - Reject exemplars that are too long.
- Reject counters with
NaN - More sophisticated timestamp rendering for both samples and exemplars (to not run into precision and overflow issues with float64 and
time.UnixNano). - Get rid of
NegotiateIncludingOpenMetrics(but we have to make sure there remains some way of letting users opt out of OpenMetrics to support legacy setups – which could be on the Prometheus server side by making theAcceptheader configurable). - Add the
Closemethod directly to theEncoderinterface.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reading the expfmt package and metrics.proto, then review the remaining TODOs in this issue to determine which OpenMetrics features and compatibility decisions are still in scope. Check existing OpenMetrics generation support and its tests, if present. Done means the agreed feature set is implemented, unsupported inputs are handled, and legacy negotiation remains usable.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go
- Domain
- backend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100