add node_cpu_info metric
Contains information gathered from /proc/cpuinfo Signed-off-by: Paul Gier <pgier@redhat.com>
This commit is contained in:
parent
27b8c93a5a
commit
4d72cb8059
6 changed files with 276 additions and 0 deletions
|
|
@ -23,16 +23,22 @@ import (
|
|||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/prometheus/common/log"
|
||||
"github.com/prometheus/procfs"
|
||||
kingpin "gopkg.in/alecthomas/kingpin.v2"
|
||||
)
|
||||
|
||||
type cpuCollector struct {
|
||||
fs procfs.FS
|
||||
cpu *prometheus.Desc
|
||||
cpuInfo *prometheus.Desc
|
||||
cpuGuest *prometheus.Desc
|
||||
cpuCoreThrottle *prometheus.Desc
|
||||
cpuPackageThrottle *prometheus.Desc
|
||||
}
|
||||
|
||||
var (
|
||||
enableCPUInfo = kingpin.Flag("collector.cpu.info", "Enables metric cpu_info").Bool()
|
||||
)
|
||||
|
||||
func init() {
|
||||
registerCollector("cpu", defaultEnabled, NewCPUCollector)
|
||||
}
|
||||
|
|
@ -46,6 +52,11 @@ func NewCPUCollector() (Collector, error) {
|
|||
return &cpuCollector{
|
||||
fs: fs,
|
||||
cpu: nodeCPUSecondsDesc,
|
||||
cpuInfo: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(namespace, cpuCollectorSubsystem, "info"),
|
||||
"CPU information from /proc/cpuinfo.",
|
||||
[]string{"package", "core", "cpu", "vendor", "family", "model", "microcode", "cachesize"}, nil,
|
||||
),
|
||||
cpuGuest: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(namespace, cpuCollectorSubsystem, "guest_seconds_total"),
|
||||
"Seconds the cpus spent in guests (VMs) for each mode.",
|
||||
|
|
@ -66,6 +77,11 @@ func NewCPUCollector() (Collector, error) {
|
|||
|
||||
// Update implements Collector and exposes cpu related metrics from /proc/stat and /sys/.../cpu/.
|
||||
func (c *cpuCollector) Update(ch chan<- prometheus.Metric) error {
|
||||
if *enableCPUInfo {
|
||||
if err := c.updateInfo(ch); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if err := c.updateStat(ch); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -75,6 +91,28 @@ func (c *cpuCollector) Update(ch chan<- prometheus.Metric) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// updateInfo reads /proc/cpuinfo
|
||||
func (c *cpuCollector) updateInfo(ch chan<- prometheus.Metric) error {
|
||||
info, err := c.fs.CPUInfo()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, cpu := range info {
|
||||
ch <- prometheus.MustNewConstMetric(c.cpuInfo,
|
||||
prometheus.GaugeValue,
|
||||
1,
|
||||
cpu.PhysicalID,
|
||||
cpu.CoreID,
|
||||
fmt.Sprintf("%d", cpu.Processor),
|
||||
cpu.VendorID,
|
||||
cpu.CPUFamily,
|
||||
cpu.Model,
|
||||
cpu.Microcode,
|
||||
cpu.CacheSize)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// updateThermalThrottle reads /sys/devices/system/cpu/cpu* and expose thermal throttle statistics.
|
||||
func (c *cpuCollector) updateThermalThrottle(ch chan<- prometheus.Metric) error {
|
||||
cpus, err := filepath.Glob(sysFilePath("devices/system/cpu/cpu[0-9]*"))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue