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: 2 months ago
JSON representation
Collect golang runtime metrics, pushing to InfluxDB or pulling with Telegraf
- Host: GitHub
- URL: https://github.com/tevjef/go-runtime-metrics
- Owner: tevjef
- License: mit
- Created: 2016-12-04T11:25:49.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2018-02-04T21:10:17.000Z (almost 7 years ago)
- Last Synced: 2024-08-02T07:11:17.767Z (5 months ago)
- Topics: expvars, golang, golang-library, influxdb, runtime-metrics, telegraf
- Language: Go
- Homepage:
- Size: 438 KB
- Stars: 284
- Watchers: 11
- Forks: 37
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-influxdb - go-runtime-metrics - Collect golang runtime Metrics, outputting to InfluxDB or through Telegraf (Collecting data into InfluxDB / Libraries)
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 UsageThis 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,4BenchmarkMetrics 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```