Would I be right in thinking this is the code which tripped you up? https://github.com/prometheus/prometheus/blob/c2b4de3611a6/model/textparse/openmetricsparse.go#L472-L479 This is insisting that exemplars only work on metrics ending in "_bucket" or "_total".
Personally I would be fine with relaxing that, although it does seem strictly aligned with the OpenMetrics spec. On Saturday, 5 November 2022 at 05:21:03 UTC+1 [email protected] wrote: > Hi, > > *@Fabian:* Thank you very much! Is the summit open, can I join? > > *@Bryan:* > I think I would make the decision if it would make sense for the > Prometheus Server to be able to process the Exemplars on _count first. If > so, then I would look into the different clients and their APIs. > > For Histograms, I don't think this should result in a client API change, I > think this should only affect the behavior of the implementation. Also, I > think source, binary, and behavioral compatibility can be kept. I think it > does not matter where the Exemplar is coming from (directly from the user > or from the sampler), the interesting part happens after the implementation > got the Exemplar. In the case of Histograms, this would mean not just > updating the reference of the Exemplar of the current bucket but also > updating an extra reference to the latest Exemplar (that actually belongs > to _count). So the histogram would hold references to N+1 exemplars where N > is the number of buckets and the +1 Exemplar is the latest recorded one. > > For Summaries, this needs a client API change (an addition) since right > now Summaries do not have Exemplars support. I think this should be very > similar to the Exemplars support of Counters. > > I would like to call out two things: > - I'm not an expert of any of the Prometheus clients (I only used the Java > and the JavaScript clients). > - I think I would not even be affected by the changes of the client APIs > since Micrometer is not using these, it directly creates a > Collector.MetricFamilySamples.Sample instead (that can accept Exemplars > as of today). So if the Prometheus server could process Exemplars on > _count, I think my use-case should be covered. But I would definitely add > the support to the client APIs too so that users who use the clients can > enjoy these features. > > Thanks, > Jonatan > > On Friday, November 4, 2022 at 1:09:22 AM UTC-7 [email protected] wrote: > >> >>> Also, what do you think about supporting _count in Histograms (since >> Histogram extends Summary with buckets)? >> >> How exactly would you change this while remaining backwards-compatible >> for existing users? >> > As far as I can see, adding Exemplars to _count should be a >> backward-compatible change (it is an addition). >> >> I would like to see what you can see. Please spell it out for me. >> >> The current API on Histogram is ObserveWithExemplar(), and it adds the >> exemplar to a _bucket metric. >> Would you change the behaviour of that API? Would you add a new API? >> >> Bryan >> >> On Friday, 4 November 2022 at 05:46:39 UTC [email protected] wrote: >> >>> Hi, >>> >>> Sorry for the late reply let me go on-by-one, please bear with me. :) >>> >>> *>I recommend taking that question to an OpenMetrics list.* >>> Thanks, I will open a thread there too based on the discussion here. >>> >>> *>Prometheus could independently decide to go beyond what OpenMetrics >>> says* >>> Since Micrometer uses the Prometheus Java Client this would solve the >>> issue for us but if it makes sense it would be great to have it >>> standardized later(?) (in OM). >>> >>> *>Maybe your point is that exemplars are tied to the _bucket metrics and >>> not the _count metric?* >>> Yes, that's exactly what I'm saying with the caveat that I think this >>> would be useful for Summaries too not only Histograms. >>> >>> *>How exactly would you change this while remaining backwards-compatible >>> for existing users?* >>> As far as I can see, adding Exemplars to _count should be a >>> backward-compatible change (it is an addition). >>> Would users be broken because of this? >>> >>> *>Perhaps the upcoming "native histograms" or "sparse histograms" >>> feature will suit what you need?* >>> I'm not sure but I'm not only talking about histograms, I'm also talking >>> about Summary. >>> >>> *>In an OM Histogram, the +Inf bucket fulfills exactly the same function* >>> >>> >>> *as the _count (spec says: "The +Inf bucket counts all requests.") Soif >>> you would like an examplar on the _count of a Histogram, you can aswell use >>> an exemplar on the +Inf bucket.* >>> >>> I think I disagree with the second sentence. Let's say you have an >>> application where processing the first request is significantly slower than >>> the rest (lazy init, populating caches, GC, establishing connections, >>> etc.). In this environment (I think this is true for lots of apps nowadays) >>> it can easily happen that the +Inf bucket will be populated with an >>> Exemplar for the first request and it will never get updated because the >>> app will never be as slow as it was for the first request. Also, nothing >>> guarantees that the +Inf bucker will have an exemplar, maybe the processing >>> was faster than that. As far as I understand, exemplars are not like >>> cumulative "le" counters so incrementing a bucket does not mean updating an >>> exemplar (quite the opposite, maybe all of the buckets will be incremented >>> but only one will get a new Exemplar). This is also true for apps that can >>> get significantly faster over time (i.e.: JIT). I think a solution here >>> would be give_me_the_last_updated_bucket(my_histogram) or adding >>> Exemplar to _count. >>> >>> *>Side note: In Java this would be particularly useful because the >>> popular Spring Boot framework exposes a Summary >>> http_server_requests_seconds by default that look like this (no quantiles, >>> just _count and _sum)* >>> This was actually one of the drivers of this request, users are asking >>> for this from us. I also find it extremely useful: without this I need to >>> create an additional counter which does not seem right since I already have >>> one. >>> >>> Thanks, >>> Jonatan >>> >>> On Tuesday, October 18, 2022 at 6:29:27 AM UTC-7 [email protected] wrote: >>> >>>> Side note: In Java this would be particularly useful because the >>>> popular Spring Boot framework exposes a Summary >>>> http_server_requests_seconds by default that look like this (no quantiles, >>>> just _count and _sum): >>>> >>>> # HELP http_server_requests_seconds >>>> # TYPE http_server_requests_seconds summary >>>> http_server_requests_seconds_count{exception="None",method="GET",outcome="SUCCESS",status="200",uri="/",} >>>> 1.0 >>>> http_server_requests_seconds_sum{exception="None",method="GET",outcome="SUCCESS",status="200",uri="/",} >>>> 1.014687278 >>>> >>>> I think this is pretty useful, you can get request rates and error >>>> rates out of it. If Prometheus / OpenMetrics had support for Exemplars on >>>> the _count, users could find example traces per HTTP status and URI. >>>> >>>> Fabian >>>> >>>> On Tue, Oct 18, 2022 at 3:05 PM Bjoern Rabenstein <[email protected]> >>>> wrote: >>>> >>>>> On 06.10.22 14:45, 'Fabian Stäber' via Prometheus Developers wrote: >>>>> > >>>>> > Great question from the CNCF Slack: What's the reason why we don't >>>>> allow >>>>> > Exemplars for _count in Summary metrics? >>>>> > >>>>> > What do you think? Any reason why Exemplars don't work in _count in >>>>> > Summaries? Would that be something we could consider supporting? >>>>> >>>>> The _count of a Summary _and_ the _count of a Histogram (both >>>>> conventional as well as the new native ones) is essentially a counter >>>>> within the larger "structured" metric of a Summary/Histogram. >>>>> >>>>> From that perspective, it should have the option of attaching an >>>>> examplar, as a regular Counter has, too. >>>>> >>>>> My speculation why it doesn't in OpenMetrics: >>>>> >>>>> In an OM Histogram, the +Inf bucket fulfills exactly the same function >>>>> as the _count (spec says: "The +Inf bucket counts all requests.") So >>>>> if you would like an examplar on the _count of a Histogram, you can as >>>>> well use an exemplar on the +Inf bucket. >>>>> >>>>> That obviously doesn't help in the case of a Summary, but I guess the >>>>> rationale is that Histograms are generally to be preferred over >>>>> Summaries, and therefore didn't get the thourough treatment when it >>>>> came to exemplars. >>>>> >>>>> >>>>> However, even if you really dislike the precalculated quantiles in >>>>> Summaries, there is still the case of a Summary without quantiles. I >>>>> think adding exemplars to such a Summary is as much needed as adding >>>>> exemplars to any regular Counter. >>>>> >>>>> -- >>>>> Björn Rabenstein >>>>> [PGP-ID] 0x851C3DA17D748D03 >>>>> [email] [email protected] >>>>> >>>> -- You received this message because you are subscribed to the Google Groups "Prometheus Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/prometheus-developers/456a8d9a-4db7-4185-96cb-ee6b835373d4n%40googlegroups.com.

