Skip to content

Commit 35bfe69

Browse files
authored
Merge pull request #484 from karan/trial-metric
Collect CPU load averages in a separate metric
2 parents f42281e + 925ea73 commit 35bfe69

File tree

6 files changed

+61
-0
lines changed

6 files changed

+61
-0
lines changed

config/system-stats-monitor.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,15 @@
66
},
77
"cpu/usage_time": {
88
"displayName": "cpu/usage_time"
9+
},
10+
"cpu/load_1m": {
11+
"displayName": "cpu/load_1m"
12+
},
13+
"cpu/load_5m": {
14+
"displayName": "cpu/load_5m"
15+
},
16+
"cpu/load_15m": {
17+
"displayName": "cpu/load_15m"
918
}
1019
}
1120
},

pkg/exporters/stackdriver/stackdriver_exporter.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ const exporterName = "stackdriver"
4949
var NPDMetricToSDMetric = map[metrics.MetricID]string{
5050
metrics.CPURunnableTaskCountID: "compute.googleapis.com/guest/cpu/runnable_task_count",
5151
metrics.CPUUsageTimeID: "compute.googleapis.com/guest/cpu/usage_time",
52+
metrics.CPULoad1m: "compute.googleapis.com/guest/cpu/load_1m",
53+
metrics.CPULoad5m: "compute.googleapis.com/guest/cpu/load_5m",
54+
metrics.CPULoad15m: "compute.googleapis.com/guest/cpu/load_15m",
5255
metrics.DiskAvgQueueLenID: "compute.googleapis.com/guest/disk/queue_length",
5356
metrics.DiskBytesUsedID: "compute.googleapis.com/guest/disk/bytes_used",
5457
metrics.DiskIOTimeID: "compute.googleapis.com/guest/disk/io_time",

pkg/systemstatsmonitor/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ Below metrics are collected from `cpu` component:
2525

2626
* `cpu_runnable_task_count`: The average number of runnable tasks in the run-queue during the last minute. Collected from [`/proc/loadavg`][/proc doc].
2727
* `cpu_usage_time`: CPU usage, in seconds. The [CPU state][/proc doc] for the corresponding usage is reported under the `state` metric label (e.g. `user`, `nice`, `system`...).
28+
* `cpu_load_1m`: CPU load average over the last 1 minute. Collected from [`/proc/loadavg`][/proc doc].
29+
* `cpu_load_5m`: CPU load average over the last 5 minutes. Collected from [`/proc/loadavg`][/proc doc].
30+
* `cpu_load_15m`: CPU load average over the last 15 minutes. Collected from [`/proc/loadavg`][/proc doc].
2831

2932
[/proc doc]: http://man7.org/linux/man-pages/man5/proc.5.html
3033

pkg/systemstatsmonitor/cpu_collector.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ const clockTick float64 = 100.0
3838
type cpuCollector struct {
3939
mRunnableTaskCount *metrics.Float64Metric
4040
mUsageTime *metrics.Float64Metric
41+
mCpuLoad1m *metrics.Float64Metric
42+
mCpuLoad5m *metrics.Float64Metric
43+
mCpuLoad15m *metrics.Float64Metric
4144

4245
config *ssmtypes.CPUStatsConfig
4346

@@ -71,6 +74,39 @@ func NewCPUCollectorOrDie(cpuConfig *ssmtypes.CPUStatsConfig) *cpuCollector {
7174
glog.Fatalf("Error initializing metric for %q: %v", metrics.CPUUsageTimeID, err)
7275
}
7376

77+
cc.mCpuLoad1m, err = metrics.NewFloat64Metric(
78+
metrics.CPULoad1m,
79+
cpuConfig.MetricsConfigs[string(metrics.CPULoad1m)].DisplayName,
80+
"CPU average load (1m)",
81+
"1",
82+
metrics.LastValue,
83+
[]string{})
84+
if err != nil {
85+
glog.Fatalf("Error initializing metric for %q: %v", metrics.CPULoad1m, err)
86+
}
87+
88+
cc.mCpuLoad5m, err = metrics.NewFloat64Metric(
89+
metrics.CPULoad5m,
90+
cpuConfig.MetricsConfigs[string(metrics.CPULoad5m)].DisplayName,
91+
"CPU average load (5m)",
92+
"1",
93+
metrics.LastValue,
94+
[]string{})
95+
if err != nil {
96+
glog.Fatalf("Error initializing metric for %q: %v", metrics.CPULoad5m, err)
97+
}
98+
99+
cc.mCpuLoad15m, err = metrics.NewFloat64Metric(
100+
metrics.CPULoad15m,
101+
cpuConfig.MetricsConfigs[string(metrics.CPULoad15m)].DisplayName,
102+
"CPU average load (15m)",
103+
"1",
104+
metrics.LastValue,
105+
[]string{})
106+
if err != nil {
107+
glog.Fatalf("Error initializing metric for %q: %v", metrics.CPULoad15m, err)
108+
}
109+
74110
cc.lastUsageTime = make(map[string]float64)
75111

76112
return &cc
@@ -88,6 +124,10 @@ func (cc *cpuCollector) recordLoad() {
88124
}
89125

90126
cc.mRunnableTaskCount.Record(map[string]string{}, loadAvg.Load1)
127+
128+
cc.mCpuLoad1m.Record(map[string]string{}, loadAvg.Load1)
129+
cc.mCpuLoad5m.Record(map[string]string{}, loadAvg.Load5)
130+
cc.mCpuLoad15m.Record(map[string]string{}, loadAvg.Load15)
91131
}
92132

93133
func (cc *cpuCollector) recordUsage() {

pkg/util/metrics/metric.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ import (
2222
const (
2323
CPURunnableTaskCountID MetricID = "cpu/runnable_task_count"
2424
CPUUsageTimeID MetricID = "cpu/usage_time"
25+
CPULoad1m MetricID = "cpu/load_1m"
26+
CPULoad5m MetricID = "cpu/load_5m"
27+
CPULoad15m MetricID = "cpu/load_15m"
2528
ProblemCounterID MetricID = "problem_counter"
2629
ProblemGaugeID MetricID = "problem_gauge"
2730
DiskIOTimeID MetricID = "disk/io_time"

test/e2e/metriconly/metrics_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ var _ = ginkgo.Describe("NPD should export Prometheus metrics.", func() {
7777

7878
assertMetricExist(gotMetrics, "cpu_runnable_task_count", map[string]string{}, true)
7979
assertMetricExist(gotMetrics, "cpu_usage_time", map[string]string{}, false)
80+
assertMetricExist(gotMetrics, "cpu_load_1m", map[string]string{}, false)
81+
assertMetricExist(gotMetrics, "cpu_load_5m", map[string]string{}, false)
82+
assertMetricExist(gotMetrics, "cpu_load_15m", map[string]string{}, false)
8083
assertMetricExist(gotMetrics, "disk_operation_count", map[string]string{}, false)
8184
assertMetricExist(gotMetrics, "disk_merged_operation_count", map[string]string{}, false)
8285
assertMetricExist(gotMetrics, "disk_operation_bytes_count", map[string]string{}, false)

0 commit comments

Comments
 (0)