Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rcrowley/go-metrics
Go port of Coda Hale's Metrics library
https://github.com/rcrowley/go-metrics
Last synced: 3 days ago
JSON representation
Go port of Coda Hale's Metrics library
- Host: GitHub
- URL: https://github.com/rcrowley/go-metrics
- Owner: rcrowley
- License: other
- Created: 2011-11-21T21:35:09.000Z (about 13 years ago)
- Default Branch: master
- Last Pushed: 2023-08-19T15:34:44.000Z (over 1 year ago)
- Last Synced: 2024-10-29T11:13:05.384Z (about 1 month ago)
- Language: Go
- Homepage:
- Size: 1.24 MB
- Stars: 3,460
- Watchers: 85
- Forks: 493
- Open Issues: 79
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-ccamel - rcrowley/go-metrics - Go port of Coda Hale's Metrics library (Go)
- awesome-go - go-metrics - Go port of Coda Hale's Metrics library - ★ 2123 (Software Packages)
README
go-metrics
==========![travis build status](https://travis-ci.org/rcrowley/go-metrics.svg?branch=master)
Go port of Coda Hale's Metrics library: .
Documentation: .
Usage
-----Create and update metrics:
```go
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:```go
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:```go
// 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
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:
```go
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](https://github.com/cyberdelia/go-metrics-graphite):
```go
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](https://github.com/rcrowley/go-metrics/issues/121) and
[#124](https://github.com/rcrowley/go-metrics/issues/124) for progress and details.```go
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](https://github.com/mihasya/go-metrics-librato):
**Note**: the client included with this repository under the `librato` package
has been deprecated and moved to the repository linked above.```go
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:
```go
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](http://golang.org/pkg/expvar/)
but exposed under `/debug/metrics`, which shows a json representation of all your usual expvars
as well as all your go-metrics.```go
import "github.com/rcrowley/go-metrics/exp"exp.Exp(metrics.DefaultRegistry)
```Installation
------------```sh
go get github.com/rcrowley/go-metrics
```StatHat support additionally requires their Go client:
```sh
go get github.com/stathat/go
```Publishing Metrics
------------------Clients are available for the following destinations:
* AppOptics - https://github.com/ysamlan/go-metrics-appoptics
* Librato - https://github.com/mihasya/go-metrics-librato
* Graphite - https://github.com/cyberdelia/go-metrics-graphite
* InfluxDB - https://github.com/vrischmann/go-metrics-influxdb
* Ganglia - https://github.com/appscode/metlia
* Prometheus - https://github.com/deathowl/go-metrics-prometheus
* DataDog - https://github.com/syntaqx/go-metrics-datadog
* SignalFX - https://github.com/pascallouisperez/go-metrics-signalfx
* Honeycomb - https://github.com/getspine/go-metrics-honeycomb
* Wavefront - https://github.com/wavefrontHQ/go-metrics-wavefront
* Open-Falcon - https://github.com/g4zhuj/go-metrics-falcon
* AWS CloudWatch - [https://github.com/savaki/cloudmetrics](https://github.com/savaki/cloudmetrics)