Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Go port of Coda Hale's Metrics library
Go
branch: master
Failed to load latest commit information.
cmd initial implementation of GaugeFloat64
influxdb Update influxdb.go
librato coerce timestamps so graphs from disparate sources line up
stathat initial implementation of GaugeFloat64
.gitignore never-read debugging tool.
LICENSE Updated docs, deleted Makefiles.
README.md Fix typo
counter.go Allow lazy instantiation of metric in GetOrRegister.
counter_test.go Fully introduce snapshots for all metric types.
debug.go Use time.Tick everywhere else we should, too
debug_test.go Skip tests that require GOMAXPROCS > 1.
ewma.go ewma: ensure 64-bit alignment of uncounted
ewma_test.go Benchmarks for everyone!
gauge.go Allow lazy instantiation of metric in GetOrRegister.
gauge_float64.go Do not export methods from sync.Mutex on gauges.
gauge_float64_test.go Tidying whitespace.
gauge_test.go Fully introduce snapshots for all metric types.
graphite.go Merge remote-tracking branch 'pteichman/durations'
graphite_test.go Allow custom percentiles to report to Graphite
healthcheck.go Mostly documentation and naming changes.
histogram.go Alphabetize
histogram_test.go Fix tests broken by sample changes.
json.go use a time.Ticker instead of the time.Sleep
json_test.go Added JSON->io.Writer; consistent ordering to WriteOnce
log.go Use time.Tick everywhere else we should, too
memory.md Installation and usage.
meter.go Fix Meter.RateMean int64 overflow
meter_test.go Use a single goroutine for meters.
metrics.go ETOOCLEVER so s/ObserverEffect/UseNilMetrics/.
metrics_test.go initial implementation of GaugeFloat64
opentsdb.go Fix #74 for OpenTSDB, too
opentsdb_test.go add opentsdb support
registry.go Fix #100 by reading len within the lock
registry_test.go Return an error from Register and disallow dupes
runtime.go Fix reporting for NumCgoCall() and apply go fmt
runtime_cgo.go Fixes: Won't compile on AppEngine #67
runtime_no_cgo.go Fixes: Won't compile on AppEngine #67
runtime_test.go Rework NumGC and PauseNs runtime metrics.
sample.go Prevent most allocations in ExpDecaySample
sample_test.go Test for #104
syslog.go Use time.Tick everywhere else we should, too
timer.go Alphabetize
timer_test.go Fix tests broken by sample changes.
writer.go Use time.Tick everywhere else we should, too
writer_test.go Merge branch 'master' of github.com:stuartcarnie/go-metrics

README.md

go-metrics

Go port of Coda Hale's Metrics library: https://github.com/codahale/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, 60e9, 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:

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

Periodically emit every metric into InfluxDB:

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:

import "github.com/rcrowley/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")

Installation

go get github.com/rcrowley/go-metrics

StatHat support additionally requires their Go client:

go get github.com/stathat/go
Something went wrong with that request. Please try again.