From 1c4f1a26953aac0bd89303574bac23d3c8dd363d Mon Sep 17 00:00:00 2001 From: Vishal Raj Date: Fri, 17 May 2024 14:38:04 +0100 Subject: [PATCH] Make metrics reusable by other remappers --- remappers/hostmetrics/cpu.go | 46 ++++++++++--------- remappers/hostmetrics/load.go | 10 ++-- remappers/hostmetrics/memory.go | 20 ++++---- remappers/hostmetrics/network.go | 6 ++- remappers/hostmetrics/process.go | 36 ++++++++------- remappers/hostmetrics/processes.go | 14 +++--- remappers/{hostmetrics => internal}/metric.go | 11 +++-- 7 files changed, 79 insertions(+), 64 deletions(-) rename remappers/{hostmetrics => internal}/metric.go (87%) diff --git a/remappers/hostmetrics/cpu.go b/remappers/hostmetrics/cpu.go index 310c58b..700e57f 100644 --- a/remappers/hostmetrics/cpu.go +++ b/remappers/hostmetrics/cpu.go @@ -22,6 +22,8 @@ import ( "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/pmetric" + + "github.com/elastic/opentelemetry-lib/remappers/internal" ) func remapCPUMetrics( @@ -86,56 +88,56 @@ func remapCPUMetrics( } // Add all metrics that are independent of cpu logical count. - addMetrics(out, dataset, emptyMutator, - metric{ + internal.AddMetrics(out, dataset, EmptyMutator, + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.cpu.total.pct", timestamp: timestamp, doubleValue: &totalPercent, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.cpu.idle.pct", timestamp: timestamp, doubleValue: &idlePercent, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.cpu.system.pct", timestamp: timestamp, doubleValue: &systemPercent, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.cpu.user.pct", timestamp: timestamp, doubleValue: &userPercent, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.cpu.steal.pct", timestamp: timestamp, doubleValue: &stealPercent, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.cpu.wait.pct", timestamp: timestamp, doubleValue: &iowaitPercent, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.cpu.nice.pct", timestamp: timestamp, doubleValue: &nicePercent, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.cpu.irq.pct", timestamp: timestamp, doubleValue: &irqPercent, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.cpu.softirq.pct", timestamp: timestamp, @@ -157,68 +159,68 @@ func remapCPUMetrics( irqNorm := irqPercent / float64(numCores) softirqNorm := softirqPercent / float64(numCores) - addMetrics(out, dataset, emptyMutator, - metric{ + AddMetrics(out, dataset, EmptyMutator, + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.cpu.cores", timestamp: timestamp, intValue: &numCores, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.load.cores", timestamp: timestamp, intValue: &numCores, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.cpu.total.norm.pct", timestamp: timestamp, doubleValue: &totalNorm, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.cpu.idle.norm.pct", timestamp: timestamp, doubleValue: &idleNorm, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.cpu.system.norm.pct", timestamp: timestamp, doubleValue: &systemNorm, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.cpu.user.norm.pct", timestamp: timestamp, doubleValue: &userNorm, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.cpu.steal.norm.pct", timestamp: timestamp, doubleValue: &stealNorm, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.cpu.wait.norm.pct", timestamp: timestamp, doubleValue: &iowaitNorm, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.cpu.nice.norm.pct", timestamp: timestamp, doubleValue: &niceNorm, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.cpu.irq.norm.pct", timestamp: timestamp, doubleValue: &irqNorm, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.cpu.softirq.norm.pct", timestamp: timestamp, diff --git a/remappers/hostmetrics/load.go b/remappers/hostmetrics/load.go index 0aa7a0e..9e2ed1a 100644 --- a/remappers/hostmetrics/load.go +++ b/remappers/hostmetrics/load.go @@ -20,6 +20,8 @@ package hostmetrics import ( "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/pmetric" + + "github.com/elastic/opentelemetry-lib/remappers/internal" ) // system.load.cores is calculated using the cpu remapper and if dataset @@ -56,20 +58,20 @@ func remapLoadMetrics( } } - addMetrics(out, dataset, emptyMutator, - metric{ + internal.AddMetrics(out, dataset, EmptyMutator, + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.load.1", timestamp: timestamp, doubleValue: &l1, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.load.5", timestamp: timestamp, doubleValue: &l5, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.load.15", timestamp: timestamp, diff --git a/remappers/hostmetrics/memory.go b/remappers/hostmetrics/memory.go index 8a7122e..3a1d57a 100644 --- a/remappers/hostmetrics/memory.go +++ b/remappers/hostmetrics/memory.go @@ -20,6 +20,8 @@ package hostmetrics import ( "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/pmetric" + + "github.com/elastic/opentelemetry-lib/remappers/internal" ) func remapMemoryMetrics( @@ -95,50 +97,50 @@ func remapMemoryMetrics( usedBytes += total actualFree = total - actualUsedBytes - addMetrics(out, dataset, emptyMutator, - metric{ + internal.AddMetrics(out, dataset, EmptyMutator, + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.memory.total", timestamp: timestamp, intValue: &total, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.memory.free", timestamp: timestamp, intValue: &free, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.memory.cached", timestamp: timestamp, intValue: &cached, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.memory.used.bytes", timestamp: timestamp, intValue: &usedBytes, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.memory.actual.used.bytes", timestamp: timestamp, intValue: &actualUsedBytes, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.memory.actual.free", timestamp: timestamp, intValue: &actualFree, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.memory.used.pct", timestamp: timestamp, doubleValue: &usedPercent, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.memory.actual.used.pct", timestamp: timestamp, diff --git a/remappers/hostmetrics/network.go b/remappers/hostmetrics/network.go index dbc366f..4b39ad6 100644 --- a/remappers/hostmetrics/network.go +++ b/remappers/hostmetrics/network.go @@ -22,6 +22,8 @@ import ( "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/pmetric" + + "github.com/elastic/opentelemetry-lib/remappers/internal" ) func remapNetworkMetrics( @@ -78,11 +80,11 @@ func addDeviceMetric( return } - addMetrics(out, dataset, + internal.AddMetrics(out, dataset, func(dp pmetric.NumberDataPoint) { dp.Attributes().PutStr("system.network.name", device) }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: fmt.Sprintf(metricNetworkES, direction), timestamp: timestamp, diff --git a/remappers/hostmetrics/process.go b/remappers/hostmetrics/process.go index eb94447..96c08d7 100644 --- a/remappers/hostmetrics/process.go +++ b/remappers/hostmetrics/process.go @@ -20,6 +20,8 @@ package hostmetrics import ( "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/pmetric" + + "github.com/elastic/opentelemetry-lib/remappers/internal" ) func remapProcessMetrics( @@ -154,99 +156,99 @@ func remapProcessMetrics( processRuntime = timestamp.AsTime().UnixMilli() - startTime cpuPct = cpuTimeValue / float64(processRuntime) - addMetrics(out, dataset, addProcessResources(resource), - metric{ + internal.AddMetrics(out, dataset, addProcessResources(resource), + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "process.cpu.start_time", timestamp: timestamp, intValue: &startTime, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.process.num_threads", timestamp: timestamp, intValue: &threads, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.process.memory.rss.pct", timestamp: timestamp, doubleValue: &memUtilPct, }, // The process rss bytes have been found to be equal to the memory usage reported by OTEL - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.process.memory.rss.bytes", timestamp: timestamp, intValue: &memUsage, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.process.memory.size", timestamp: timestamp, intValue: &memVirtual, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.process.fd.open", timestamp: timestamp, intValue: &fdOpen, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "process.memory.pct", timestamp: timestamp, doubleValue: &memUtilPct, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.process.cpu.total.value", timestamp: timestamp, doubleValue: &cpuTimeValue, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.process.cpu.system.ticks", timestamp: timestamp, doubleValue: &systemCpuTime, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.process.cpu.user.ticks", timestamp: timestamp, doubleValue: &userCpuTime, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.process.cpu.total.ticks", timestamp: timestamp, doubleValue: &cpuTimeValue, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.process.io.read_bytes", timestamp: timestamp, intValue: &ioReadBytes, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.process.io.write_bytes", timestamp: timestamp, intValue: &ioWriteBytes, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.process.io.read_ops", timestamp: timestamp, intValue: &ioReadOperations, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.process.io.write_ops", timestamp: timestamp, intValue: &ioWriteOperations, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeGauge, name: "system.process.cpu.total.pct", timestamp: timestamp, diff --git a/remappers/hostmetrics/processes.go b/remappers/hostmetrics/processes.go index da991ce..d7a92ea 100644 --- a/remappers/hostmetrics/processes.go +++ b/remappers/hostmetrics/processes.go @@ -20,6 +20,8 @@ package hostmetrics import ( "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/pmetric" + + "github.com/elastic/opentelemetry-lib/remappers/internal" ) func remapProcessesMetrics( @@ -61,32 +63,32 @@ func remapProcessesMetrics( } - addMetrics(out, dataset, emptyMutator, - metric{ + internal.AddMetrics(out, dataset, EmptyMutator, + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.process.summary.idle", timestamp: timestamp, intValue: &idleProcesses, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.process.summary.sleeping", timestamp: timestamp, intValue: &sleepingProcesses, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.process.summary.stopped", timestamp: timestamp, intValue: &stoppedProcesses, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.process.summary.zombie", timestamp: timestamp, intValue: &zombieProcesses, }, - metric{ + internal.Metric{ dataType: pmetric.MetricTypeSum, name: "system.process.summary.total", timestamp: timestamp, diff --git a/remappers/hostmetrics/metric.go b/remappers/internal/metric.go similarity index 87% rename from remappers/hostmetrics/metric.go rename to remappers/internal/metric.go index a1b3632..cb7d598 100644 --- a/remappers/hostmetrics/metric.go +++ b/remappers/internal/metric.go @@ -23,9 +23,11 @@ import ( "go.opentelemetry.io/collector/pdata/pmetric" ) -var emptyMutator = func(pmetric.NumberDataPoint) {} +// EmptyMutator is a no-op mutator. +var EmptyMutator = func(pmetric.NumberDataPoint) {} -type metric struct { +// Metric is a simplified representation of a remapped OTel metric. +type Metric struct { intValue *int64 doubleValue *float64 name string @@ -34,11 +36,12 @@ type metric struct { dataType pmetric.MetricType } -func addMetrics( +// AddMetrics adds a list of remapped OTel metric to the give MetricSlice. +func AddMetrics( ms pmetric.MetricSlice, dataset string, mutator func(dp pmetric.NumberDataPoint), - metrics ...metric, + metrics ...Metric, ) { ms.EnsureCapacity(ms.Len() + len(metrics))