Go to file
2021-02-08 14:23:40 +02:00
.github/workflows bump version of codecov-action to v1.0.6 2020-03-05 23:26:04 +02:00
testdata adds file descriptors metrics, (#19) 2021-02-04 16:10:10 +02:00
vendor vendor: update github.com/valyala/histogram from v1.1.1 to v1.1.2 2020-07-20 16:54:34 +03:00
counter_example_test.go Added examples 2019-04-11 17:26:20 +03:00
counter_test.go refactored and added tests 2019-04-11 13:03:32 +03:00
counter.go all: fix typo lables -> labels (#3) 2019-09-30 00:06:17 +03:00
floatcounter_example_test.go Proposal: Add new type of counter: FloatCounter (#5) 2020-01-23 12:48:00 +02:00
floatcounter_test.go Proposal: Add new type of counter: FloatCounter (#5) 2020-01-23 12:48:00 +02:00
floatcounter.go Proposal: Add new type of counter: FloatCounter (#5) 2020-01-23 12:48:00 +02:00
gauge_example_test.go Added GetOrCreateGauge to be consistent with Counter and Summary 2019-04-15 15:34:02 +03:00
gauge_test.go Added GetOrCreateGauge to be consistent with Counter and Summary 2019-04-15 15:34:02 +03:00
gauge.go gauge.go: mention FloatCounter in Gauge docs 2020-07-05 17:49:52 +03:00
go_metrics.go Add process_* metrics similar to the metrics exposed by https://github.com/prometheus/client_golang 2019-07-12 17:18:57 +03:00
go.mod vendor: update github.com/valyala/histogram from v1.1.1 to v1.1.2 2020-07-20 16:54:34 +03:00
go.sum vendor: update github.com/valyala/histogram from v1.1.1 to v1.1.2 2020-07-20 16:54:34 +03:00
histogram_example_test.go Add examples for Histogram 2019-11-27 14:04:12 +02:00
histogram_test.go Increase value precision in histograms from 5e-3 to 1e-12 2020-05-20 02:49:55 +03:00
histogram_timing_test.go Add easy-to-use histograms 2019-11-23 00:16:38 +02:00
histogram.go Increase value precision in histograms from 5e-3 to 1e-12 2020-05-20 02:49:55 +03:00
LICENSE Initial commit 2019-04-08 16:29:16 +03:00
metrics_example_test.go Added examples 2019-04-11 17:26:20 +03:00
metrics_test.go Reduce histogram buckets from 0.1 to 0.02 of the size for the current decimal exponent 2019-11-25 13:08:44 +02:00
metrics.go follow-up for 2a12f948a9 2021-02-04 16:28:55 +02:00
process_metrics_linux_test.go follow-up for 2a12f948a9 2021-02-04 16:28:55 +02:00
process_metrics_linux.go Read /proc/* file contents with ioutil.ReadFile() instead of opening it with os.Open() and scanning with bufio.Scanner 2021-02-08 14:23:40 +02:00
process_metrics_other.go follow-up for 2a12f948a9 2021-02-04 16:28:55 +02:00
README.md Add links to https://medium.com/@valyala/improving-histogram-usability-for-prometheus-and-grafana-bc7e5df0e350 from Histogram docs 2019-11-27 14:01:15 +02:00
set_example_test.go typo fixes in ExampleSet 2019-06-01 23:24:25 +03:00
set_test.go summary: fix Unregister behaviour for summary metric type (#16) 2020-08-07 12:59:44 +03:00
set.go summary: fix Unregister behaviour for summary metric type (#16) 2020-08-07 12:59:44 +03:00
summary_example_test.go Added examples 2019-04-11 17:26:20 +03:00
summary_test.go Properly handle metric names with lables when printing *_count and *_sum values for Summary 2019-06-28 14:14:47 +03:00
summary.go summary: fix Unregister behaviour for summary metric type (#16) 2020-08-07 12:59:44 +03:00
validator_test.go refactored and added tests 2019-04-11 13:03:32 +03:00
validator.go refactored and added tests 2019-04-11 13:03:32 +03:00

Build Status GoDoc Go Report codecov

metrics - lightweight package for exporting metrics in Prometheus format

Features

  • Lightweight. Has minimal number of third-party dependencies and all these deps are small. See this article for details.
  • Easy to use. See the API docs.
  • Fast.
  • Allows exporting distinct metric sets via distinct endpoints. See Set.
  • Supports easy-to-use histograms, which just work without any tuning. Read more about VictoriaMetrics histograms at this article.

Limitations

Usage

import "github.com/VictoriaMetrics/metrics"

// Register various time series.
// Time series name may contain labels in Prometheus format - see below.
var (
	// Register counter without labels.
	requestsTotal = metrics.NewCounter("requests_total")

	// Register summary with a single label.
	requestDuration = metrics.NewSummary(`requests_duration_seconds{path="/foobar/baz"}`)

	// Register gauge with two labels.
	queueSize = metrics.NewGauge(`queue_size{queue="foobar",topic="baz"}`, func() float64 {
		return float64(foobarQueue.Len())
	})

	// Register histogram with a single label.
	responseSize = metrics.NewHistogram(`response_size{path="/foo/bar"}`)
)

// ...
func requestHandler() {
	// Increment requestTotal counter.
	requestsTotal.Inc()

	startTime := time.Now()
	processRequest()
	// Update requestDuration summary.
	requestDuration.UpdateDuration(startTime)

	// Update responseSize histogram.
	responseSize.Update(responseSize)
}

// Expose the registered metrics at `/metrics` path.
http.HandleFunc("/metrics", func(w http.ResponseWriter, req *http.Request) {
	metrics.WritePrometheus(w, true)
})

See docs for more info.

Users

FAQ

Why the metrics API isn't compatible with github.com/prometheus/client_golang?

Because the github.com/prometheus/client_golang is too complex and is hard to use.

Why the metrics.WritePrometheus doesn't expose documentation for each metric?

Because this documentation is ignored by Prometheus. The documentation is for users. Just add comments in the source code or in other suitable place explaining each metric exposed from your application.

How to implement CounterVec in metrics?

Just use GetOrCreateCounter instead of CounterVec.With. See this example for details.

Why 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 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.