/
system_metrics.go
33 lines (25 loc) · 1.17 KB
/
system_metrics.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package metrics
import (
"runtime"
"github.com/rcrowley/go-metrics"
)
const allocGauge = "runtime.mem.bytes_allocated_and_not_yet_freed"
const heapObjectsGauge = "runtime.mem.total_number_of_allocated_objects"
const totalPauseGauge = "runtime.mem.pause_total_ns"
const lastPauseGauge = "runtime.mem.last_pause"
func collectSystemMetrics() {
metrics.Register(allocGauge, baseGauge{value: func(memStats runtime.MemStats) int64 { return int64(memStats.Alloc) }})
metrics.Register(heapObjectsGauge, baseGauge{value: func(memStats runtime.MemStats) int64 { return int64(memStats.HeapObjects) }})
metrics.Register(totalPauseGauge, baseGauge{value: func(memStats runtime.MemStats) int64 { return int64(memStats.PauseTotalNs) }})
metrics.Register(lastPauseGauge, baseGauge{value: func(memStats runtime.MemStats) int64 { return int64(memStats.PauseNs[(memStats.NumGC+255)%256]) }})
}
type baseGauge struct {
value func(runtime.MemStats) int64
}
func (g baseGauge) Value() int64 {
var memStats runtime.MemStats
runtime.ReadMemStats(&memStats)
return g.value(memStats)
}
func (g baseGauge) Snapshot() metrics.Gauge { return metrics.GaugeSnapshot(g.Value()) }
func (baseGauge) Update(int64) {}