func addGCMericsToComponent(component newrelic_platform_go.IComponent, pollInterval int) { metrics := []*baseGoMetrica{ &baseGoMetrica{ name: "NumberOfGCCalls", units: "calls", dataSourceKey: "debug.GCStats.NumGC", }, &baseGoMetrica{ name: "PauseTotalTime", units: "nanoseconds", dataSourceKey: "debug.GCStats.PauseTotal", }, } ds := newGCMetricaDataSource(pollInterval) for _, m := range metrics { m.basePath = "Runtime/GC/" m.dataSource = ds component.AddMetrica(&gaugeMetrica{m}) } histogramMetrics := []*histogramMetrica{ &histogramMetrica{ statFunction: histogramMax, baseGoMetrica: &baseGoMetrica{name: "Max"}, }, &histogramMetrica{ statFunction: histogramMin, baseGoMetrica: &baseGoMetrica{name: "Min"}, }, &histogramMetrica{ statFunction: histogramMean, baseGoMetrica: &baseGoMetrica{name: "Mean"}, }, &histogramMetrica{ statFunction: histogramPercentile, percentileValue: 0.95, baseGoMetrica: &baseGoMetrica{name: "Percentile95"}, }, } for _, m := range histogramMetrics { m.baseGoMetrica.units = "nanoseconds" m.baseGoMetrica.dataSourceKey = "debug.GCStats.Pause" m.baseGoMetrica.basePath = "Runtime/GC/GCTime/" m.baseGoMetrica.dataSource = ds component.AddMetrica(m) } }
func addRuntimeMericsToComponent(component newrelic_platform_go.IComponent) { component.AddMetrica(&noGoroutinesMetrica{}) component.AddMetrica(&noCgoCallsMetrica{}) ds := newSystemMetricaDataSource() metrics := []*systemMetrica{ &systemMetrica{ sourceKey: "Threads", units: "Threads", newrelicName: "Runtime/System/Threads", }, &systemMetrica{ sourceKey: "FDSize", units: "fd", newrelicName: "Runtime/System/FDSize", }, // Peak virtual memory size &systemMetrica{ sourceKey: "VmPeak", units: "bytes", newrelicName: "Runtime/System/Memory/VmPeakSize", }, //Virtual memory size &systemMetrica{ sourceKey: "VmSize", units: "bytes", newrelicName: "Runtime/System/Memory/VmCurrent", }, //Peak resident set size &systemMetrica{ sourceKey: "VmHWM", units: "bytes", newrelicName: "Runtime/System/Memory/RssPeak", }, //Resident set size &systemMetrica{ sourceKey: "VmRSS", units: "bytes", newrelicName: "Runtime/System/Memory/RssCurrent", }, } for _, m := range metrics { m.dataSource = ds component.AddMetrica(m) } }
func addHTTPMericsToComponent(component newrelic_platform_go.IComponent, timer metrics.Timer) { rate1 := &timerRate1Metrica{ baseTimerMetrica: &baseTimerMetrica{ name: "http/throughput/1minute", units: "rps", dataSource: timer, }, } component.AddMetrica(rate1) rateMean := &timerRateMeanMetrica{ baseTimerMetrica: &baseTimerMetrica{ name: "http/throughput/rateMean", units: "rps", dataSource: timer, }, } component.AddMetrica(rateMean) responseTimeMean := &timerMeanMetrica{ baseTimerMetrica: &baseTimerMetrica{ name: "http/responseTime/mean", units: "ms", dataSource: timer, }, } component.AddMetrica(responseTimeMean) responseTimeMax := &timerMaxMetrica{ baseTimerMetrica: &baseTimerMetrica{ name: "http/responseTime/max", units: "ms", dataSource: timer, }, } component.AddMetrica(responseTimeMax) responseTimeMin := &timerMinMetrica{ baseTimerMetrica: &baseTimerMetrica{ name: "http/responseTime/min", units: "ms", dataSource: timer, }, } component.AddMetrica(responseTimeMin) responseTimePercentile75 := &timerPercentile75Metrica{ baseTimerMetrica: &baseTimerMetrica{ name: "http/responseTime/percentile75", units: "ms", dataSource: timer, }, } component.AddMetrica(responseTimePercentile75) responseTimePercentile90 := &timerPercentile90Metrica{ baseTimerMetrica: &baseTimerMetrica{ name: "http/responseTime/percentile90", units: "ms", dataSource: timer, }, } component.AddMetrica(responseTimePercentile90) responseTimePercentile95 := &timerPercentile95Metrica{ baseTimerMetrica: &baseTimerMetrica{ name: "http/responseTime/percentile95", units: "ms", dataSource: timer, }, } component.AddMetrica(responseTimePercentile95) }
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}) } }