111 lines
2.8 KiB
Go
111 lines
2.8 KiB
Go
|
package gorelic
|
||
|
|
||
|
import (
|
||
|
metrics "github.com/yvasiyarov/go-metrics"
|
||
|
"github.com/yvasiyarov/newrelic_platform_go"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
func newMemoryMetricaDataSource(pollInterval int) goMetricaDataSource {
|
||
|
r := metrics.NewRegistry()
|
||
|
|
||
|
metrics.RegisterRuntimeMemStats(r)
|
||
|
metrics.CaptureRuntimeMemStatsOnce(r)
|
||
|
go metrics.CaptureRuntimeMemStats(r, time.Duration(pollInterval)*time.Second)
|
||
|
return goMetricaDataSource{r}
|
||
|
}
|
||
|
|
||
|
func addMemoryMericsToComponent(component newrelic_platform_go.IComponent, pollInterval int) {
|
||
|
gaugeMetrics := []*baseGoMetrica{
|
||
|
//Memory in use metrics
|
||
|
&baseGoMetrica{
|
||
|
name: "InUse/Total",
|
||
|
units: "bytes",
|
||
|
dataSourceKey: "runtime.MemStats.Alloc",
|
||
|
},
|
||
|
&baseGoMetrica{
|
||
|
name: "InUse/Heap",
|
||
|
units: "bytes",
|
||
|
dataSourceKey: "runtime.MemStats.HeapAlloc",
|
||
|
},
|
||
|
&baseGoMetrica{
|
||
|
name: "InUse/Stack",
|
||
|
units: "bytes",
|
||
|
dataSourceKey: "runtime.MemStats.StackInuse",
|
||
|
},
|
||
|
&baseGoMetrica{
|
||
|
name: "InUse/MSpanInuse",
|
||
|
units: "bytes",
|
||
|
dataSourceKey: "runtime.MemStats.MSpanInuse",
|
||
|
},
|
||
|
&baseGoMetrica{
|
||
|
name: "InUse/MCacheInuse",
|
||
|
units: "bytes",
|
||
|
dataSourceKey: "runtime.MemStats.MCacheInuse",
|
||
|
},
|
||
|
}
|
||
|
ds := newMemoryMetricaDataSource(pollInterval)
|
||
|
for _, m := range gaugeMetrics {
|
||
|
m.basePath = "Runtime/Memory/"
|
||
|
m.dataSource = ds
|
||
|
component.AddMetrica(&gaugeMetrica{m})
|
||
|
}
|
||
|
|
||
|
gaugeIncMetrics := []*baseGoMetrica{
|
||
|
//NO operations graph
|
||
|
&baseGoMetrica{
|
||
|
name: "Operations/NoPointerLookups",
|
||
|
units: "lookups",
|
||
|
dataSourceKey: "runtime.MemStats.Lookups",
|
||
|
},
|
||
|
&baseGoMetrica{
|
||
|
name: "Operations/NoMallocs",
|
||
|
units: "mallocs",
|
||
|
dataSourceKey: "runtime.MemStats.Mallocs",
|
||
|
},
|
||
|
&baseGoMetrica{
|
||
|
name: "Operations/NoFrees",
|
||
|
units: "frees",
|
||
|
dataSourceKey: "runtime.MemStats.Frees",
|
||
|
},
|
||
|
|
||
|
// Sytem memory allocations
|
||
|
&baseGoMetrica{
|
||
|
name: "SysMem/Total",
|
||
|
units: "bytes",
|
||
|
dataSourceKey: "runtime.MemStats.Sys",
|
||
|
},
|
||
|
&baseGoMetrica{
|
||
|
name: "SysMem/Heap",
|
||
|
units: "bytes",
|
||
|
dataSourceKey: "runtime.MemStats.HeapSys",
|
||
|
},
|
||
|
&baseGoMetrica{
|
||
|
name: "SysMem/Stack",
|
||
|
units: "bytes",
|
||
|
dataSourceKey: "runtime.MemStats.StackSys",
|
||
|
},
|
||
|
&baseGoMetrica{
|
||
|
name: "SysMem/MSpan",
|
||
|
units: "bytes",
|
||
|
dataSourceKey: "runtime.MemStats.MSpanSys",
|
||
|
},
|
||
|
&baseGoMetrica{
|
||
|
name: "SysMem/MCache",
|
||
|
units: "bytes",
|
||
|
dataSourceKey: "runtime.MemStats.MCacheSys",
|
||
|
},
|
||
|
&baseGoMetrica{
|
||
|
name: "SysMem/BuckHash",
|
||
|
units: "bytes",
|
||
|
dataSourceKey: "runtime.MemStats.BuckHashSys",
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for _, m := range gaugeIncMetrics {
|
||
|
m.basePath = "Runtime/Memory/"
|
||
|
m.dataSource = ds
|
||
|
component.AddMetrica(&gaugeIncMetrica{baseGoMetrica: m})
|
||
|
}
|
||
|
}
|