Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/tevjef/go-runtime-metrics

Collect golang runtime metrics, pushing to InfluxDB or pulling with Telegraf
https://github.com/tevjef/go-runtime-metrics

expvars golang golang-library influxdb runtime-metrics telegraf

Last synced: 3 months ago
JSON representation

Collect golang runtime metrics, pushing to InfluxDB or pulling with Telegraf

Lists

README

        

# 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/):

![](/grafana.png)

[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

```