Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Go port of Coda Hale's Metrics library
Go
branch: master

(#86) Add UnregisterAll to Registry and StandardRegistry

This new interface method and its standard implementation will make it
easier to test libraries that depend on go-metrics and assume the
default registry (which is analogous to the relationship between expvar
and http.DefaultServeMux).
latest commit dee209f245
@rcrowley authored
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 Use [0,1] value for Librato percentile in Readme
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 (#86) Add UnregisterAll to Registry and StandardRegistry
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 Added comment about the source of the heap implementation.
sample_test.go Add test to expose Sample data race
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},       // precentiles 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.