mirror of
https://github.com/prometheus-community/windows_exporter.git
synced 2026-02-10 23:16:36 +00:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b9b8cfd1ca | ||
|
|
6b98771187 | ||
|
|
a52df7696a |
@@ -16,10 +16,12 @@ dns | [Win32_PerfRawData_DNS_DNS](https://technet.microsoft.com/en-us/library/cc
|
|||||||
iis | [Win32_PerfRawData_W3SVC_WebService](https://msdn.microsoft.com/en-us/library/aa394345) IIS metrics |
|
iis | [Win32_PerfRawData_W3SVC_WebService](https://msdn.microsoft.com/en-us/library/aa394345) IIS metrics |
|
||||||
logical_disk | [Win32_PerfRawData_PerfDisk_LogicalDisk](https://msdn.microsoft.com/en-us/windows/hardware/aa394307(v=vs.71)) metrics (disk I/O) | ✓
|
logical_disk | [Win32_PerfRawData_PerfDisk_LogicalDisk](https://msdn.microsoft.com/en-us/windows/hardware/aa394307(v=vs.71)) metrics (disk I/O) | ✓
|
||||||
net | [Win32_PerfRawData_Tcpip_NetworkInterface](https://technet.microsoft.com/en-us/security/aa394340(v=vs.80)) metrics (network interface I/O) | ✓
|
net | [Win32_PerfRawData_Tcpip_NetworkInterface](https://technet.microsoft.com/en-us/security/aa394340(v=vs.80)) metrics (network interface I/O) | ✓
|
||||||
|
msmq | [Win32_PerfRawData_MSMQ_MSMQQueue](http://wutils.com/wmi/root/cimv2/win32_perfrawdata_msmq_msmqqueue/) metrics (MSMQ/journal count) |
|
||||||
os | [Win32_OperatingSystem](https://msdn.microsoft.com/en-us/library/aa394239) metrics (memory, processes, users) | ✓
|
os | [Win32_OperatingSystem](https://msdn.microsoft.com/en-us/library/aa394239) metrics (memory, processes, users) | ✓
|
||||||
process | [Win32_PerfRawData_PerfProc_Process](https://msdn.microsoft.com/en-us/library/aa394323(v=vs.85).aspx) metrics (per-process stats) |
|
process | [Win32_PerfRawData_PerfProc_Process](https://msdn.microsoft.com/en-us/library/aa394323(v=vs.85).aspx) metrics (per-process stats) |
|
||||||
service | [Win32_Service](https://msdn.microsoft.com/en-us/library/aa394418(v=vs.85).aspx) metrics (service states) | ✓
|
service | [Win32_Service](https://msdn.microsoft.com/en-us/library/aa394418(v=vs.85).aspx) metrics (service states) | ✓
|
||||||
system | Win32_PerfRawData_PerfOS_System metrics (system calls) | ✓
|
system | Win32_PerfRawData_PerfOS_System metrics (system calls) | ✓
|
||||||
|
tcp | [Win32_PerfRawData_Tcpip_TCPv4](https://msdn.microsoft.com/en-us/library/aa394341(v=vs.85).aspx) metrics (tcp connections) |
|
||||||
vmware | Performance counters installed by the Vmware Guest agent |
|
vmware | Performance counters installed by the Vmware Guest agent |
|
||||||
|
|
||||||
The HELP texts shows the WMI data source, please see MSDN documentation for details.
|
The HELP texts shows the WMI data source, please see MSDN documentation for details.
|
||||||
|
|||||||
132
collector/msmq.go
Normal file
132
collector/msmq.go
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
// returns data points from Win32_PerfRawData_MSMQ_MSMQQueue
|
||||||
|
// <add link to documentation here> - Win32_PerfRawData_MSMQ_MSMQQueue class
|
||||||
|
package collector
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"flag"
|
||||||
|
"bytes"
|
||||||
|
"strings"
|
||||||
|
"github.com/StackExchange/wmi"
|
||||||
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
Factories["msmq"] = NewMSMQCollector
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
msmqWhereClause = flag.String("collector.msmq.msmq-where", "", "WQL 'where' clause to use in WMI metrics query. Limits the response to the msmqs you specify and reduces the size of the response.")
|
||||||
|
)
|
||||||
|
|
||||||
|
// A Win32_PerfRawData_MSMQ_MSMQQueueCollector is a Prometheus collector for WMI Win32_PerfRawData_MSMQ_MSMQQueue metrics
|
||||||
|
type Win32_PerfRawData_MSMQ_MSMQQueueCollector struct {
|
||||||
|
BytesinJournalQueue *prometheus.Desc
|
||||||
|
BytesinQueue *prometheus.Desc
|
||||||
|
MessagesinJournalQueue *prometheus.Desc
|
||||||
|
MessagesinQueue *prometheus.Desc
|
||||||
|
|
||||||
|
queryWhereClause string
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewWin32_PerfRawData_MSMQ_MSMQQueueCollector ...
|
||||||
|
func NewMSMQCollector() (Collector, error) {
|
||||||
|
const subsystem = "msmq"
|
||||||
|
|
||||||
|
var wc bytes.Buffer
|
||||||
|
if *msmqWhereClause != "" {
|
||||||
|
wc.WriteString("WHERE ")
|
||||||
|
wc.WriteString(*msmqWhereClause)
|
||||||
|
log.Println("warning: No where-clause specified for msmq collector. This will generate a very large number of metrics!")
|
||||||
|
}
|
||||||
|
// else {
|
||||||
|
// log.Println("warning: No where-clause specified for msmq collector. This will generate a very large number of metrics!")
|
||||||
|
// }
|
||||||
|
return &Win32_PerfRawData_MSMQ_MSMQQueueCollector{
|
||||||
|
BytesinJournalQueue: prometheus.NewDesc(
|
||||||
|
prometheus.BuildFQName(Namespace, subsystem, "bytes_in_journal_queue"),
|
||||||
|
"Size of queue journal in bytes",
|
||||||
|
[]string{"name"},
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
BytesinQueue: prometheus.NewDesc(
|
||||||
|
prometheus.BuildFQName(Namespace, subsystem, "bytes_in_queue"),
|
||||||
|
"Size of queue in bytes",
|
||||||
|
[]string{"name"},
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
MessagesinJournalQueue: prometheus.NewDesc(
|
||||||
|
prometheus.BuildFQName(Namespace, subsystem, "messages_in_journal_queue"),
|
||||||
|
"Count messages in queue journal",
|
||||||
|
[]string{"name"},
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
MessagesinQueue: prometheus.NewDesc(
|
||||||
|
prometheus.BuildFQName(Namespace, subsystem, "messages_in_queue"),
|
||||||
|
"Count messages in queue",
|
||||||
|
[]string{"name"},
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
queryWhereClause: wc.String(),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Collect sends the metric values for each metric
|
||||||
|
// to the provided prometheus Metric channel.
|
||||||
|
func (c *Win32_PerfRawData_MSMQ_MSMQQueueCollector) Collect(ch chan<- prometheus.Metric) error {
|
||||||
|
if desc, err := c.collect(ch); err != nil {
|
||||||
|
log.Println("[ERROR] failed collecting msmq metrics:", desc, err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type Win32_PerfRawData_MSMQ_MSMQQueue struct {
|
||||||
|
Name string
|
||||||
|
|
||||||
|
BytesinJournalQueue uint64
|
||||||
|
BytesinQueue uint64
|
||||||
|
MessagesinJournalQueue uint64
|
||||||
|
MessagesinQueue uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Win32_PerfRawData_MSMQ_MSMQQueueCollector) collect(ch chan<- prometheus.Metric) (*prometheus.Desc, error) {
|
||||||
|
var dst []Win32_PerfRawData_MSMQ_MSMQQueue
|
||||||
|
q := wmi.CreateQuery(&dst, c.queryWhereClause)
|
||||||
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, msmq := range dst {
|
||||||
|
|
||||||
|
if msmq.Name == "Computer Queues" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
ch <- prometheus.MustNewConstMetric(
|
||||||
|
c.BytesinJournalQueue,
|
||||||
|
prometheus.GaugeValue,
|
||||||
|
float64(msmq.BytesinJournalQueue),
|
||||||
|
strings.ToLower(msmq.Name),
|
||||||
|
)
|
||||||
|
ch <- prometheus.MustNewConstMetric(
|
||||||
|
c.BytesinQueue,
|
||||||
|
prometheus.GaugeValue,
|
||||||
|
float64(msmq.BytesinQueue),
|
||||||
|
strings.ToLower(msmq.Name),
|
||||||
|
)
|
||||||
|
ch <- prometheus.MustNewConstMetric(
|
||||||
|
c.MessagesinJournalQueue,
|
||||||
|
prometheus.GaugeValue,
|
||||||
|
float64(msmq.MessagesinJournalQueue),
|
||||||
|
strings.ToLower(msmq.Name),
|
||||||
|
)
|
||||||
|
ch <- prometheus.MustNewConstMetric(
|
||||||
|
c.MessagesinQueue,
|
||||||
|
prometheus.GaugeValue,
|
||||||
|
float64(msmq.MessagesinQueue),
|
||||||
|
strings.ToLower(msmq.Name),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
@@ -39,6 +39,7 @@ type NetworkCollector struct {
|
|||||||
PacketsReceivedTotal *prometheus.Desc
|
PacketsReceivedTotal *prometheus.Desc
|
||||||
PacketsReceivedUnknown *prometheus.Desc
|
PacketsReceivedUnknown *prometheus.Desc
|
||||||
PacketsSentTotal *prometheus.Desc
|
PacketsSentTotal *prometheus.Desc
|
||||||
|
CurrentBandwidth *prometheus.Desc
|
||||||
|
|
||||||
nicWhitelistPattern *regexp.Regexp
|
nicWhitelistPattern *regexp.Regexp
|
||||||
nicBlacklistPattern *regexp.Regexp
|
nicBlacklistPattern *regexp.Regexp
|
||||||
@@ -115,6 +116,12 @@ func NewNetworkCollector() (Collector, error) {
|
|||||||
[]string{"nic"},
|
[]string{"nic"},
|
||||||
nil,
|
nil,
|
||||||
),
|
),
|
||||||
|
CurrentBandwidth: prometheus.NewDesc(
|
||||||
|
prometheus.BuildFQName(Namespace, subsystem, "current_bandwidth"),
|
||||||
|
"(Network.CurrentBandwidth)",
|
||||||
|
[]string{"nic"},
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
|
||||||
nicWhitelistPattern: regexp.MustCompile(fmt.Sprintf("^(?:%s)$", *nicWhitelist)),
|
nicWhitelistPattern: regexp.MustCompile(fmt.Sprintf("^(?:%s)$", *nicWhitelist)),
|
||||||
nicBlacklistPattern: regexp.MustCompile(fmt.Sprintf("^(?:%s)$", *nicBlacklist)),
|
nicBlacklistPattern: regexp.MustCompile(fmt.Sprintf("^(?:%s)$", *nicBlacklist)),
|
||||||
@@ -150,6 +157,7 @@ type Win32_PerfRawData_Tcpip_NetworkInterface struct {
|
|||||||
PacketsReceivedPerSec uint64
|
PacketsReceivedPerSec uint64
|
||||||
PacketsReceivedUnknown uint64
|
PacketsReceivedUnknown uint64
|
||||||
PacketsSentPerSec uint64
|
PacketsSentPerSec uint64
|
||||||
|
CurrentBandwidth uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *NetworkCollector) collect(ch chan<- prometheus.Metric) (*prometheus.Desc, error) {
|
func (c *NetworkCollector) collect(ch chan<- prometheus.Metric) (*prometheus.Desc, error) {
|
||||||
@@ -238,6 +246,12 @@ func (c *NetworkCollector) collect(ch chan<- prometheus.Metric) (*prometheus.Des
|
|||||||
float64(nic.PacketsSentPerSec),
|
float64(nic.PacketsSentPerSec),
|
||||||
name,
|
name,
|
||||||
)
|
)
|
||||||
|
ch <- prometheus.MustNewConstMetric(
|
||||||
|
c.CurrentBandwidth,
|
||||||
|
prometheus.CounterValue,
|
||||||
|
float64(nic.CurrentBandwidth),
|
||||||
|
name,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
|
|||||||
171
collector/tcp.go
Normal file
171
collector/tcp.go
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
// returns data points from Win32_PerfRawData_Tcpip_TCPv4
|
||||||
|
|
||||||
|
// https://msdn.microsoft.com/en-us/library/aa394341(v=vs.85).aspx (Win32_PerfRawData_Tcpip_TCPv4 class)
|
||||||
|
|
||||||
|
package collector
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/StackExchange/wmi"
|
||||||
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
Factories["tcp"] = NewTCPCollector
|
||||||
|
}
|
||||||
|
|
||||||
|
// A TCPCollector is a Prometheus collector for WMI Win32_PerfRawData_Tcpip_TCPv4 metrics
|
||||||
|
type TCPCollector struct {
|
||||||
|
ConnectionFailures *prometheus.Desc
|
||||||
|
ConnectionsActive *prometheus.Desc
|
||||||
|
ConnectionsEstablished *prometheus.Desc
|
||||||
|
ConnectionsPassive *prometheus.Desc
|
||||||
|
ConnectionsReset *prometheus.Desc
|
||||||
|
SegmentsTotal *prometheus.Desc
|
||||||
|
SegmentsReceivedTotal *prometheus.Desc
|
||||||
|
SegmentsRetransmittedTotal *prometheus.Desc
|
||||||
|
SegmentsSentTotal *prometheus.Desc
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewTCPCollector ...
|
||||||
|
func NewTCPCollector() (Collector, error) {
|
||||||
|
const subsystem = "tcp"
|
||||||
|
|
||||||
|
return &TCPCollector{
|
||||||
|
ConnectionFailures: prometheus.NewDesc(
|
||||||
|
prometheus.BuildFQName(Namespace, subsystem, "connection_failures"),
|
||||||
|
"(TCP.ConnectionFailures)",
|
||||||
|
nil,
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
ConnectionsActive: prometheus.NewDesc(
|
||||||
|
prometheus.BuildFQName(Namespace, subsystem, "connections_active"),
|
||||||
|
"(TCP.ConnectionsActive)",
|
||||||
|
nil,
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
ConnectionsEstablished: prometheus.NewDesc(
|
||||||
|
prometheus.BuildFQName(Namespace, subsystem, "connections_established"),
|
||||||
|
"(TCP.ConnectionsEstablished)",
|
||||||
|
nil,
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
ConnectionsPassive: prometheus.NewDesc(
|
||||||
|
prometheus.BuildFQName(Namespace, subsystem, "connections_passive"),
|
||||||
|
"(TCP.ConnectionsPassive)",
|
||||||
|
nil,
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
ConnectionsReset: prometheus.NewDesc(
|
||||||
|
prometheus.BuildFQName(Namespace, subsystem, "connections_reset"),
|
||||||
|
"(TCP.ConnectionsReset)",
|
||||||
|
nil,
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
SegmentsTotal: prometheus.NewDesc(
|
||||||
|
prometheus.BuildFQName(Namespace, subsystem, "segments_total"),
|
||||||
|
"(TCP.SegmentsTotal)",
|
||||||
|
nil,
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
SegmentsReceivedTotal: prometheus.NewDesc(
|
||||||
|
prometheus.BuildFQName(Namespace, subsystem, "segments_received_total"),
|
||||||
|
"(TCP.SegmentsReceivedTotal)",
|
||||||
|
nil,
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
SegmentsRetransmittedTotal: prometheus.NewDesc(
|
||||||
|
prometheus.BuildFQName(Namespace, subsystem, "segments_retransmitted_total"),
|
||||||
|
"(TCP.SegmentsRetransmittedTotal)",
|
||||||
|
nil,
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
SegmentsSentTotal: prometheus.NewDesc(
|
||||||
|
prometheus.BuildFQName(Namespace, subsystem, "segments_sent_total"),
|
||||||
|
"(TCP.SegmentsSentTotal)",
|
||||||
|
nil,
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Collect sends the metric values for each metric
|
||||||
|
// to the provided prometheus Metric channel.
|
||||||
|
func (c *TCPCollector) Collect(ch chan<- prometheus.Metric) error {
|
||||||
|
if desc, err := c.collect(ch); err != nil {
|
||||||
|
log.Println("[ERROR] failed collecting tcp metrics:", desc, err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type Win32_PerfRawData_Tcpip_TCPv4 struct {
|
||||||
|
ConnectionFailures uint64
|
||||||
|
ConnectionsActive uint64
|
||||||
|
ConnectionsEstablished uint64
|
||||||
|
ConnectionsPassive uint64
|
||||||
|
ConnectionsReset uint64
|
||||||
|
SegmentsPersec uint64
|
||||||
|
SegmentsReceivedPersec uint64
|
||||||
|
SegmentsRetransmittedPersec uint64
|
||||||
|
SegmentsSentPersec uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *TCPCollector) collect(ch chan<- prometheus.Metric) (*prometheus.Desc, error) {
|
||||||
|
var dst []Win32_PerfRawData_Tcpip_TCPv4
|
||||||
|
|
||||||
|
q := wmi.CreateQuery(&dst, "")
|
||||||
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Counters
|
||||||
|
ch <- prometheus.MustNewConstMetric(
|
||||||
|
c.ConnectionFailures,
|
||||||
|
prometheus.CounterValue,
|
||||||
|
float64(dst[0].ConnectionFailures),
|
||||||
|
)
|
||||||
|
ch <- prometheus.MustNewConstMetric(
|
||||||
|
c.ConnectionsActive,
|
||||||
|
prometheus.CounterValue,
|
||||||
|
float64(dst[0].ConnectionsActive),
|
||||||
|
)
|
||||||
|
ch <- prometheus.MustNewConstMetric(
|
||||||
|
c.ConnectionsEstablished,
|
||||||
|
prometheus.CounterValue,
|
||||||
|
float64(dst[0].ConnectionsEstablished),
|
||||||
|
)
|
||||||
|
ch <- prometheus.MustNewConstMetric(
|
||||||
|
c.ConnectionsPassive,
|
||||||
|
prometheus.CounterValue,
|
||||||
|
float64(dst[0].ConnectionsPassive),
|
||||||
|
)
|
||||||
|
ch <- prometheus.MustNewConstMetric(
|
||||||
|
c.ConnectionsReset,
|
||||||
|
prometheus.CounterValue,
|
||||||
|
float64(dst[0].ConnectionsReset),
|
||||||
|
)
|
||||||
|
ch <- prometheus.MustNewConstMetric(
|
||||||
|
c.SegmentsTotal,
|
||||||
|
prometheus.CounterValue,
|
||||||
|
float64(dst[0].SegmentsPersec),
|
||||||
|
)
|
||||||
|
ch <- prometheus.MustNewConstMetric(
|
||||||
|
c.SegmentsReceivedTotal,
|
||||||
|
prometheus.CounterValue,
|
||||||
|
float64(dst[0].SegmentsReceivedPersec),
|
||||||
|
)
|
||||||
|
ch <- prometheus.MustNewConstMetric(
|
||||||
|
c.SegmentsRetransmittedTotal,
|
||||||
|
prometheus.CounterValue,
|
||||||
|
float64(dst[0].SegmentsRetransmittedPersec),
|
||||||
|
)
|
||||||
|
ch <- prometheus.MustNewConstMetric(
|
||||||
|
c.SegmentsSentTotal,
|
||||||
|
prometheus.CounterValue,
|
||||||
|
float64(dst[0].SegmentsSentPersec),
|
||||||
|
)
|
||||||
|
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user