Go to file
Vasiliy Tolstov 4e491639e6
Some checks failed
main / Build (push) Failing after 9s
Merge remote-tracking branch 'getters/metrics'
2024-11-09 19:39:05 +03:00
.github/workflows github-actions: add test for 386 arch 2023-12-22 15:52:25 +01:00
testdata adds extended memory stats (#21) 2021-03-17 23:07:19 +02:00
vendor allow exposing meta information for registered metrics (#61) 2023-12-19 02:36:54 +02:00
.gitignore feature:compatible 2023-02-07 14:27:40 +08:00
counter_example_test.go change import path 2024-11-09 19:32:47 +03:00
counter_test.go refactored and added tests 2019-04-11 13:03:32 +03:00
counter.go counter.go: add Counter.AddInt64() method 2024-02-24 01:23:22 +02:00
floatcounter_example_test.go change import path 2024-11-09 19:32:47 +03:00
floatcounter_test.go Proposal: Add new type of counter: FloatCounter (#5) 2020-01-23 12:48:00 +02:00
floatcounter.go allow exposing meta information for registered metrics (#61) 2023-12-19 02:36:54 +02:00
gauge_example_test.go change import path 2024-11-09 19:32:47 +03:00
gauge_test.go gauge.go: add Inc, Dec and Add methods to Gauge 2024-02-18 12:40:32 +02:00
gauge.go gauge.go: add Inc, Dec and Add methods to Gauge 2024-02-18 12:40:32 +02:00
go_metrics_test.go Do not panic on unsupported Go runtime metrics 2023-12-17 16:30:30 +02:00
go_metrics.go change import path 2024-11-09 19:32:47 +03:00
go.mod change import path 2024-11-09 19:32:47 +03:00
go.sum go.mod: run `go get -u ./... && go mod tidy && go mod vendor 2023-11-29 23:49:15 +02:00
histogram_example_test.go change import path 2024-11-09 19:32:47 +03:00
histogram_test.go fixed tests 2024-07-10 13:30:47 +03:00
histogram_timing_test.go Add easy-to-use histograms 2019-11-23 00:16:38 +02:00
histogram.go Merge remote-tracking branch 'getters/metrics' 2024-11-09 19:39:05 +03:00
LICENSE Initial commit 2019-04-08 16:29:16 +03:00
metrics_example_test.go change import path 2024-11-09 19:32:47 +03:00
metrics_test.go Make UnregisterSet() less error-prone to use 2024-07-15 10:35:32 +02:00
metrics.go Make UnregisterSet() less error-prone to use 2024-07-15 10:35:32 +02:00
process_metrics_linux_test.go Revert "export process_resident_memory_anonymous_bytes and process_resident_memory_pagecache_bytes metrics" 2021-03-17 23:10:35 +02:00
process_metrics_linux.go change import path 2024-11-09 19:32:47 +03:00
process_metrics_other.go process_metrics: adds metrics for windows OS (#47) 2023-05-16 09:59:00 -07:00
process_metrics_windows.go allow exposing meta information for registered metrics (#61) 2023-12-19 02:36:54 +02:00
push_test.go push.go: add an ability to wait until push workers are stopped via PushOptions.WaitGroup 2024-01-15 12:07:18 +02:00
push_timing_test.go Add a benchmark for addExtraLabels function 2022-07-21 18:42:53 +03:00
push.go push.go: clarify the docs for PushOptions.Method field 2024-07-16 13:16:48 +02:00
README.md allow exposing meta information for registered metrics (#61) 2023-12-19 02:36:54 +02:00
set_example_test.go change import path 2024-11-09 19:32:47 +03:00
set_test.go backward compatibility 2023-02-20 12:54:52 +08:00
set.go Merge remote-tracking branch 'prometheus/master' 2024-11-09 19:33:55 +03:00
summary_example_test.go change import path 2024-11-09 19:32:47 +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 Merge remote-tracking branch 'getters/metrics' 2024-11-09 19:39:05 +03:00
validator_test.go allow dot in metric name (#26) 2021-07-07 15:36:08 +03:00
validator.go allow dot in metric name (#26) 2021-07-07 15:36:08 +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.
  • Can push metrics to VictoriaMetrics or to any other remote storage, which accepts metrics in Prometheus text exposition format. See these docs.

Limitations

Usage

import "github.com/VictoriaMetrics/metrics"

// Register various metrics.
// Metric 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)
})

// ... or push registered metrics every 10 seconds to http://victoria-metrics:8428/api/v1/import/prometheus
// with the added `instance="foobar"` label to all the pushed metrics.
metrics.InitPush("http://victoria-metrics:8428/api/v1/import/prometheus", 10*time.Second, `instance="foobar"`, true)

By default, exposed metrics do not have TYPE or HELP meta information. Call ExposeMetadata(true) in order to generate TYPE and HELP meta information per each metric.

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 give meaningful names to the exported metrics or 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 compared 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.