Added docs about Histogram

This commit is contained in:
Aliaksandr Valialkin 2019-11-23 13:04:24 +02:00
parent 83922c2aa8
commit eab0e32ed4
2 changed files with 22 additions and 5 deletions

View File

@ -14,6 +14,7 @@
* Easy to use. See the [API docs](http://godoc.org/github.com/VictoriaMetrics/metrics). * Easy to use. See the [API docs](http://godoc.org/github.com/VictoriaMetrics/metrics).
* Fast. * Fast.
* Allows exporting distinct metric sets via distinct endpoints. See [Set](http://godoc.org/github.com/VictoriaMetrics/metrics#Set). * Allows exporting distinct metric sets via distinct endpoints. See [Set](http://godoc.org/github.com/VictoriaMetrics/metrics#Set).
* Supports [easy-to-use histograms](http://godoc.org/github.com/VictoriaMetrics/metrics#Histogram), which just work without any tuning.
### Limitations ### Limitations
@ -39,6 +40,9 @@ var (
queueSize = metrics.NewGauge(`queue_size{queue="foobar",topic="baz"}`, func() float64 { queueSize = metrics.NewGauge(`queue_size{queue="foobar",topic="baz"}`, func() float64 {
return float64(foobarQueue.Len()) return float64(foobarQueue.Len())
}) })
// Register histogram with a single label.
responseSize = metrics.NewHistogram(`response_size{path="/foo/bar"}`)
) )
// ... // ...
@ -50,6 +54,9 @@ func requestHandler() {
processRequest() processRequest()
// Update requestDuration summary. // Update requestDuration summary.
requestDuration.UpdateDuration(startTime) requestDuration.UpdateDuration(startTime)
// Update responseSize histogram.
responseSize.Update(responseSize)
} }
// Expose the registered metrics at `/metrics` path. // Expose the registered metrics at `/metrics` path.
@ -86,3 +93,11 @@ exposed from your application.
Just use [GetOrCreateCounter](http://godoc.org/github.com/VictoriaMetrics/metrics#GetOrCreateCounter) Just use [GetOrCreateCounter](http://godoc.org/github.com/VictoriaMetrics/metrics#GetOrCreateCounter)
instead of `CounterVec.With`. See [this example](https://godoc.org/github.com/VictoriaMetrics/metrics#example-Counter--Vec) for details. instead of `CounterVec.With`. See [this example](https://godoc.org/github.com/VictoriaMetrics/metrics#example-Counter--Vec) for details.
#### Why [Histogram](http://godoc.org/github.com/VictoriaMetrics/metrics#Histogram) buckets contain `vmrange` labels instead of `le` labels like in Prometheus histograms?
Buckets with `vmrange` labels occupy less disk space comparing to Promethes-style buckets with `le` labels,
because `vmrange` buckets don't include counters for the previous ranges. [VictoriaMetrics](https://github.com/VictoriaMetrics/VictoriaMetrics) provides `prometheus_buckets`
function, which converts `vmrange` buckets to Prometheus-style buckets with `le` labels. This is useful for building heatmaps in Grafana.
Additionally, its' `histogram_quantile` function transparently handles histogram buckets with `vmrange` labels.

View File

@ -37,14 +37,16 @@ import (
// - <start> and <end> - start and end values for the given bucket // - <start> and <end> - start and end values for the given bucket
// - <counter> - the number of hits to the given bucket during Update* calls. // - <counter> - the number of hits to the given bucket during Update* calls.
// //
// Only non-zero buckets are exposed. // Histogram buckets can be converted to Prometheus-like buckets with `le` labels
// with `prometheus_buckets(<metric_name>_bucket)` function in VictoriaMetrics:
// //
// Histogram buckets can be converted to Prometheus-like buckets in VictoriaMetrics // prometheus_buckets(request_duration_bucket)
// with `prometheus_buckets(<metric_name>_bucket)`:
//
// prometheus_buckets(rate(request_duration_bucket[5m]))
// //
// Histogram cannot be used for negative values. // Histogram cannot be used for negative values.
//
// Time series produced by the Histogram have better compression ratio comparing to
// Prometheus histogram buckets with `le` labels, since they don't include counters
// for all the previous buckets.
type Histogram struct { type Histogram struct {
buckets [bucketsCount]uint64 buckets [bucketsCount]uint64