# README

go-metrics

travis build status

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

Documentation: https://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)

r := NewRegistry()
g := metrics.NewRegisteredFunctionalGauge("cache-evictions", r, func() int64 { return cache.getEvictionsCount() })

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)

Register() is not threadsafe. For threadsafe metric registration use GetOrRegister:

t := metrics.GetOrRegisterTimer("account.create.latency", nil)
t.Time(func() {})
t.Update(47)

NOTE: Be sure to unregister short-lived meters and timers otherwise they will leak memory:

// Will call Stop() on the Meter to allow for garbage collection
metrics.Unregister("quux")
// Or similarly for a Timer that embeds a Meter
metrics.Unregister("bang")

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/vrischmann/go-metrics-influxdb"

go influxdb.InfluxDB(metrics.DefaultRegistry,
  10e9, 
  "127.0.0.1:8086", 
  "database-name", 
  "username", 
  "password"
)

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
    "[email protected]", // 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, "[email protected]")

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:

# Packages

Hook go-metrics into expvar on any /debug/metrics request, load all vars from the registry into expvar, and execute regular expvar handler.
No description provided by the author
No description provided by the author
Package prometheus exposes go-metrics into a Prometheus format.

# Functions

CalculatePercentiles returns a slice of arbitrary percentiles of the slice of int64.
Capture new values for the Go garbage collector statistics exported in debug.GCStats.
Capture new values for the Go garbage collector statistics exported in debug.GCStats.
CollectProcessMetrics periodically collects various metrics about the running process.
Call the given function for each registered metric.
Get the metric by the given name or nil if none is registered.
Gets an existing metric or creates and registers a new one.
GetOrRegisterCounter returns an existing Counter or constructs and registers a new StandardCounter.
GetOrRegisterCounterFloat64 returns an existing CounterFloat64 or constructs and registers a new StandardCounterFloat64.
GetOrRegisterCounterFloat64Forced returns an existing CounterFloat64 or constructs and registers a new CounterFloat64 no matter the global switch is enabled or not.
GetOrRegisterCounterForced returns an existing Counter or constructs and registers a new Counter no matter the global switch is enabled or not.
GetOrRegisterGauge returns an existing Gauge or constructs and registers a new StandardGauge.
GetOrRegisterGaugeFloat64 returns an existing GaugeFloat64 or constructs and registers a new StandardGaugeFloat64.
GetOrRegisterGaugeInfo returns an existing GaugeInfo or constructs and registers a new StandardGaugeInfo.
GetOrRegisterHistogram returns an existing Histogram or constructs and registers a new StandardHistogram.
GetOrRegisterHistogramLazy returns an existing Histogram or constructs and registers a new StandardHistogram.
GetOrRegisterMeter returns an existing Meter or constructs and registers a new StandardMeter.
GetOrRegisterResettingTimer returns an existing ResettingTimer or constructs and registers a new StandardResettingTimer.
GetOrRegisterTimer returns an existing Timer or constructs and registers a new StandardTimer.
Graphite is a blocking exporter function which reports metrics in r to a graphite server located at addr, flushing them every d duration and prepending metric names with prefix.
GraphiteOnce performs a single submission to Graphite, returning a non-nil error on failed connections.
GraphiteWithConfig is a blocking exporter function just like Graphite, but it takes a GraphiteConfig instead.
No description provided by the author
Output each metric in the given registry periodically using the given logger.
Register the given metric under the given name.
No description provided by the author
No description provided by the author
No description provided by the author
NewCounter constructs a new StandardCounter.
NewCounterFloat64 constructs a new StandardCounterFloat64.
NewCounterFloat64Forced constructs a new StandardCounterFloat64 and returns it no matter if the global switch is enabled or not.
NewCounterForced constructs a new StandardCounter and returns it no matter if the global switch is enabled or not.
NewCustomTimer constructs a new StandardTimer from a Histogram and a Meter.
NewEWMA constructs a new EWMA with the given alpha.
NewEWMA1 constructs a new EWMA for a one-minute moving average.
NewEWMA15 constructs a new EWMA for a fifteen-minute moving average.
NewEWMA5 constructs a new EWMA for a five-minute moving average.
NewExpDecaySample constructs a new exponentially-decaying sample with the given reservoir size and alpha.
NewGauge constructs a new StandardGauge.
NewGaugeFloat64 constructs a new StandardGaugeFloat64.
NewGaugeInfo constructs a new StandardGaugeInfo.
NewHealthcheck constructs a new Healthcheck which will use the given function to update its status.
NewHistogram constructs a new StandardHistogram from a Sample.
NewInactiveMeter returns a meter but does not start any goroutines.
NewMeter constructs a new StandardMeter and launches a goroutine.
NewOrderedRegistry creates a new ordered registry (for testing).
No description provided by the author
No description provided by the author
NewRegisteredCounter constructs and registers a new StandardCounter.
NewRegisteredCounterFloat64 constructs and registers a new StandardCounterFloat64.
NewRegisteredCounterFloat64Forced constructs and registers a new StandardCounterFloat64 and launches a goroutine no matter the global switch is enabled or not.
NewRegisteredCounterForced constructs and registers a new StandardCounter and launches a goroutine no matter the global switch is enabled or not.
NewRegisteredGauge constructs and registers a new StandardGauge.
NewRegisteredGaugeFloat64 constructs and registers a new StandardGaugeFloat64.
NewRegisteredGaugeInfo constructs and registers a new StandardGaugeInfo.
NewRegisteredHistogram constructs and registers a new StandardHistogram from a Sample.
NewRegisteredMeter constructs and registers a new StandardMeter and launches a goroutine.
NewRegisteredResettingTimer constructs and registers a new StandardResettingTimer.
NewRegisteredTimer constructs and registers a new StandardTimer.
NewRegistry creates a new registry.
NewResettingTimer constructs a new StandardResettingTimer.
NewSlidingTimeWindowArraySample creates new object with given window of time.
NewTimer constructs a new StandardTimer using an exponentially-decaying sample with the same reservoir size and alpha as UNIX load averages.
NewUniformSample constructs a new uniform sample with the given reservoir size.
OpenTSDB is a blocking exporter function which reports metrics in r to a TSDB server located at addr, flushing them every d duration and prepending metric names with prefix.
OpenTSDBWithConfig is a blocking exporter function just like OpenTSDB, but it takes a OpenTSDBConfig instead.
ReadCPUStats retrieves the current CPU stats.
ReadDiskStats retrieves the disk IO stats belonging to the current process.
No description provided by the author
Register the given metric under the given name.
Register metrics for the Go garbage collector statistics exported in debug.GCStats.
ResettingSample converts an ordinary sample into one that resets whenever its snapshot is retrieved.
Run all registered healthchecks.
No description provided by the author
SamplePercentiles returns an arbitrary percentile of the slice of int64.
SampleVariance returns the variance of the slice of int64.
Output each metric in the given registry to syslog periodically using the given syslogger.
Unregister the metric with the given name.
Write sorts writes each metric in the given registry periodically to the given io.Writer.
WriteJSON writes metrics from the given registry periodically to the specified io.Writer as JSON.
WriteJSONOnce writes metrics from the given registry to the specified io.Writer as JSON.
WriteOnce sorts and writes metrics in the given registry to the given io.Writer.

# Constants

No description provided by the author
No description provided by the author
Initial slice capacity for the values stored in a ResettingTimer.
SlidingTimeWindowClearBufferTicks is the number of ticks to keep past the requested trim.
SlidingTimeWindowCollisionBuffer allow this many duplicate ticks before overwriting measurements.
SlidingTimeWindowTrimThreshold is number of updates between trimming data.

# Variables

registry used in swarm.
DefaultConfig is the default config for metrics used in go-ethereum.
No description provided by the author
Enabled is checked by the constructor functions for all of the standard metrics.
EnabledExpensive is a soft-flag meant for external packages to check if costly metrics gathering is allowed or not.
No description provided by the author

# Structs

No description provided by the author
No description provided by the author
Config contains the configuration for the metric collection.
CPUStats is the system and process CPU stats.
DiskStats is the per process disk io stats.
ExpDecaySample is an exponentially-decaying sample using a forward-decaying priority reservoir.
GraphiteConfig provides a container with configuration parameters for the Graphite exporter.
NilCounter is a no-op Counter.
No description provided by the author
NilEWMA is a no-op EWMA.
NilGauge is a no-op Gauge.
NilGaugeFloat64 is a no-op Gauge.
No description provided by the author
NilHealthcheck is a no-op.
NilHistogram is a no-op Histogram.
NilMeter is a no-op Meter.
NilResettingTimer is a no-op ResettingTimer.
NilSample is a no-op Sample.
NilTimer is a no-op Timer.
OpenTSDBConfig provides a container with configuration parameters for the OpenTSDB exporter.
No description provided by the author
SlidingTimeWindowArraySample is ported from Coda Hale's dropwizard library <https://github.com/dropwizard/metrics/pull/1139> A reservoir implementation backed by a sliding window that stores only the measurements made in the last given window of time.
StandardCounterFloat64 is the standard implementation of a CounterFloat64 and uses the atomic to manage a single float64 value.
StandardEWMA is the standard implementation of an EWMA and tracks the number of uncounted events and processes them on each tick.
StandardGauge is the standard implementation of a Gauge and uses the sync/atomic package to manage a single int64 value.
StandardGaugeFloat64 is the standard implementation of a GaugeFloat64 and uses atomic to manage a single float64 value.
StandardGaugeInfo is the standard implementation of a GaugeInfo and uses sync.Mutex to manage a single string value.
StandardHealthcheck is the standard implementation of a Healthcheck and stores the status and a function to call to update the status.
StandardHistogram is the standard implementation of a Histogram and uses a Sample to bound its memory use.
StandardMeter is the standard implementation of a Meter.
The standard implementation of a Registry uses sync.map of names to metrics.
StandardResettingTimer is the standard implementation of a ResettingTimer.
StandardTimer is the standard implementation of a Timer and uses a Histogram and Meter.
A uniform sample using Vitter's Algorithm R.

# Interfaces

Counter hold an int64 value that can be incremented and decremented.
CounterFloat64 holds a float64 value that can be incremented and decremented.
No description provided by the author
No description provided by the author
EWMAs continuously calculate an exponentially-weighted moving average based on an outside source of clock ticks.
No description provided by the author
Gauge holds an int64 value that can be set arbitrarily.
GaugeFloat64 hold a float64 value that can be set arbitrarily.
No description provided by the author
GaugeInfo holds a GaugeInfoValue value that can be set arbitrarily.
No description provided by the author
GaugeSnapshot contains a readonly int64.
Healthcheck holds an error value describing an arbitrary up/down status.
Histogram calculates distribution statistics from a series of int64 values.
No description provided by the author
No description provided by the author
Meters count events to produce exponentially-weighted moving average rates at one-, five-, and fifteen-minutes and a mean rate.
No description provided by the author
A Registry holds references to a set of metrics by name and can iterate over them, calling callback functions provided by the user.
ResettingTimer is used for storing aggregated values for timers, which are reset on every flush interval.
No description provided by the author
Samples maintain a statistically-significant selection of values from a stream.
No description provided by the author
Stoppable defines the metrics which has to be stopped.
Timers capture the duration and rate of events.
No description provided by the author

# Type aliases

DuplicateMetric is the error returned by Registry.Register when a metric already exists.
GaugeInfoValue is a mapping of keys to values.
StandardCounter is the standard implementation of a Counter and uses the sync/atomic package to manage a single int64 value.