141 lines
4.4 KiB
Markdown
Executable File
141 lines
4.4 KiB
Markdown
Executable File
# go-runtime-metrics
|
|
Collect golang runtime metrics, pushing to [InfluxDB](https://www.influxdata.com/time-series-platform/influxdb/) or pulling with [Telegraf](https://www.influxdata.com/time-series-platform/telegraf/). Inspired by https://github.com/bmhatfield/go-runtime-metrics
|
|
|
|
## Installation
|
|
|
|
go get -u github.com/tevjef/go-runtime-metrics
|
|
|
|
## Push Usage
|
|
|
|
This library can be configured to push metrics directly to InfluxDB.
|
|
|
|
```go
|
|
import (
|
|
metrics "github.com/tevjef/go-runtime-metrics"
|
|
)
|
|
|
|
func main() {
|
|
err := metrics.RunCollector(metrics.DefaultConfig)
|
|
|
|
if err != nil {
|
|
// handle error
|
|
}
|
|
}
|
|
|
|
```
|
|
|
|
Once imported and running, you can expect a number of Go runtime metrics to be sent to InfluxDB.
|
|
An example of what this looks like when configured to work with [Grafana](http://grafana.org/):
|
|
|
|

|
|
|
|
[Download Dashboard](https://grafana.net/dashboards/1144)
|
|
|
|
## Pull Usage via [expvar](https://golang.org/pkg/expvar/)
|
|
|
|
Package [expvar](https://golang.org/pkg/expvar/) provides a standardized interface to public variables. This library provides an exported InfluxDB formatted variable with a few other benefits:
|
|
|
|
* Metric names are easily parsed by regexp.
|
|
* Lighter than the standard library memstat expvar
|
|
* Includes stats for `cpu.cgo_calls`, `cpu.goroutines` and timing of the last GC pause with `mem.gc.pause`.
|
|
* Works out the box with Telegraf's [InfluxDB input plugin](https://github.com/influxdata/telegraf/tree/master/plugins/inputs/influxdb)
|
|
|
|
Import this library's expvar package with `import _ "github.com/tevjef/go-runtime-metrics/expvar"` to export a variable with default configurations.
|
|
```json
|
|
{
|
|
"/go/bin/binary": {
|
|
"name": "go_runtime_metrics",
|
|
"tags": {
|
|
"go.arch": "amd64",
|
|
"go.os": "darwin",
|
|
"go.version": "go1.7.4"
|
|
},
|
|
"values": {
|
|
"cpu.count": 4,
|
|
"cpu.cgo_calls": 1,
|
|
"cpu.goroutines": 2,
|
|
"mem.alloc": 667576,
|
|
"mem.frees": 104,
|
|
"mem.gc.count": 0,
|
|
"mem.gc.last": 0,
|
|
"mem.gc.next": 4194304,
|
|
"mem.gc.pause": 0,
|
|
"mem.gc.pause_total": 0,
|
|
"mem.gc.sys": 65536,
|
|
"mem.heap.alloc": 667576,
|
|
"mem.heap.idle": 475136,
|
|
"mem.heap.inuse": 1327104,
|
|
"mem.heap.objects": 5227,
|
|
"mem.heap.released": 0,
|
|
"mem.heap.sys": 1802240,
|
|
"mem.lookups": 3,
|
|
"mem.malloc": 5331,
|
|
"mem.othersys": 820558,
|
|
"mem.stack.inuse": 294912,
|
|
"mem.stack.mcache_inuse": 4800,
|
|
"mem.stack.mcache_sys": 16384,
|
|
"mem.stack.mspan_inuse": 14160,
|
|
"mem.stack.mspan_sys": 16384,
|
|
"mem.stack.sys": 294912,
|
|
"mem.sys": 3018752,
|
|
"mem.total": 667576
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
#### Configuring with [Telegraf](https://www.influxdata.com/time-series-platform/telegraf/)
|
|
|
|
Your program must import `_ "github.com/tevjef/go-runtime-metrics/expvar` in order for an InfluxDB formatted variable to be exported via `/debug/vars`.
|
|
|
|
1. [Install Telegraf](https://github.com/influxdata/telegraf#installation)
|
|
|
|
2. Make a config file utilizing the influxdb input plugin and an output plugin of your choice.
|
|
|
|
```toml
|
|
[[inputs.influxdb]]
|
|
urls = ["http://localhost:6060/debug/vars"]
|
|
|
|
[[outputs.influxdb]]
|
|
urls = ["http://localhost:8086"]
|
|
## The target database for metrics (telegraf will create it if not exists).
|
|
database = "stats" # required
|
|
|
|
## [[outputs.file]]
|
|
## files = ["stdout"]
|
|
## data_format = "json"
|
|
```
|
|
|
|
3. Start the Telegraf agent with `telegraf -config config.conf`
|
|
|
|
|
|
#### Benchmarks
|
|
|
|
Benchmark against standard library memstat expvar:
|
|
```
|
|
$ go test -bench=. -parallel 16 -cpu 1,2,4
|
|
|
|
BenchmarkMetrics 100000 12456 ns/op 4226 B/op 21 allocs/op
|
|
BenchmarkMetrics-2 20000 63597 ns/op 4264 B/op 21 allocs/op
|
|
BenchmarkMetrics-4 50000 28797 ns/op 4266 B/op 21 allocs/op
|
|
BenchmarkMemstat 20000 78009 ns/op 52264 B/op 12 allocs/op
|
|
BenchmarkMemstat-2 10000 155930 ns/op 52264 B/op 12 allocs/op
|
|
BenchmarkMemstat-4 10000 144849 ns/op 52266 B/op 12 allocs/op
|
|
|
|
```
|
|
|
|
|
|
```
|
|
System Info:
|
|
|
|
Processor Name: Intel Core i5
|
|
Processor Speed: 3.5 GHz
|
|
Number of Processors: 1
|
|
Total Number of Cores: 4
|
|
L2 Cache (per Core): 256 KB
|
|
L3 Cache: 6 MB
|
|
Memory: 32 GB
|
|
Bus Speed: 400 MHz
|
|
|
|
```
|