Skip to content

araddon/go-metrics

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 

Repository files navigation

go-metrics is a library for aggregating data into metrics (counts, gauges, histograms) as well as a daemon server to collect data and forward to visualization services.

It can be used to embed in an application for tracking internal app metrics, and then reporting out.

Or the daemon server can collect data over UDP requests, and send metrics to Librato or Stathat .

See the Metricsd folder for how to send to Stathat/librato.

Example of usage embedding the metrics in your application :

import "github.com/samuel/go-metrics/metrics"
import "time"

func init() {
    go metrics.RunMetricsHeartbeat(10 ,60 * time.Second)
}

func hello(w http.ResponseWriter, r *http.Request) {
    // update a counter
    metrics.IncrCounter("my_requests")
    metrics.UpdateCounterf("my_requests_size", len(r.Body))
    io.WriteString(w, "hello")
}

A more elaborate example, registering recievers to get a callback, and custom metrics functions:

import "github.com/samuel/go-metrics/metrics"
import "time"

var myVarName float64 = 2000
var curUsers int

func init() {
    metrics.AddSnapshotReceiver(func(snap metrics.Snapshot){
        mongdb.Save(snap)
        checkCapacity(snap)
    })

    metrics.AddMetricsFunction(metricsData)

    go metrics.RunMetricsHeartbeat(0, time.Second * 60)
}

func metricsData(snap *metrics.Snapshot) {
    snap.Ints["my_custom_value"] = uint64(myVarName) 
    snap.Ints["requests_peruser"] = snap.Ints["my_requests"] / uint64(curUsers)  
}

func foo(r http.Request) {
    myVarName += len(r.Body)
    metrics.IncrCounter("my_requests")
}

// how to use the snapshot data
func checkCapacity(snap) {
    if rate, ok := snap.Ints["my_requests"]; ok {
        if rate > 10000 {
            StartNewServer()
        }
    }
}

About

Metrics library and aggregation daemon for Go

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 100.0%