Skip to content
Go port of Coda Hale's Metrics library
Go Shell
Find file
Latest commit eeba7bd Feb 25, 2016 @mihasya mihasya Merge pull request #138 from sendgrid/master
Add native thread count metric
Failed to load latest commit information.
cmd initial implementation of GaugeFloat64 Mar 22, 2014
exp use /debug/metrics as endpoint, seems more proper/elegant Nov 30, 2015
librato Merge pull request #114 from pressly/master Nov 29, 2015
stathat initial implementation of GaugeFloat64 Mar 22, 2014
.gitignore never-read debugging tool. Aug 9, 2013
.travis.yml Add support for Golang 1.5 in Travis CI Nov 29, 2015
LICENSE Updated docs, deleted Makefiles. Feb 23, 2012
README.md Merge pull request #96 from Dieterbe/expvar Jan 13, 2016
counter.go Allow lazy instantiation of metric in GetOrRegister. Mar 28, 2014
counter_test.go Fully introduce snapshots for all metric types. Jan 7, 2014
debug.go Use time.Tick everywhere else we should, too Aug 3, 2014
debug_test.go Skip tests that require GOMAXPROCS > 1. Oct 31, 2013
ewma.go gofmt pass Jul 12, 2015
ewma_test.go Benchmarks for everyone! Oct 17, 2013
gauge.go Allow lazy instantiation of metric in GetOrRegister. Mar 28, 2014
gauge_float64.go Do not export methods from sync.Mutex on gauges. Mar 22, 2014
gauge_float64_test.go Tidying whitespace. Mar 22, 2014
gauge_test.go Fully introduce snapshots for all metric types. Jan 7, 2014
graphite.go deprecate the graphite client in favor of the new separate lib Jul 12, 2015
graphite_test.go gofmt pass Jul 12, 2015
healthcheck.go Mostly documentation and naming changes. Jan 7, 2014
histogram.go Alphabetize Oct 4, 2014
histogram_test.go Fix tests broken by sample changes. Jan 14, 2014
json.go Fix registry race caused by copying a sync.Mutex Nov 17, 2014
json_test.go Added JSON->io.Writer; consistent ordering to WriteOnce Jun 6, 2014
log.go include duration's unit in printed metrics Sep 12, 2015
memory.md Installation and usage. Nov 21, 2011
meter.go Fix Meter.RateMean int64 overflow May 22, 2014
meter_test.go Fix race condition on test Nov 29, 2015
metrics.go ETOOCLEVER so s/ObserverEffect/UseNilMetrics/. Sep 13, 2013
metrics_test.go initial implementation of GaugeFloat64 Mar 22, 2014
opentsdb.go Fix #74 for OpenTSDB, too Nov 8, 2014
opentsdb_test.go gofmt pass Jul 12, 2015
registry.go Add NewPrefixedChildRegistry() Sep 25, 2015
registry_test.go Add NewPrefixedChildRegistry() Sep 26, 2015
runtime.go Add thread count metric Dec 1, 2015
runtime_cgo.go Fixes: Won't compile on AppEngine #67 Oct 15, 2014
runtime_gccpufraction.go Add support for fraction of CPU time used by GC Nov 29, 2015
runtime_no_cgo.go Fixes: Won't compile on AppEngine #67 Oct 15, 2014
runtime_no_gccpufraction.go Add support for fraction of CPU time used by GC Nov 29, 2015
runtime_test.go Add thread count metric Dec 1, 2015
sample.go Prevent most allocations in ExpDecaySample Jun 1, 2015
sample_test.go Test for #104 May 26, 2015
syslog.go Use time.Tick everywhere else we should, too Aug 3, 2014
timer.go Alphabetize Oct 4, 2014
timer_test.go Fix tests broken by sample changes. Jan 14, 2014
validate.sh first attempt at basic travis build Jul 18, 2015
writer.go Use time.Tick everywhere else we should, too Aug 3, 2014
writer_test.go Merge branch 'master' of github.com:stuartcarnie/go-metrics Jul 26, 2014

README.md

go-metrics

travis build status

Go port of Coda Hale's Metrics library: https://github.com/dropwizard/metrics.

Documentation: http://godoc.org/github.com/rcrowley/go-metrics.

Usage

Create and update metrics:

c := metrics.NewCounter()
metrics.Register("foo", c)
c.Inc(47)

g := metrics.NewGauge()
metrics.Register("bar", g)
g.Update(47)

s := metrics.NewExpDecaySample(1028, 0.015) // or metrics.NewUniformSample(1028)
h := metrics.NewHistogram(s)
metrics.Register("baz", h)
h.Update(47)

m := metrics.NewMeter()
metrics.Register("quux", m)
m.Mark(47)

t := metrics.NewTimer()
metrics.Register("bang", t)
t.Time(func() {})
t.Update(47)

Periodically log every metric in human-readable form to standard error:

go metrics.Log(metrics.DefaultRegistry, 5 * time.Second, log.New(os.Stderr, "metrics: ", log.Lmicroseconds))

Periodically log every metric in slightly-more-parseable form to syslog:

w, _ := syslog.Dial("unixgram", "/dev/log", syslog.LOG_INFO, "metrics")
go metrics.Syslog(metrics.DefaultRegistry, 60e9, w)

Periodically emit every metric to Graphite using the Graphite client:

import "github.com/cyberdelia/go-metrics-graphite"

addr, _ := net.ResolveTCPAddr("tcp", "127.0.0.1:2003")
go graphite.Graphite(metrics.DefaultRegistry, 10e9, "metrics", addr)

Periodically emit every metric into InfluxDB:

NOTE: this has been pulled out of the library due to constant fluctuations in the InfluxDB API. In fact, all client libraries are on their way out. see issues #121 and #124 for progress and details.

import "github.com/rcrowley/go-metrics/influxdb"

go influxdb.Influxdb(metrics.DefaultRegistry, 10e9, &influxdb.Config{
    Host:     "127.0.0.1:8086",
    Database: "metrics",
    Username: "test",
    Password: "test",
})

Periodically upload every metric to Librato using the Librato client:

Note: the client included with this repository under the librato package has been deprecated and moved to the repository linked above.

import "github.com/mihasya/go-metrics-librato"

go librato.Librato(metrics.DefaultRegistry,
    10e9,                  // interval
    "example@example.com", // account owner email address
    "token",               // Librato API token
    "hostname",            // source
    []float64{0.95},       // percentiles to send
    time.Millisecond,      // time unit
)

Periodically emit every metric to StatHat:

import "github.com/rcrowley/go-metrics/stathat"

go stathat.Stathat(metrics.DefaultRegistry, 10e9, "example@example.com")

Maintain all metrics along with expvars at /debug/metrics:

This uses the same mechanism as the official expvar but exposed under /debug/metrics, which shows a json representation of all your usual expvars as well as all your go-metrics.

import "github.com/rcrowley/go-metrics/exp"

exp.Exp(metrics.DefaultRegistry)

Installation

go get github.com/rcrowley/go-metrics

StatHat support additionally requires their Go client:

go get github.com/stathat/go

Publishing Metrics

Clients are available for the following destinations:

Something went wrong with that request. Please try again.