-
Notifications
You must be signed in to change notification settings - Fork 316
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
Add OpenMetrics unit support #544
Conversation
@ArthurSens this is now ready for review, thanks. |
Implementation and tests looks good to me! On the other hand, we had a brief discussion on slack and we suspect that enforcing units to be present in the MetricFamily name is a breaking change that we should be careful about. We know that client_golang uses prometheus/common but maybe there are others? We could make this method opt-in with something like this type ToOpenMetrics struct {
withUnit bool
// withCreated bool can be added in the future
}
type ToOpenMetricsOption = func(*ToOpenMetrics)
func ToOpenMetricsWithUnit() ToOpenMetricsOption {
return func(om *ToOpenMetrics) {
om.withUnit = true
}
}
func MetricFamilyToOpenMetrics(out io.Writer, in *dto.MetricFamily, options ...ToOpenMetricsOption) (written int, err error) {
toOM = ToOpenMetrics{}
for _, option := range options {
option(&toOM)
}
.
.
.
if toOM.withUnit && in.Unit != nil {
// print Unit as usual
}
.
.
.
} Downstream projects could safely bump promethes/common version, while having the option to adopt units when appropriate: // Will keep the same behavior as today, even if unit is set
common.MetricFamilyToOpenMetrics(out, in)
// Will add unit to the metricFamily name as suffix
common.MetricFamilyToOpenMetrics(out, in, common.ToOpenMetricsWithUnit()) |
@ArthurSens this is now ready for review. I hope I have interpreted correctly both your suggestions and the gist of your Slack conversation. |
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.
Great improvement! Have you tried using this version of prometheus/common in your PR in client_golang? How did the changes here impacted over there?
I suspect we also need some changes to expfmt.NewEnconder as well.
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.
Could we also have some tests for the case where the unit is set, but the option withUnit is not?
Looks good in general. I don't have the time for a detailed review, but I trust you to do that alright on your own. I should also add that I don't feel qualified to make any calls how to handle OpenMetrics and its quirks appropriately. (Not that I wouldn't have context. It's more that I have too much context, and that clouds my judgement.) |
Thank you very much :) I have tried it on my branch (prometheus/client_golang#1392) and nothing seems to break or fail; however, I'll have to check again once I've modified |
That scenario is already covered by test n.10, but I now realise I could have named it more clearly, and of course I can add more tests. |
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.
It looks almost ready! Thanks refactoring TestEncode
with a table test, looks a lot better ❤️
I've made a few comments, but they are mostly around readability
expfmt/openmetrics_create.go
Outdated
// function. It enables a set unit to be written to the output and to be added to the metric name, (if | ||
// it's not there already), as a suffix. Without opting in this way, the unit will not be added to the |
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.
// function. It enables a set unit to be written to the output and to be added to the metric name, (if | |
// it's not there already), as a suffix. Without opting in this way, the unit will not be added to the | |
// function. It enables a set unit to be written to the output and to be added to the metric name, if | |
// it's not there already, as a suffix. Without opting in this way, the unit will not be added to the |
just small nit: no need for parenthesis if already separated from the main sentence with commas
var buff bytes.Buffer | ||
delimEncoder := NewEncoder(&buff, FmtProtoDelim) | ||
metric := &dto.MetricFamily{ | ||
metric1 := &dto.MetricFamily{ |
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.
What do you think about adding unit to metric1
, so we don't need to create extra metrics for the OM format scenarios?
The OM Format is the only one that has a different output if unit is set, so I expect that this shouldn't require changes to the other formats
go.mod
Outdated
github.com/prometheus/client_model v0.5.0 | ||
github.com/prometheus/client_model v0.5.1-0.20231205151710-c26a8eea9e44 |
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.
We probably want client_model 0.6.0 before merging this 🤔
expfmt/encode_test.go
Outdated
// N.B. For the first three cases, I'm maintaining the same checks as they were before, i. e. the expected output is | ||
// not declared ergo no comparison with the actual output is ever performed, expect for its length being bigger than zero. | ||
if i > 2 { | ||
if expected, got := len(scenario.expOut), len(out.Bytes()); expected != got { | ||
t.Errorf( | ||
"%d. expected %d bytes written, got %d", | ||
i, expected, got, | ||
) | ||
} | ||
if expected, got := scenario.expOut, out.String(); expected != got { | ||
t.Errorf( | ||
"%d. expected out=%q, got %q", | ||
i, expected, got, | ||
) | ||
} | ||
} |
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.
// N.B. For the first three cases, I'm maintaining the same checks as they were before, i. e. the expected output is | |
// not declared ergo no comparison with the actual output is ever performed, expect for its length being bigger than zero. | |
if i > 2 { | |
if expected, got := len(scenario.expOut), len(out.Bytes()); expected != got { | |
t.Errorf( | |
"%d. expected %d bytes written, got %d", | |
i, expected, got, | |
) | |
} | |
if expected, got := scenario.expOut, out.String(); expected != got { | |
t.Errorf( | |
"%d. expected out=%q, got %q", | |
i, expected, got, | |
) | |
} | |
} | |
if expected, got := len(scenario.expOut), len(out.Bytes()); expected != "" && expected != got { | |
t.Errorf( | |
"%d. expected %d bytes written, got %d", | |
i, expected, got, | |
) | |
} | |
if expected, got := scenario.expOut, out.String(); expected != "" && expected != got { | |
t.Errorf( | |
"%d. expected out=%q, got %q", | |
i, expected, got, | |
) | |
} |
We can remove one indentation level if we compare when the expected output is not empty. Is this more readable/maintainable to you?
expfmt/encode_test.go
Outdated
{ | ||
metric: metric1, | ||
format: FmtProtoDelim, | ||
// expOut: `\x1b\n\nfoo_metric\x18\x03\"\v*\t\tX9\xb4\xc8v\xbe\xf3?`, // does this look like the desired output? |
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.
The problem with comparing protos in string format is that the output is not consistent, as far as I know. Proto will randomly add spaces between messages, making our comparison flaky.
I'd remove this commented line entirely. We weren't comparing the output before, so I don't think we need to compare now :)
@ArthurSens thank you very much for your guidance! I've addressed your change requests. This is now ready for review. About the |
@ArthurSens @bwplotka , could you please take a look? Since v0.6.0. of |
@vesari would you mind rebasing and squashing the commits? |
@SuperQ done. Thank you! |
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.
@vesari LGTM! thanks for your patience through all those months :)
I've noticed that a few unrelated changes were made, probably by mistake? Could you take a look?
model/labelset.go
Outdated
// String will look like `{foo="bar", more="less"}`. Names are sorted alphabetically. | ||
func (l LabelSet) String() string { | ||
var lna [32]LabelName // On stack to avoid memory allocation for sorting names. | ||
labelNames := lna[:0] | ||
for name := range l { | ||
labelNames = append(labelNames, name) | ||
lstrs := make([]string, 0, len(l)) | ||
for l, v := range l { | ||
lstrs = append(lstrs, fmt.Sprintf("%s=%q", l, v)) | ||
} | ||
slices.Sort(labelNames) | ||
var bytea [1024]byte // On stack to avoid memory allocation while building the output. | ||
b := bytes.NewBuffer(bytea[:0]) | ||
b.WriteByte('{') | ||
for i, name := range labelNames { | ||
if i > 0 { | ||
b.WriteString(", ") | ||
} | ||
b.WriteString(string(name)) | ||
b.WriteByte('=') | ||
b.Write(strconv.AppendQuote(b.AvailableBuffer(), string(l[name]))) | ||
} | ||
b.WriteByte('}') | ||
return b.String() | ||
|
||
sort.Strings(lstrs) | ||
return fmt.Sprintf("{%s}", strings.Join(lstrs, ", ")) |
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.
Accidental change with the rebase?
model/labelset_test.go
Outdated
|
||
// Benchmark Results for LabelSet's String() method | ||
// --------------------------------------------------------------------------------------------------------- | ||
// goos: linux | ||
// goarch: amd64 | ||
// pkg: github.com/prometheus/common/model | ||
// cpu: 11th Gen Intel(R) Core(TM) i5-1145G7 @ 2.60GHz | ||
// BenchmarkLabelSetStringMethod-8 732376 1532 ns/op | ||
|
||
func BenchmarkLabelSetStringMethod(b *testing.B) { | ||
ls := make(LabelSet) | ||
ls["monitor"] = "codelab" | ||
ls["foo2"] = "bar" | ||
ls["foo"] = "bar" | ||
ls["abc"] = "prometheus" | ||
ls["foo11"] = "bar11" | ||
for i := 0; i < b.N; i++ { | ||
_ = ls.String() | ||
} | ||
} |
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.
same thing here, probably by accident?
@ArthurSens thanks a lot for pointing that out, I'll have a look at it tomorrow morning then get back to you immediately after, thanks again |
@ArthurSens , I have now amended my previous commit and rebased again. Thank you very much for catching those 2 files that I had indeed not modified actively; like you, I can just assume something happened during the previous rebase. I hope now it's ready for merging :) |
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!
) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [github.com/prometheus/common](https://github.com/prometheus/common) | `v0.49.0` -> `v0.50.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fprometheus%2fcommon/v0.50.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fprometheus%2fcommon/v0.50.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fprometheus%2fcommon/v0.49.0/v0.50.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fprometheus%2fcommon/v0.49.0/v0.50.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [github.com/prometheus/common](https://github.com/prometheus/common) | `v0.48.0` -> `v0.50.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fprometheus%2fcommon/v0.50.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fprometheus%2fcommon/v0.50.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fprometheus%2fcommon/v0.48.0/v0.50.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fprometheus%2fcommon/v0.48.0/v0.50.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- > [!WARNING] > Some dependencies could not be looked up. Check the Dependency Dashboard for more information. --- ### Release Notes <details> <summary>prometheus/common (github.com/prometheus/common)</summary> ### [`v0.50.0`](https://github.com/prometheus/common/releases/tag/v0.50.0) [Compare Source](https://github.com/prometheus/common/compare/v0.49.0...v0.50.0) #### What's Changed - Synchronize common files from prometheus/prometheus by [@​prombot](https://github.com/prombot) in [prometheus/common#594 - Bump github.com/stretchr/testify from 1.8.4 to 1.9.0 in /sigv4 by [@​dependabot](https://github.com/dependabot) in [prometheus/common#593 - Bump github.com/aws/aws-sdk-go from 1.50.27 to 1.50.29 in /sigv4 by [@​dependabot](https://github.com/dependabot) in [prometheus/common#592 - Bump github.com/aws/aws-sdk-go from 1.50.29 to 1.50.31 in /sigv4 by [@​dependabot](https://github.com/dependabot) in [prometheus/common#595 - Remove unused 'Host' member from HTTPClientConfig by [@​bboreham](https://github.com/bboreham) in [prometheus/common#597 - Add OpenMetrics unit support by [@​vesari](https://github.com/vesari) in [prometheus/common#544 - Remove deprecated version function by [@​SuperQ](https://github.com/SuperQ) in [prometheus/common#591 - Synchronize common files from prometheus/prometheus by [@​prombot](https://github.com/prombot) in [prometheus/common#599 - Bump golang.org/x/oauth2 from 0.17.0 to 0.18.0 by [@​dependabot](https://github.com/dependabot) in [prometheus/common#600 - Bump google.golang.org/protobuf from 1.32.0 to 1.33.0 by [@​dependabot](https://github.com/dependabot) in [prometheus/common#601 **Full Changelog**: prometheus/common@v0.49.0...v0.50.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - "on tuesday" (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 these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMDAuMCIsInVwZGF0ZWRJblZlciI6IjM3LjI0NS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9--> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [github.com/prometheus/common](https://github.com/prometheus/common) | `v0.48.0` -> `v0.52.3` | [![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fprometheus%2fcommon/v0.52.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fprometheus%2fcommon/v0.52.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fprometheus%2fcommon/v0.48.0/v0.52.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fprometheus%2fcommon/v0.48.0/v0.52.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>prometheus/common (github.com/prometheus/common)</summary> ### [`v0.52.3`](https://github.com/prometheus/common/compare/v0.52.2...v0.52.3) [Compare Source](https://github.com/prometheus/common/compare/v0.52.2...v0.52.3) ### [`v0.52.2`](https://github.com/prometheus/common/releases/tag/v0.52.2) [Compare Source](https://github.com/prometheus/common/compare/v0.51.1...v0.52.2) #### What's Changed - Drop support for Go older than 1.18 by [@​SuperQ](https://github.com/SuperQ) in [prometheus/common#612 - fix(protobuf): Correctly decode multi-messages streams by [@​srebhan](https://github.com/srebhan) in [prometheus/common#616 - Bump github.com/aws/aws-sdk-go from 1.50.31 to 1.51.11 in /sigv4 by [@​dependabot](https://github.com/dependabot) in [prometheus/common#615 #### New Contributors - [@​srebhan](https://github.com/srebhan) made their first contribution in [prometheus/common#616 **Full Changelog**: prometheus/common@v0.51.1...v0.52.2 ### [`v0.51.1`](https://github.com/prometheus/common/releases/tag/v0.51.1) [Compare Source](https://github.com/prometheus/common/compare/v0.51.0...v0.51.1) #### What's Changed - Synchronize common files from prometheus/prometheus by [@​prombot](https://github.com/prombot) in [prometheus/common#606 - Synchronize common files from prometheus/prometheus by [@​prombot](https://github.com/prombot) in [prometheus/common#609 - Retract v0.50.0 by [@​SuperQ](https://github.com/SuperQ) in [prometheus/common#610 **Full Changelog**: prometheus/common@v0.51.0...v0.51.1 ### [`v0.51.0`](https://github.com/prometheus/common/releases/tag/v0.51.0) [Compare Source](https://github.com/prometheus/common/compare/v0.50.0...v0.51.0) #### What's Changed - Synchronize common files from prometheus/prometheus by [@​prombot](https://github.com/prombot) in [prometheus/common#604 - expfmt: Add a way to generate different OpenMetrics Formats by [@​ywwg](https://github.com/ywwg) in [prometheus/common#596 - Fix string slice definition for FormatFlagOptions. by [@​gizmoguy](https://github.com/gizmoguy) in [prometheus/common#607 - Correct logic in sample naming for counters, add new test by [@​vesari](https://github.com/vesari) in [prometheus/common#608 #### New Contributors - [@​gizmoguy](https://github.com/gizmoguy) made their first contribution in [prometheus/common#607 **Full Changelog**: prometheus/common@v0.50.0...v0.51.0 ### [`v0.50.0`](https://github.com/prometheus/common/releases/tag/v0.50.0) [Compare Source](https://github.com/prometheus/common/compare/v0.49.0...v0.50.0) #### What's Changed - Synchronize common files from prometheus/prometheus by [@​prombot](https://github.com/prombot) in [prometheus/common#594 - Bump github.com/stretchr/testify from 1.8.4 to 1.9.0 in /sigv4 by [@​dependabot](https://github.com/dependabot) in [prometheus/common#593 - Bump github.com/aws/aws-sdk-go from 1.50.27 to 1.50.29 in /sigv4 by [@​dependabot](https://github.com/dependabot) in [prometheus/common#592 - Bump github.com/aws/aws-sdk-go from 1.50.29 to 1.50.31 in /sigv4 by [@​dependabot](https://github.com/dependabot) in [prometheus/common#595 - Remove unused 'Host' member from HTTPClientConfig by [@​bboreham](https://github.com/bboreham) in [prometheus/common#597 - Add OpenMetrics unit support by [@​vesari](https://github.com/vesari) in [prometheus/common#544 - Remove deprecated version function by [@​SuperQ](https://github.com/SuperQ) in [prometheus/common#591 - Synchronize common files from prometheus/prometheus by [@​prombot](https://github.com/prombot) in [prometheus/common#599 - Bump golang.org/x/oauth2 from 0.17.0 to 0.18.0 by [@​dependabot](https://github.com/dependabot) in [prometheus/common#600 - Bump google.golang.org/protobuf from 1.32.0 to 1.33.0 by [@​dependabot](https://github.com/dependabot) in [prometheus/common#601 **Full Changelog**: prometheus/common@v0.49.0...v0.50.0 ### [`v0.49.0`](https://github.com/prometheus/common/releases/tag/v0.49.0) [Compare Source](https://github.com/prometheus/common/compare/v0.48.0...v0.49.0) #### What's Changed - Synchronize common files from prometheus/prometheus by [@​prombot](https://github.com/prombot) in [prometheus/common#574 - Bump github.com/aws/aws-sdk-go from 1.49.13 to 1.50.8 in /sigv4 by [@​dependabot](https://github.com/dependabot) in [prometheus/common#571 - Synchronize common files from prometheus/prometheus by [@​prombot](https://github.com/prombot) in [prometheus/common#581 - Update Go by [@​SuperQ](https://github.com/SuperQ) in [prometheus/common#588 - Deprecate version.NewCollector by [@​SuperQ](https://github.com/SuperQ) in [prometheus/common#579 - Bump github.com/aws/aws-sdk-go from 1.50.8 to 1.50.27 in /sigv4 by [@​dependabot](https://github.com/dependabot) in [prometheus/common#587 - Avoid off-spec openmetrics exposition when exemplars have empty labels by [@​orls](https://github.com/orls) in [prometheus/common#569 - Bump golang.org/x/oauth2 from 0.16.0 to 0.17.0 by [@​dependabot](https://github.com/dependabot) in [prometheus/common#585 - Write created lines when negotiating OpenMetrics by [@​ArthurSens](https://github.com/ArthurSens) in [prometheus/common#504 - Upgrade client_model to v.0.6.0 by [@​vesari](https://github.com/vesari) in [prometheus/common#589 - http_config: Add host by [@​jkroepke](https://github.com/jkroepke) in [prometheus/common#549 - LabelSet: Fix alphabetical sorting for prometheus LabelSet by [@​wasim-nihal](https://github.com/wasim-nihal) in [prometheus/common#575 - labelset: optimise String() function by [@​bboreham](https://github.com/bboreham) in [prometheus/common#590 #### New Contributors - [@​orls](https://github.com/orls) made their first contribution in [prometheus/common#569 - [@​vesari](https://github.com/vesari) made their first contribution in [prometheus/common#589 **Full Changelog**: prometheus/common@v0.48.0...v0.49.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - "on tuesday" (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 has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMjAuMiIsInVwZGF0ZWRJblZlciI6IjM3LjI2OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9--> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
Dependency of PR prometheus/client_golang#1392