Collect CPU load averages in a separate metric

This commit is contained in:
Karan Goel
2020-11-03 10:34:21 -08:00
parent f42281ee26
commit 925ea7393c
6 changed files with 61 additions and 0 deletions

View File

@@ -25,6 +25,9 @@ Below metrics are collected from `cpu` component:
* `cpu_runnable_task_count`: The average number of runnable tasks in the run-queue during the last minute. Collected from [`/proc/loadavg`][/proc doc].
* `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`...).
* `cpu_load_1m`: CPU load average over the last 1 minute. Collected from [`/proc/loadavg`][/proc doc].
* `cpu_load_5m`: CPU load average over the last 5 minutes. Collected from [`/proc/loadavg`][/proc doc].
* `cpu_load_15m`: CPU load average over the last 15 minutes. Collected from [`/proc/loadavg`][/proc doc].
[/proc doc]: http://man7.org/linux/man-pages/man5/proc.5.html

View File

@@ -38,6 +38,9 @@ const clockTick float64 = 100.0
type cpuCollector struct {
mRunnableTaskCount *metrics.Float64Metric
mUsageTime *metrics.Float64Metric
mCpuLoad1m *metrics.Float64Metric
mCpuLoad5m *metrics.Float64Metric
mCpuLoad15m *metrics.Float64Metric
config *ssmtypes.CPUStatsConfig
@@ -71,6 +74,39 @@ func NewCPUCollectorOrDie(cpuConfig *ssmtypes.CPUStatsConfig) *cpuCollector {
glog.Fatalf("Error initializing metric for %q: %v", metrics.CPUUsageTimeID, err)
}
cc.mCpuLoad1m, err = metrics.NewFloat64Metric(
metrics.CPULoad1m,
cpuConfig.MetricsConfigs[string(metrics.CPULoad1m)].DisplayName,
"CPU average load (1m)",
"1",
metrics.LastValue,
[]string{})
if err != nil {
glog.Fatalf("Error initializing metric for %q: %v", metrics.CPULoad1m, err)
}
cc.mCpuLoad5m, err = metrics.NewFloat64Metric(
metrics.CPULoad5m,
cpuConfig.MetricsConfigs[string(metrics.CPULoad5m)].DisplayName,
"CPU average load (5m)",
"1",
metrics.LastValue,
[]string{})
if err != nil {
glog.Fatalf("Error initializing metric for %q: %v", metrics.CPULoad5m, err)
}
cc.mCpuLoad15m, err = metrics.NewFloat64Metric(
metrics.CPULoad15m,
cpuConfig.MetricsConfigs[string(metrics.CPULoad15m)].DisplayName,
"CPU average load (15m)",
"1",
metrics.LastValue,
[]string{})
if err != nil {
glog.Fatalf("Error initializing metric for %q: %v", metrics.CPULoad15m, err)
}
cc.lastUsageTime = make(map[string]float64)
return &cc
@@ -88,6 +124,10 @@ func (cc *cpuCollector) recordLoad() {
}
cc.mRunnableTaskCount.Record(map[string]string{}, loadAvg.Load1)
cc.mCpuLoad1m.Record(map[string]string{}, loadAvg.Load1)
cc.mCpuLoad5m.Record(map[string]string{}, loadAvg.Load5)
cc.mCpuLoad15m.Record(map[string]string{}, loadAvg.Load15)
}
func (cc *cpuCollector) recordUsage() {