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:
Copy 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:
Copy 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:
Copy w, _ := syslog. Dial ( "unixgram" , "/dev/log" , syslog.LOG_INFO, "metrics" )
go metrics. Syslog (metrics.DefaultRegistry, 60 e 9 , w)
Periodically emit every metric to Graphite using the Graphite client :
Copy import "github.com/cyberdelia/go-metrics-graphite"
addr, _ := net. ResolveTCPAddr ( "tcp" , "127.0.0.1:2003" )
go graphite. Graphite (metrics.DefaultRegistry, 10 e 9 , "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.
Copy import "github.com/rcrowley/go-metrics/influxdb"
go influxdb. Influxdb (metrics.DefaultRegistry, 10 e 9 , & 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.
Copy import "github.com/mihasya/go-metrics-librato"
go librato. Librato (metrics.DefaultRegistry,
10 e 9 , // 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:
Copy import "github.com/rcrowley/go-metrics/stathat"
go stathat. Stathat (metrics.DefaultRegistry, 10 e 9 , "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.
Copy import "github.com/rcrowley/go-metrics/exp"
exp. Exp (metrics.DefaultRegistry)
Installation
Copy go get github.com/rcrowley/go-metrics
StatHat support additionally requires their Go client:
Copy go get github.com/stathat/go
Publishing Metrics
Clients are available for the following destinations: