mirror of
https://github.com/prometheus-community/windows_exporter.git
synced 2026-02-28 15:46:36 +00:00
initial commit
This commit is contained in:
128
collectors/os.go
Normal file
128
collectors/os.go
Normal file
@@ -0,0 +1,128 @@
|
||||
// returns data points from Win32_OperatingSystem
|
||||
|
||||
package collectors
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/StackExchange/wmi"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
)
|
||||
|
||||
// A OSCollector is a Prometheus collector for WMI OperatingSystem metrics
|
||||
type OSCollector struct {
|
||||
FreePhysicalMemory *prometheus.Desc
|
||||
FreeSpaceInPagingFiles *prometheus.Desc
|
||||
FreeVirtualMemory *prometheus.Desc
|
||||
NumberOfProcesses *prometheus.Desc
|
||||
NumberOfUsers *prometheus.Desc
|
||||
}
|
||||
|
||||
// NewOSCollector ...
|
||||
func NewOSCollector() *OSCollector {
|
||||
|
||||
return &OSCollector{
|
||||
FreePhysicalMemory: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(wmiNamespace, "os", "free_physical_memory"),
|
||||
"Free physical memory.",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
|
||||
FreeSpaceInPagingFiles: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(wmiNamespace, "os", "free_space_in_paging_files"),
|
||||
"Free space in paging files.",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
|
||||
FreeVirtualMemory: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(wmiNamespace, "os", "free_virtual_memory"),
|
||||
"Free virtual memory.",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
|
||||
NumberOfProcesses: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(wmiNamespace, "os", "number_of_processes"),
|
||||
"No. of processes running on the system.",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
|
||||
NumberOfUsers: prometheus.NewDesc(
|
||||
prometheus.BuildFQName(wmiNamespace, "os", "number_of_users"),
|
||||
"No. of users logged in.",
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
// Collect sends the metric values for each metric
|
||||
// to the provided prometheus Metric channel.
|
||||
func (c *OSCollector) Collect(ch chan<- prometheus.Metric) {
|
||||
if desc, err := c.collect(ch); err != nil {
|
||||
log.Println("[ERROR] failed collecting process metrics:", desc, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// Describe sends the descriptors of each metric over to the provided channel.
|
||||
// The corresponding metric values are sent separately.
|
||||
func (c *OSCollector) Describe(ch chan<- *prometheus.Desc) {
|
||||
|
||||
ch <- c.FreePhysicalMemory
|
||||
ch <- c.FreeSpaceInPagingFiles
|
||||
ch <- c.FreeVirtualMemory
|
||||
ch <- c.NumberOfProcesses
|
||||
ch <- c.NumberOfUsers
|
||||
}
|
||||
|
||||
type Win32_OperatingSystem struct {
|
||||
FreePhysicalMemory uint64
|
||||
FreeSpaceInPagingFiles uint64
|
||||
FreeVirtualMemory uint64
|
||||
NumberOfProcesses uint32
|
||||
NumberOfUsers uint32
|
||||
}
|
||||
|
||||
func (c *OSCollector) collect(ch chan<- prometheus.Metric) (*prometheus.Desc, error) {
|
||||
var dst []Win32_OperatingSystem
|
||||
q := wmi.CreateQuery(&dst, "")
|
||||
if err := wmi.Query(q, &dst); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.FreePhysicalMemory,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].FreePhysicalMemory),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.FreeSpaceInPagingFiles,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].FreeSpaceInPagingFiles),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.FreeVirtualMemory,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].FreeVirtualMemory),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NumberOfProcesses,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].NumberOfProcesses),
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.NumberOfUsers,
|
||||
prometheus.GaugeValue,
|
||||
float64(dst[0].NumberOfUsers),
|
||||
)
|
||||
|
||||
return nil, nil
|
||||
}
|
||||
5
collectors/wmi.go
Normal file
5
collectors/wmi.go
Normal file
@@ -0,0 +1,5 @@
|
||||
package collectors
|
||||
|
||||
const (
|
||||
wmiNamespace = "wmi"
|
||||
)
|
||||
Reference in New Issue
Block a user