Go to file
2019-09-08 14:53:45 +03:00
.github/workflows [ci] use github actions 2019-09-08 14:53:45 +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 Add Set for controlling metric sets to be exported via WritePrometheus call 2019-06-01 23:18:41 +03: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 Marshal integer *_sum metric for Summary without scientific notation 2019-08-13 13:24:46 +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 Properly handle metric names with lables when printing *_count and *_sum values for Summary 2019-06-28 14:14:47 +03:00
go.sum Initial commit 2019-04-08 16:29:16 +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 Added GetOrCreateGauge to be consistent with Counter and Summary 2019-04-15 15:34:02 +03:00
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
process_metrics_linux.go Expose process_cpu_seconds_system_total and process_cpu_seconds_user_total in process metrics 2019-08-05 19:16:20 +03:00
process_metrics_other.go Add process_* metrics similar to the metrics exposed by https://github.com/prometheus/client_golang 2019-07-12 17:18:57 +03:00
README.md [ci] use github actions 2019-09-08 14:53:45 +03:00
set_example_test.go typo fixes in ExampleSet 2019-06-01 23:24:25 +03:00
set_test.go Add Set for controlling metric sets to be exported via WritePrometheus call 2019-06-01 23:18:41 +03:00
set.go Update Summary quantiles before writing them to the output. 2019-06-28 11:13:39 +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 Marshal integer *_sum metric for Summary without scientific notation 2019-08-13 13:24:46 +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.

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())
	})
)

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

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

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