129 lines
2.4 KiB
Go
129 lines
2.4 KiB
Go
|
package prometheus
|
||
|
|
||
|
import (
|
||
|
"strconv"
|
||
|
|
||
|
"github.com/crosbymichael/cgroups"
|
||
|
metrics "github.com/docker/go-metrics"
|
||
|
"github.com/prometheus/client_golang/prometheus"
|
||
|
)
|
||
|
|
||
|
var cpuMetrics = []*metric{
|
||
|
{
|
||
|
name: "cpu_total",
|
||
|
help: "The total cpu time",
|
||
|
unit: metrics.Nanoseconds,
|
||
|
vt: prometheus.GaugeValue,
|
||
|
getValues: func(stats *cgroups.Stats) []value {
|
||
|
if stats.Cpu == nil {
|
||
|
return nil
|
||
|
}
|
||
|
return []value{
|
||
|
{
|
||
|
v: float64(stats.Cpu.Usage.Total),
|
||
|
},
|
||
|
}
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
name: "cpu_kernel",
|
||
|
help: "The total kernel cpu time",
|
||
|
unit: metrics.Nanoseconds,
|
||
|
vt: prometheus.GaugeValue,
|
||
|
getValues: func(stats *cgroups.Stats) []value {
|
||
|
if stats.Cpu == nil {
|
||
|
return nil
|
||
|
}
|
||
|
return []value{
|
||
|
{
|
||
|
v: float64(stats.Cpu.Usage.Kernel),
|
||
|
},
|
||
|
}
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
name: "cpu_user",
|
||
|
help: "The total user cpu time",
|
||
|
unit: metrics.Nanoseconds,
|
||
|
vt: prometheus.GaugeValue,
|
||
|
getValues: func(stats *cgroups.Stats) []value {
|
||
|
if stats.Cpu == nil {
|
||
|
return nil
|
||
|
}
|
||
|
return []value{
|
||
|
{
|
||
|
v: float64(stats.Cpu.Usage.User),
|
||
|
},
|
||
|
}
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
name: "per_cpu",
|
||
|
help: "The total cpu time per cpu",
|
||
|
unit: metrics.Nanoseconds,
|
||
|
vt: prometheus.GaugeValue,
|
||
|
labels: []string{"cpu"},
|
||
|
getValues: func(stats *cgroups.Stats) []value {
|
||
|
if stats.Cpu == nil {
|
||
|
return nil
|
||
|
}
|
||
|
var out []value
|
||
|
for i, v := range stats.Cpu.Usage.PerCpu {
|
||
|
out = append(out, value{
|
||
|
v: float64(v),
|
||
|
l: []string{strconv.Itoa(i)},
|
||
|
})
|
||
|
}
|
||
|
return out
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
name: "cpu_throttle_periods",
|
||
|
help: "The total cpu throttle periods",
|
||
|
unit: metrics.Total,
|
||
|
vt: prometheus.GaugeValue,
|
||
|
getValues: func(stats *cgroups.Stats) []value {
|
||
|
if stats.Cpu == nil {
|
||
|
return nil
|
||
|
}
|
||
|
return []value{
|
||
|
{
|
||
|
v: float64(stats.Cpu.Throttling.Periods),
|
||
|
},
|
||
|
}
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
name: "cpu_throttled_periods",
|
||
|
help: "The total cpu throttled periods",
|
||
|
unit: metrics.Total,
|
||
|
vt: prometheus.GaugeValue,
|
||
|
getValues: func(stats *cgroups.Stats) []value {
|
||
|
if stats.Cpu == nil {
|
||
|
return nil
|
||
|
}
|
||
|
return []value{
|
||
|
{
|
||
|
v: float64(stats.Cpu.Throttling.ThrottledPeriods),
|
||
|
},
|
||
|
}
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
name: "cpu_throttled_time",
|
||
|
help: "The total cpu throttled time",
|
||
|
unit: metrics.Nanoseconds,
|
||
|
vt: prometheus.GaugeValue,
|
||
|
getValues: func(stats *cgroups.Stats) []value {
|
||
|
if stats.Cpu == nil {
|
||
|
return nil
|
||
|
}
|
||
|
return []value{
|
||
|
{
|
||
|
v: float64(stats.Cpu.Throttling.ThrottledTime),
|
||
|
},
|
||
|
}
|
||
|
},
|
||
|
},
|
||
|
}
|