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
. -
info
type. -
stateset
type. -
gaugehistogram
type.
-
- Figure out how to deal with the
_total
suffix. (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 theAccept
header configurable). - Add the
Close
method directly to theEncoder
interface.