PromPHP / prometheus_client_php

Prometheus instrumentation library for PHP applications
https://prometheus.io/docs/concepts/metric_types/
Apache License 2.0
423 stars 93 forks source link

Summary is calculated wrong? #78

Open pjarmalavicius opened 2 years ago

pjarmalavicius commented 2 years ago

I have the following samples [1.33, 2.33, 2.33]. Summary metric is returned like this:

some_duration_seconds{quantile="0.01"} 1.35
some_duration_seconds{quantile="0.05"} 1.43
some_duration_seconds{quantile="0.5"} 2.33
some_duration_seconds{quantile="0.95"} 2.33
some_duration_seconds{quantile="0.99"} 2.33
some_duration_seconds_sum 5.99
some_duration_seconds_count 3

Compared results with Go prometheus client and it return different result

some_duration_seconds{quantile="0.01"} 1.33
some_duration_seconds{quantile="0.05"} 1.33
some_duration_seconds{quantile="0.5"} 2.33
some_duration_seconds{quantile="0.95"} 2.33
some_duration_seconds{quantile="0.99"} 2.33
some_duration_seconds_sum 5.99
some_duration_seconds_count 3

Also tried some online percentile calculators:

So, I assume there is something wrong on PHP client

mp3000mp commented 2 years ago

Hi, this is because the quantile is calculated using a linear interpolation when the quantile is between two values.

But to be honest I implemented the function this way because I found a source on the php.net documentation (as mentionned here) and I didn't even know there were more than one way to calculate quantiles !

English wikipedia mentions 9 different ways to calculate it !!!

So the questions are :

@LKaemmerling what do you think ?

LKaemmerling commented 2 years ago

Hey,

I guess we should follow the same way as the go client. @mp3000mp do you want to prepare the change :)? I guess we can do it as a bug fix. If not, I will try to come up with a fix in the next two weeks.

mp3000mp commented 2 years ago

Hey,

I guess we should follow the same way as the go client. @mp3000mp do you want to prepare the change :)? I guess we can do it as a bug fix. If not, I will try to come up with a fix in the next two weeks.

Thanks for the answer, I've just submitted the PR #81.