6fc4c03c79
Previously Summary quantiles were updated after writing them to the output, so the output contained old quantile values. |
||
---|---|---|
.travis.yml | ||
counter_example_test.go | ||
counter_test.go | ||
counter.go | ||
gauge_example_test.go | ||
gauge_test.go | ||
gauge.go | ||
go.mod | ||
go.sum | ||
LICENSE | ||
metrics_example_test.go | ||
metrics_test.go | ||
metrics.go | ||
README.md | ||
set_example_test.go | ||
set_test.go | ||
set.go | ||
summary_example_test.go | ||
summary_test.go | ||
summary.go | ||
validator_test.go | ||
validator.go |
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
- It doesn't implement advanced functionality from github.com/prometheus/client_golang.
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
Metrics
has been extracted from VictoriaMetrics sources. See this article for more info aboutVictoriaMetrics
.
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.