|
|
@@ -1,277 +1,54 @@
|
|
|
go-metrics
|
|
|
==========
|
|
|
|
|
|
-TODO This code is not safe on 32-bit architectures.
|
|
|
+Go port of Coda Hale's Metrics library: <https://github.com/codahale/metrics>.
|
|
|
|
|
|
-Memory usage
|
|
|
-------------
|
|
|
-
|
|
|
-(Highly unscientific.)
|
|
|
-
|
|
|
-Command used to gather static memory usage:
|
|
|
+**This code is not safe on 32-bit architectures.**
|
|
|
|
|
|
-```sh
|
|
|
-grep ^Vm "/proc/$(ps fax | grep [m]etrics-bench | awk '{print $1}')/status"
|
|
|
-```
|
|
|
+Usage
|
|
|
+-----
|
|
|
|
|
|
-Program used to gather baseline memory usage:
|
|
|
+Create and update metrics:
|
|
|
|
|
|
```go
|
|
|
-package main
|
|
|
+r := metrics.NewRegistry()
|
|
|
|
|
|
-import "time"
|
|
|
+c := metrics.NewCounter()
|
|
|
+r.RegisterCounter("foo", c)
|
|
|
+c.Inc(47)
|
|
|
|
|
|
-func main() {
|
|
|
- time.Sleep(600e9)
|
|
|
-}
|
|
|
-```
|
|
|
+g := metrics.NewGauge()
|
|
|
+r.RegisterGauge("bar", g)
|
|
|
+g.Update(47)
|
|
|
|
|
|
-Baseline:
|
|
|
+s := metrics.NewExpDecaySample(1028, 0.015)
|
|
|
+//s := metrics.NewUniformSample(1028)
|
|
|
+h := metrics.NewHistogram(s)
|
|
|
+r.RegisterHistogram("baz", h)
|
|
|
+h.Update(47)
|
|
|
|
|
|
-```
|
|
|
-VmPeak: 42604 kB
|
|
|
-VmSize: 42604 kB
|
|
|
-VmLck: 0 kB
|
|
|
-VmHWM: 1120 kB
|
|
|
-VmRSS: 1120 kB
|
|
|
-VmData: 35460 kB
|
|
|
-VmStk: 136 kB
|
|
|
-VmExe: 1020 kB
|
|
|
-VmLib: 1848 kB
|
|
|
-VmPTE: 36 kB
|
|
|
-VmSwap: 0 kB
|
|
|
+m := metrics.NewMeter()
|
|
|
+r.RegisterMeter("bang", m)
|
|
|
+m.Mark(47)
|
|
|
```
|
|
|
|
|
|
-Program used to gather metric memory usage (with other metrics being similar):
|
|
|
+Periodically log every metric in human-readable form to standard error:
|
|
|
|
|
|
```go
|
|
|
-package main
|
|
|
-
|
|
|
-import (
|
|
|
- "fmt"
|
|
|
- "metrics"
|
|
|
- "time"
|
|
|
-)
|
|
|
-
|
|
|
-func main() {
|
|
|
- fmt.Sprintf("foo")
|
|
|
- metrics.NewRegistry()
|
|
|
- time.Sleep(600e9)
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-1000 counters registered:
|
|
|
-
|
|
|
-```
|
|
|
-VmPeak: 44016 kB
|
|
|
-VmSize: 44016 kB
|
|
|
-VmLck: 0 kB
|
|
|
-VmHWM: 1928 kB
|
|
|
-VmRSS: 1928 kB
|
|
|
-VmData: 36868 kB
|
|
|
-VmStk: 136 kB
|
|
|
-VmExe: 1024 kB
|
|
|
-VmLib: 1848 kB
|
|
|
-VmPTE: 40 kB
|
|
|
-VmSwap: 0 kB
|
|
|
-```
|
|
|
-
|
|
|
-**1.412 kB virtual, TODO 0.808 kB resident per counter.**
|
|
|
-
|
|
|
-100000 counters registered:
|
|
|
-
|
|
|
-```
|
|
|
-VmPeak: 55024 kB
|
|
|
-VmSize: 55024 kB
|
|
|
-VmLck: 0 kB
|
|
|
-VmHWM: 12440 kB
|
|
|
-VmRSS: 12440 kB
|
|
|
-VmData: 47876 kB
|
|
|
-VmStk: 136 kB
|
|
|
-VmExe: 1024 kB
|
|
|
-VmLib: 1848 kB
|
|
|
-VmPTE: 64 kB
|
|
|
-VmSwap: 0 kB
|
|
|
-```
|
|
|
-
|
|
|
-**0.1242 kB virtual, 0.1132 kB resident per counter.**
|
|
|
-
|
|
|
-1000 gauges registered:
|
|
|
-
|
|
|
-```
|
|
|
-VmPeak: 44012 kB
|
|
|
-VmSize: 44012 kB
|
|
|
-VmLck: 0 kB
|
|
|
-VmHWM: 1928 kB
|
|
|
-VmRSS: 1928 kB
|
|
|
-VmData: 36868 kB
|
|
|
-VmStk: 136 kB
|
|
|
-VmExe: 1020 kB
|
|
|
-VmLib: 1848 kB
|
|
|
-VmPTE: 40 kB
|
|
|
-VmSwap: 0 kB
|
|
|
-```
|
|
|
-
|
|
|
-**1.408 kB virtual, 0.808 kB resident per counter.**
|
|
|
-
|
|
|
-100000 gauges registered:
|
|
|
-
|
|
|
-```
|
|
|
-VmPeak: 55020 kB
|
|
|
-VmSize: 55020 kB
|
|
|
-VmLck: 0 kB
|
|
|
-VmHWM: 12432 kB
|
|
|
-VmRSS: 12432 kB
|
|
|
-VmData: 47876 kB
|
|
|
-VmStk: 136 kB
|
|
|
-VmExe: 1020 kB
|
|
|
-VmLib: 1848 kB
|
|
|
-VmPTE: 60 kB
|
|
|
-VmSwap: 0 kB
|
|
|
-```
|
|
|
-
|
|
|
-**0.12416 kB virtual, 0.11312 resident per gauge.**
|
|
|
-
|
|
|
-1000 histograms with a uniform sample size of 1028:
|
|
|
-
|
|
|
-```
|
|
|
-VmPeak: 72272 kB
|
|
|
-VmSize: 72272 kB
|
|
|
-VmLck: 0 kB
|
|
|
-VmHWM: 16204 kB
|
|
|
-VmRSS: 16204 kB
|
|
|
-VmData: 65100 kB
|
|
|
-VmStk: 136 kB
|
|
|
-VmExe: 1048 kB
|
|
|
-VmLib: 1848 kB
|
|
|
-VmPTE: 80 kB
|
|
|
-VmSwap: 0 kB
|
|
|
+metrics.Log(r, 60, log.New(os.Stderr, "metrics: ", log.Lmicroseconds))
|
|
|
```
|
|
|
|
|
|
-**29.668 kB virtual, TODO 15.084 resident per histogram.**
|
|
|
+Periodically log every metric in slightly-more-parseable form to syslog:
|
|
|
|
|
|
-10000 histograms with a uniform sample size of 1028:
|
|
|
-
|
|
|
-```
|
|
|
-VmPeak: 256912 kB
|
|
|
-VmSize: 256912 kB
|
|
|
-VmLck: 0 kB
|
|
|
-VmHWM: 146204 kB
|
|
|
-VmRSS: 146204 kB
|
|
|
-VmData: 249740 kB
|
|
|
-VmStk: 136 kB
|
|
|
-VmExe: 1048 kB
|
|
|
-VmLib: 1848 kB
|
|
|
-VmPTE: 448 kB
|
|
|
-VmSwap: 0 kB
|
|
|
-```
|
|
|
-
|
|
|
-**21.4308 kB virtual, 14.5084 kB resident per histogram.**
|
|
|
-
|
|
|
-50000 histograms with a uniform sample size of 1028:
|
|
|
-
|
|
|
-```
|
|
|
-VmPeak: 908112 kB
|
|
|
-VmSize: 908112 kB
|
|
|
-VmLck: 0 kB
|
|
|
-VmHWM: 645832 kB
|
|
|
-VmRSS: 645588 kB
|
|
|
-VmData: 900940 kB
|
|
|
-VmStk: 136 kB
|
|
|
-VmExe: 1048 kB
|
|
|
-VmLib: 1848 kB
|
|
|
-VmPTE: 1716 kB
|
|
|
-VmSwap: 1544 kB
|
|
|
-```
|
|
|
-
|
|
|
-**17.31016 kB virtual, 12.88936 kB resident per histogram.**
|
|
|
-
|
|
|
-1000 histograms with an exponentially-decaying sample size of 1028 and alpha of 0.015:
|
|
|
-
|
|
|
-```
|
|
|
-VmPeak: 62480 kB
|
|
|
-VmSize: 62480 kB
|
|
|
-VmLck: 0 kB
|
|
|
-VmHWM: 11572 kB
|
|
|
-VmRSS: 11572 kB
|
|
|
-VmData: 55308 kB
|
|
|
-VmStk: 136 kB
|
|
|
-VmExe: 1048 kB
|
|
|
-VmLib: 1848 kB
|
|
|
-VmPTE: 64 kB
|
|
|
-VmSwap: 0 kB
|
|
|
-```
|
|
|
-
|
|
|
-**19.876 kB virtual, 10.452 kB resident per histogram.**
|
|
|
-
|
|
|
-10000 histograms with an exponentially-decaying sample size of 1028 and alpha of 0.015:
|
|
|
-
|
|
|
-```
|
|
|
-VmPeak: 153296 kB
|
|
|
-VmSize: 153296 kB
|
|
|
-VmLck: 0 kB
|
|
|
-VmHWM: 101176 kB
|
|
|
-VmRSS: 101176 kB
|
|
|
-VmData: 146124 kB
|
|
|
-VmStk: 136 kB
|
|
|
-VmExe: 1048 kB
|
|
|
-VmLib: 1848 kB
|
|
|
-VmPTE: 240 kB
|
|
|
-VmSwap: 0 kB
|
|
|
-```
|
|
|
-
|
|
|
-**11.0692 kB virtual, 10.0056 kB resident per histogram.**
|
|
|
-
|
|
|
-50000 histograms with an exponentially-decaying sample size of 1028 and alpha of 0.015:
|
|
|
-
|
|
|
-```
|
|
|
-VmPeak: 557264 kB
|
|
|
-VmSize: 557264 kB
|
|
|
-VmLck: 0 kB
|
|
|
-VmHWM: 501056 kB
|
|
|
-VmRSS: 501056 kB
|
|
|
-VmData: 550092 kB
|
|
|
-VmStk: 136 kB
|
|
|
-VmExe: 1048 kB
|
|
|
-VmLib: 1848 kB
|
|
|
-VmPTE: 1032 kB
|
|
|
-VmSwap: 0 kB
|
|
|
-```
|
|
|
-
|
|
|
-**10.2932 kB virtual, 9.99872 kB resident per histogram.**
|
|
|
-
|
|
|
-1000 meters:
|
|
|
-
|
|
|
-```
|
|
|
-VmPeak: 74504 kB
|
|
|
-VmSize: 74504 kB
|
|
|
-VmLck: 0 kB
|
|
|
-VmHWM: 24124 kB
|
|
|
-VmRSS: 24124 kB
|
|
|
-VmData: 67340 kB
|
|
|
-VmStk: 136 kB
|
|
|
-VmExe: 1040 kB
|
|
|
-VmLib: 1848 kB
|
|
|
-VmPTE: 92 kB
|
|
|
-VmSwap: 0 kB
|
|
|
+```go
|
|
|
+w, err := syslog.Dial("unixgram", "/dev/log", syslog.LOG_INFO, "metrics")
|
|
|
+if nil != err { log.Fatalln(err) }
|
|
|
+metrics.Syslog(r, 60, w)
|
|
|
```
|
|
|
|
|
|
-**31.9 kB virtual, 23.004 kB resident per meter.**
|
|
|
-
|
|
|
-10000 meters:
|
|
|
+Installation
|
|
|
+------------
|
|
|
|
|
|
+```sh
|
|
|
+goinstall github.com/rcrowley/go-metrics
|
|
|
```
|
|
|
-VmPeak: 278920 kB
|
|
|
-VmSize: 278920 kB
|
|
|
-VmLck: 0 kB
|
|
|
-VmHWM: 227300 kB
|
|
|
-VmRSS: 227300 kB
|
|
|
-VmData: 271756 kB
|
|
|
-VmStk: 136 kB
|
|
|
-VmExe: 1040 kB
|
|
|
-VmLib: 1848 kB
|
|
|
-VmPTE: 488 kB
|
|
|
-VmSwap: 0 kB
|
|
|
-```
|
|
|
-
|
|
|
-**23.6316 kB virtual, 22.618 kB resident per meter.**
|