Skip to content

Extremely fast and lightweight package for recording and exporting metrics in Prometheus exposition format.

License

Notifications You must be signed in to change notification settings

mattrobenolt/go-metrics

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

metrics

Go Reference

Extremely fast and lightweight package for recording and exporting metrics in Prometheus exposition format.

Heavily inspired and based on VictoriaMetrics/metrics.

import "go.withmatt.com/metrics"

Features

  • Very fast, very few allocations. Really.
  • Optional expiring of unobserved metrics
  • HTTP exporter
  • Built-in runtime metrics collectors
  • Easy Prometheus-like API
  • No dependencies

Quick Start

import (
	"net/http"
	"go.withmatt.com/metrics"
	"go.withmatt.com/metrics/promhttp"
)

func main() {
	// exposes Go and process runtime metrics
	metrics.RegisterDefaultCollectors()

	// create a new uint64 counter "foo" with the tag a=b
	// This will emit:
	//   foo{a="b"} 1
	c := metrics.NewUint64("foo", "a", "b")
	c.Inc()

	mux := http.NewServeMux()
	mux.Handle("/metrics", promhttp.Handler())
	panic(http.ListenAndServe("127.0.0.1:9091", mux))
}

Metric Types

  • Counters (uint64/int64/float64)
  • Gauges (uint64/int64/float64)
  • Histograms

Note

Summary type has not been implemented.

Performance

Updating metrics

Note

Updating metrics happen very typically within extremely hot paths, and nanoseconds matter.

Increment a counter through UintVec.WithLabelValue API

package sec/op vs base allocs/op
mattware 27.54n +0% 0
vm * 95.75n +247.76% 1
prom 47.36n +72.02 0
  • VM/metrics doesn't support this API natively, and their pattern for this is highly discouraged.

Update Prometheus-like histogram (le label style)

package sec/op vs base allocs/op
mattware 8.127n +0% 0
vm * - - -
prom 10.035n +23.48% 0
  • VM/metrics does not support this.

Update VictoriaMetrics-like histogram (vmrange label style)

package sec/op vs base allocs/op
mattware 15.91n +0% 0
vm 16.98n +6.72% 0
prom * - - -
  • Prom client does not support this.

Exporting metrics

Note

Exporting happens by Prometheus compatible scrapers typically.

Exporting 10,000 counters

package sec/op vs base allocs/op B/s
mattware 704.2µ +0% 1 689.13Mi
vm 1033.3µ +46.72% 10018 478.91Mi
prom 10068.0µ +1329.60% 41422 48.23Mi

Exporting 100 Prometheus-like histograms, with 100,000 observations each

package sec/op vs base allocs/op B/s
mattware 108.2µ +0% 1 811.6Mi
prom 437.4µ +304.36% 5434 200.6Mi

Exporting 100 VictoriaMetrics-like histograms, with 100,000 observations each

package sec/op vs base allocs/op B/s
mattware 462.8µ +0% 1 1069.8Mi
vm 2373.2µ +412.83% 41422 208.6Mi

About

Extremely fast and lightweight package for recording and exporting metrics in Prometheus exposition format.

Topics

Resources

License

Stars

Watchers

Forks