Skip to content
This repository was archived by the owner on Nov 7, 2022. It is now read-only.

Commit eef0179

Browse files
rghetiasongy23
authored andcommitted
[WIP]fix aggregation type for per process stats and system stats. (#520)
* fix aggregation type for per process stats and system stats. Also recording delta for sum aggregation by preserving previous values. * revert system stats to sum but record difference. * save prev value first time as well. also change process cpu seconds to float64 * fix fmt.
1 parent c07166e commit eef0179

File tree

2 files changed

+40
-16
lines changed

2 files changed

+40
-16
lines changed

receiver/vmmetricsreceiver/vm_metrics_collector.go

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,12 @@ func NewVMMetricsCollector(si time.Duration, mountPoint, processMountPoint, pref
9393
func (vmc *VMMetricsCollector) StartCollection() {
9494
go func() {
9595
ticker := time.NewTicker(vmc.scrapeInterval)
96+
var prevProcStat *procfs.ProcStat
97+
var prevStat *procfs.Stat
9698
for {
9799
select {
98100
case <-ticker.C:
99-
vmc.scrape()
101+
prevProcStat, prevStat = vmc.scrape(prevProcStat, prevStat)
100102
vmc.export()
101103

102104
case <-vmc.done:
@@ -111,7 +113,7 @@ func (vmc *VMMetricsCollector) StopCollection() {
111113
close(vmc.done)
112114
}
113115

114-
func (vmc *VMMetricsCollector) scrape() {
116+
func (vmc *VMMetricsCollector) scrape(prevProcStat *procfs.ProcStat, prevStat *procfs.Stat) (*procfs.ProcStat, *procfs.Stat) {
115117
ms := &runtime.MemStats{}
116118
runtime.ReadMemStats(ms)
117119
ctx := context.Background()
@@ -130,24 +132,46 @@ func (vmc *VMMetricsCollector) scrape() {
130132
proc, err = vmc.processFs.NewProc(pid)
131133
}
132134
if err == nil {
133-
if procStat, err := proc.NewStat(); err == nil {
134-
stats.Record(ctx, mCPUSeconds.M(int64(procStat.CPUTime())))
135+
procStat, err := proc.NewStat()
136+
if err == nil {
137+
if prevProcStat != nil {
138+
stats.Record(ctx, mCPUSeconds.M(procStat.CPUTime()-prevProcStat.CPUTime()))
139+
} else {
140+
stats.Record(ctx, mCPUSeconds.M(procStat.CPUTime()))
141+
}
135142
}
143+
prevProcStat = &procStat
136144
}
137145

138-
if stat, err := vmc.fs.NewStat(); err == nil {
146+
stat, err := vmc.fs.NewStat()
147+
if err == nil {
139148
cpuStat := stat.CPUTotal
140149
stats.Record(
141150
ctx,
142-
mProcessesCreated.M(int64(stat.ProcessCreated)),
143151
mProcessesRunning.M(int64(stat.ProcessesRunning)),
144-
mProcessesBlocked.M(int64(stat.ProcessesBlocked)),
145-
mUserCPUSeconds.M(cpuStat.User),
146-
mNiceCPUSeconds.M(cpuStat.Nice),
147-
mSystemCPUSeconds.M(cpuStat.System),
148-
mIdleCPUSeconds.M(cpuStat.Idle),
149-
mIowaitCPUSeconds.M(cpuStat.Iowait))
152+
mProcessesBlocked.M(int64(stat.ProcessesBlocked)))
153+
if prevStat != nil {
154+
stats.Record(
155+
ctx,
156+
mProcessesCreated.M(int64(stat.ProcessCreated-prevStat.ProcessCreated)),
157+
mUserCPUSeconds.M(cpuStat.User-prevStat.CPUTotal.User),
158+
mNiceCPUSeconds.M(cpuStat.Nice-prevStat.CPUTotal.Nice),
159+
mSystemCPUSeconds.M(cpuStat.System-prevStat.CPUTotal.System),
160+
mIdleCPUSeconds.M(cpuStat.Idle-prevStat.CPUTotal.Idle),
161+
mIowaitCPUSeconds.M(cpuStat.Iowait-prevStat.CPUTotal.Iowait))
162+
} else {
163+
stats.Record(
164+
ctx,
165+
mProcessesCreated.M(int64(stat.ProcessCreated)),
166+
mUserCPUSeconds.M(cpuStat.User),
167+
mNiceCPUSeconds.M(cpuStat.Nice),
168+
mSystemCPUSeconds.M(cpuStat.System),
169+
mIdleCPUSeconds.M(cpuStat.Idle),
170+
mIowaitCPUSeconds.M(cpuStat.Iowait))
171+
}
172+
prevStat = &stat
150173
}
174+
return prevProcStat, prevStat
151175
}
152176

153177
func (vmc *VMMetricsCollector) export() {

receiver/vmmetricsreceiver/vm_metrics_constants.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,12 @@ var viewSysMem = &view.View{
4949
TagKeys: nil,
5050
}
5151

52-
var mCPUSeconds = stats.Int64("process/cpu_seconds", "CPU seconds for this process", "1")
52+
var mCPUSeconds = stats.Float64("process/cpu_seconds", "CPU seconds for this process", "s")
5353
var viewCPUSeconds = &view.View{
5454
Name: mCPUSeconds.Name(),
5555
Description: mCPUSeconds.Description(),
5656
Measure: mCPUSeconds,
57-
Aggregation: view.LastValue(),
57+
Aggregation: view.Sum(),
5858
TagKeys: nil,
5959
}
6060

@@ -117,7 +117,7 @@ var viewProcessesRunning = &view.View{
117117
Name: mProcessesRunning.Name(),
118118
Description: mProcessesRunning.Description(),
119119
Measure: mProcessesRunning,
120-
Aggregation: view.Sum(),
120+
Aggregation: view.LastValue(),
121121
TagKeys: nil,
122122
}
123123

@@ -126,7 +126,7 @@ var viewProcessesBlocked = &view.View{
126126
Name: mProcessesBlocked.Name(),
127127
Description: mProcessesBlocked.Description(),
128128
Measure: mProcessesBlocked,
129-
Aggregation: view.Sum(),
129+
Aggregation: view.LastValue(),
130130
TagKeys: nil,
131131
}
132132

0 commit comments

Comments
 (0)