func addRuntimeMetrics(p *newrelic.Plugin) { p.AddMetric(newrelic.NewMetric("Runtime/Events/Goroutines", "goroutines", func() (float64, error) { return float64(runtime.NumGoroutine()), nil })) var lastNumCgoCall int64 p.AddMetric(newrelic.NewMetric("Runtime/Events/CGO Calls", "calls", func() (float64, error) { currentNumCgoCall := runtime.NumCgoCall() result := float64(currentNumCgoCall - lastNumCgoCall) lastNumCgoCall = currentNumCgoCall return result, nil })) threads := metrics.NewGauge() fdsize := metrics.NewGauge() vmpeak := metrics.NewGauge() vmsize := metrics.NewGauge() rsspeak := metrics.NewGauge() rsssize := metrics.NewGauge() pr := &procReader{ sampleRate: time.Second * 5, procMap: make(map[string]string), threads: threads, fdsize: fdsize, vmpeak: vmpeak, vmsize: vmsize, rsspeak: rsspeak, rsssize: rsssize, } pr.Run() nrmetrics.AddGaugeMetric(p, threads, nrmetrics.MetricConfig{Name: "Runtime/Threads", Unit: "threads", Count: true}) nrmetrics.AddGaugeMetric(p, fdsize, nrmetrics.MetricConfig{Name: "Runtime/FD Size", Unit: "file descriptor slots", Count: true}) nrmetrics.AddGaugeMetric(p, vmpeak, nrmetrics.MetricConfig{Name: "Runtime/Peak Virt Mem", Unit: "bytes", Count: true}) nrmetrics.AddGaugeMetric(p, vmsize, nrmetrics.MetricConfig{Name: "Runtime/Virt Mem", Unit: "bytes", Count: true}) nrmetrics.AddGaugeMetric(p, rsspeak, nrmetrics.MetricConfig{Name: "Runtime/RSS Peak", Unit: "bytes", Count: true}) nrmetrics.AddGaugeMetric(p, rsssize, nrmetrics.MetricConfig{Name: "Runtime/RSS Size", Unit: "bytes", Count: true}) }
func addMemoryMetrics(p *newrelic.Plugin) { allocInUse := metrics.NewGauge() allocTotal := metrics.NewGauge() sys := metrics.NewGauge() pointerLookups := metrics.NewMeter() mallocs := metrics.NewMeter() frees := metrics.NewMeter() allocHeap := metrics.NewGauge() heapSys := metrics.NewGauge() heapIdle := metrics.NewGauge() heapInUse := metrics.NewGauge() heapReleased := metrics.NewGauge() heapObjects := metrics.NewGauge() stackInUse := metrics.NewGauge() stackSys := metrics.NewGauge() mspanInUse := metrics.NewGauge() mspanSys := metrics.NewGauge() mcacheInUse := metrics.NewGauge() mcacheSys := metrics.NewGauge() buckHashSys := metrics.NewGauge() gcSys := metrics.NewGauge() otherSys := metrics.NewGauge() mr := &memReader{ sampleRate: time.Minute, allocInUse: allocInUse, allocTotal: allocTotal, pointerLookups: pointerLookups, mallocs: mallocs, frees: frees, allocHeap: allocHeap, heapSys: heapSys, heapIdle: heapIdle, heapInUse: heapInUse, heapReleased: heapReleased, heapObjects: heapObjects, stackInUse: stackInUse, stackSys: stackSys, mspanInUse: mspanInUse, mspanSys: mspanSys, mcacheInUse: mcacheInUse, mcacheSys: mcacheSys, buckHashSys: buckHashSys, gcSys: gcSys, otherSys: otherSys, } mr.Run() nrmetrics.AddGaugeMetric(p, allocTotal, nrmetrics.MetricConfig{Name: "Memory/Summary/Allocated Over Time", Unit: "bytes", Value: true}) nrmetrics.AddGaugeMetric(p, sys, nrmetrics.MetricConfig{Name: "Memory/Summary/System/Total", Unit: "bytes", Value: true}) nrmetrics.AddGaugeMetric(p, heapSys, nrmetrics.MetricConfig{Name: "Memory/System/Heap", Unit: "bytes", Value: true}) nrmetrics.AddGaugeMetric(p, stackSys, nrmetrics.MetricConfig{Name: "Memory/System/Stack", Unit: "bytes", Value: true}) nrmetrics.AddGaugeMetric(p, mspanSys, nrmetrics.MetricConfig{Name: "Memory/System/MSpan", Unit: "bytes", Value: true}) nrmetrics.AddGaugeMetric(p, mcacheSys, nrmetrics.MetricConfig{Name: "Memory/System/MCache", Unit: "bytes", Value: true}) nrmetrics.AddGaugeMetric(p, buckHashSys, nrmetrics.MetricConfig{Name: "Memory/System/BuckHash", Unit: "bytes", Value: true}) nrmetrics.AddGaugeMetric(p, gcSys, nrmetrics.MetricConfig{Name: "Memory/System/GC", Unit: "bytes", Value: true}) nrmetrics.AddGaugeMetric(p, otherSys, nrmetrics.MetricConfig{Name: "Memory/System/Other", Unit: "bytes", Value: true}) nrmetrics.AddGaugeMetric(p, allocInUse, nrmetrics.MetricConfig{Name: "Memory/Summary/In Use/Total", Unit: "bytes", Value: true}) nrmetrics.AddGaugeMetric(p, heapInUse, nrmetrics.MetricConfig{Name: "Memory/In Use/Heap", Unit: "bytes", Value: true}) nrmetrics.AddGaugeMetric(p, stackInUse, nrmetrics.MetricConfig{Name: "Memory/In Use/Stack", Unit: "bytes", Value: true}) nrmetrics.AddGaugeMetric(p, mspanInUse, nrmetrics.MetricConfig{Name: "Memory/In Use/MSpan", Unit: "bytes", Value: true}) nrmetrics.AddGaugeMetric(p, mcacheInUse, nrmetrics.MetricConfig{Name: "Memory/In Use/MCache", Unit: "bytes", Value: true}) nrmetrics.AddGaugeMetric(p, allocHeap, nrmetrics.MetricConfig{Name: "Memory/Heap/Allocated", Unit: "bytes", Value: true}) nrmetrics.AddGaugeMetric(p, heapIdle, nrmetrics.MetricConfig{Name: "Memory/Heap/Idle", Unit: "bytes", Value: true}) nrmetrics.AddGaugeMetric(p, heapInUse, nrmetrics.MetricConfig{Name: "Memory/Heap/In Use", Unit: "bytes", Value: true}) nrmetrics.AddGaugeMetric(p, heapReleased, nrmetrics.MetricConfig{Name: "Memory/Heap/Released", Unit: "bytes", Value: true}) nrmetrics.AddGaugeMetric(p, heapObjects, nrmetrics.MetricConfig{Name: "Memory/Events/Allocated Heap Objects", Unit: "objects", Value: true}) nrmetrics.AddMeterMetric(p, pointerLookups, nrmetrics.MetricConfig{ Name: "Memory/Events/Pointer Lookups", Unit: "lookups", Rate1: true, Rate5: true, Rate15: true, }) nrmetrics.AddMeterMetric(p, mallocs, nrmetrics.MetricConfig{ Name: "Memory/Events/Mallocs", Unit: "mallocs", Rate1: true, Rate5: true, Rate15: true, }) nrmetrics.AddMeterMetric(p, frees, nrmetrics.MetricConfig{ Name: "Memory/Events/Frees", Unit: "frees", Rate1: true, Rate5: true, Rate15: true, }) }