mirror of
https://github.com/prometheus-community/windows_exporter.git
synced 2026-03-06 10:36:36 +00:00
process: Use registry collector for V1 data (#1814)
Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de>
This commit is contained in:
@@ -1,40 +0,0 @@
|
||||
// Copyright 2024 The Prometheus Authors
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build windows
|
||||
|
||||
package smbclient
|
||||
|
||||
const (
|
||||
AvgDataQueueLength = "Avg. Data Queue Length"
|
||||
AvgReadQueueLength = "Avg. Read Queue Length"
|
||||
AvgSecPerRead = "Avg. sec/Read"
|
||||
AvgSecPerWrite = "Avg. sec/Write"
|
||||
AvgSecPerDataRequest = "Avg. sec/Data Request"
|
||||
AvgWriteQueueLength = "Avg. Write Queue Length"
|
||||
CreditStallsPerSec = "Credit Stalls/sec"
|
||||
CurrentDataQueueLength = "Current Data Queue Length"
|
||||
DataBytesPerSec = "Data Bytes/sec"
|
||||
DataRequestsPerSec = "Data Requests/sec"
|
||||
MetadataRequestsPerSec = "Metadata Requests/sec"
|
||||
ReadBytesTransmittedViaSMBDirectPerSec = "Read Bytes transmitted via SMB Direct/sec"
|
||||
ReadBytesPerSec = "Read Bytes/sec"
|
||||
ReadRequestsTransmittedViaSMBDirectPerSec = "Read Requests transmitted via SMB Direct/sec"
|
||||
ReadRequestsPerSec = "Read Requests/sec"
|
||||
TurboIOReadsPerSec = "Turbo I/O Reads/sec"
|
||||
TurboIOWritesPerSec = "Turbo I/O Writes/sec"
|
||||
WriteBytesTransmittedViaSMBDirectPerSec = "Write Bytes transmitted via SMB Direct/sec"
|
||||
WriteBytesPerSec = "Write Bytes/sec"
|
||||
WriteRequestsTransmittedViaSMBDirectPerSec = "Write Requests transmitted via SMB Direct/sec"
|
||||
WriteRequestsPerSec = "Write Requests/sec"
|
||||
)
|
||||
@@ -22,7 +22,7 @@ import (
|
||||
|
||||
"github.com/alecthomas/kingpin/v2"
|
||||
"github.com/prometheus-community/windows_exporter/internal/mi"
|
||||
"github.com/prometheus-community/windows_exporter/internal/perfdata"
|
||||
"github.com/prometheus-community/windows_exporter/internal/pdh"
|
||||
"github.com/prometheus-community/windows_exporter/internal/types"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
)
|
||||
@@ -39,7 +39,8 @@ var ConfigDefaults = Config{}
|
||||
type Collector struct {
|
||||
config Config
|
||||
|
||||
perfDataCollector *perfdata.Collector
|
||||
perfDataCollector *pdh.Collector
|
||||
perfDataObject []perfDataCounterValues
|
||||
|
||||
readBytesTotal *prometheus.Desc
|
||||
readBytesTransmittedViaSMBDirectTotal *prometheus.Desc
|
||||
@@ -92,29 +93,7 @@ func (c *Collector) Close() error {
|
||||
func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error {
|
||||
var err error
|
||||
|
||||
c.perfDataCollector, err = perfdata.NewCollector("SMB Client Shares", perfdata.InstancesAll, []string{
|
||||
AvgDataQueueLength,
|
||||
AvgReadQueueLength,
|
||||
AvgSecPerRead,
|
||||
AvgSecPerWrite,
|
||||
AvgSecPerDataRequest,
|
||||
AvgWriteQueueLength,
|
||||
CreditStallsPerSec,
|
||||
CurrentDataQueueLength,
|
||||
DataBytesPerSec,
|
||||
DataRequestsPerSec,
|
||||
MetadataRequestsPerSec,
|
||||
ReadBytesTransmittedViaSMBDirectPerSec,
|
||||
ReadBytesPerSec,
|
||||
ReadRequestsTransmittedViaSMBDirectPerSec,
|
||||
ReadRequestsPerSec,
|
||||
TurboIOReadsPerSec,
|
||||
TurboIOWritesPerSec,
|
||||
WriteBytesTransmittedViaSMBDirectPerSec,
|
||||
WriteBytesPerSec,
|
||||
WriteRequestsTransmittedViaSMBDirectPerSec,
|
||||
WriteRequestsPerSec,
|
||||
})
|
||||
c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues]("SMB Client Shares", pdh.InstancesAll)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create SMB Client Shares collector: %w", err)
|
||||
}
|
||||
@@ -219,13 +198,17 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error {
|
||||
|
||||
// Collect collects smb client metrics and sends them to prometheus.
|
||||
func (c *Collector) Collect(ch chan<- prometheus.Metric) error {
|
||||
perfData, err := c.perfDataCollector.Collect()
|
||||
err := c.perfDataCollector.Collect(&c.perfDataObject)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to collect SMB Client Shares metrics: %w", err)
|
||||
}
|
||||
|
||||
for name, data := range perfData {
|
||||
parsed := strings.FieldsFunc(name, func(r rune) bool { return r == '\\' })
|
||||
for _, data := range c.perfDataObject {
|
||||
parsed := strings.FieldsFunc(data.Name, func(r rune) bool { return r == '\\' })
|
||||
if len(parsed) != 2 {
|
||||
return fmt.Errorf("unexpected number of fields in SMB Client Shares instance name: %q", data.Name)
|
||||
}
|
||||
|
||||
serverValue := parsed[0]
|
||||
shareValue := parsed[1]
|
||||
|
||||
@@ -233,7 +216,7 @@ func (c *Collector) Collect(ch chan<- prometheus.Metric) error {
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.requestQueueSecsTotal,
|
||||
prometheus.CounterValue,
|
||||
data[AvgDataQueueLength].FirstValue*perfdata.TicksToSecondScaleFactor,
|
||||
data.AvgDataQueueLength*pdh.TicksToSecondScaleFactor,
|
||||
serverValue, shareValue,
|
||||
)
|
||||
|
||||
@@ -241,28 +224,28 @@ func (c *Collector) Collect(ch chan<- prometheus.Metric) error {
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.readRequestQueueSecsTotal,
|
||||
prometheus.CounterValue,
|
||||
data[AvgReadQueueLength].FirstValue*perfdata.TicksToSecondScaleFactor,
|
||||
data.AvgReadQueueLength*pdh.TicksToSecondScaleFactor,
|
||||
serverValue, shareValue,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.readSecsTotal,
|
||||
prometheus.CounterValue,
|
||||
data[AvgSecPerRead].FirstValue*perfdata.TicksToSecondScaleFactor,
|
||||
data.AvgSecPerRead*pdh.TicksToSecondScaleFactor,
|
||||
serverValue, shareValue,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.writeSecsTotal,
|
||||
prometheus.CounterValue,
|
||||
data[AvgSecPerWrite].FirstValue*perfdata.TicksToSecondScaleFactor,
|
||||
data.AvgSecPerWrite*pdh.TicksToSecondScaleFactor,
|
||||
serverValue, shareValue,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.requestSecs,
|
||||
prometheus.CounterValue,
|
||||
data[AvgSecPerDataRequest].FirstValue*perfdata.TicksToSecondScaleFactor,
|
||||
data.AvgSecPerDataRequest*pdh.TicksToSecondScaleFactor,
|
||||
serverValue, shareValue,
|
||||
)
|
||||
|
||||
@@ -270,112 +253,112 @@ func (c *Collector) Collect(ch chan<- prometheus.Metric) error {
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.writeRequestQueueSecsTotal,
|
||||
prometheus.CounterValue,
|
||||
data[AvgWriteQueueLength].FirstValue*perfdata.TicksToSecondScaleFactor,
|
||||
data.AvgWriteQueueLength*pdh.TicksToSecondScaleFactor,
|
||||
serverValue, shareValue,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.creditStallsTotal,
|
||||
prometheus.CounterValue,
|
||||
data[CreditStallsPerSec].FirstValue,
|
||||
data.CreditStallsPerSec,
|
||||
serverValue, shareValue,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.currentDataQueued,
|
||||
prometheus.GaugeValue,
|
||||
data[CurrentDataQueueLength].FirstValue,
|
||||
data.CurrentDataQueueLength,
|
||||
serverValue, shareValue,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.dataBytesTotal,
|
||||
prometheus.CounterValue,
|
||||
data[DataBytesPerSec].FirstValue,
|
||||
data.DataBytesPerSec,
|
||||
serverValue, shareValue,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.dataRequestsTotal,
|
||||
prometheus.CounterValue,
|
||||
data[DataRequestsPerSec].FirstValue,
|
||||
data.DataRequestsPerSec,
|
||||
serverValue, shareValue,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.metadataRequestsTotal,
|
||||
prometheus.CounterValue,
|
||||
data[MetadataRequestsPerSec].FirstValue,
|
||||
data.MetadataRequestsPerSec,
|
||||
serverValue, shareValue,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.readBytesTransmittedViaSMBDirectTotal,
|
||||
prometheus.CounterValue,
|
||||
data[ReadBytesTransmittedViaSMBDirectPerSec].FirstValue,
|
||||
data.ReadBytesTransmittedViaSMBDirectPerSec,
|
||||
serverValue, shareValue,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.readBytesTotal,
|
||||
prometheus.CounterValue,
|
||||
data[ReadBytesPerSec].FirstValue,
|
||||
data.ReadBytesPerSec,
|
||||
serverValue, shareValue,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.readRequestsTransmittedViaSMBDirectTotal,
|
||||
prometheus.CounterValue,
|
||||
data[ReadRequestsTransmittedViaSMBDirectPerSec].FirstValue,
|
||||
data.ReadRequestsTransmittedViaSMBDirectPerSec,
|
||||
serverValue, shareValue,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.readsTotal,
|
||||
prometheus.CounterValue,
|
||||
data[ReadRequestsPerSec].FirstValue,
|
||||
data.ReadRequestsPerSec,
|
||||
serverValue, shareValue,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.turboIOReadsTotal,
|
||||
prometheus.CounterValue,
|
||||
data[TurboIOReadsPerSec].FirstValue,
|
||||
data.TurboIOReadsPerSec,
|
||||
serverValue, shareValue,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.TurboIOWritesTotal,
|
||||
prometheus.CounterValue,
|
||||
data[TurboIOWritesPerSec].FirstValue,
|
||||
data.TurboIOWritesPerSec,
|
||||
serverValue, shareValue,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.writeBytesTransmittedViaSMBDirectTotal,
|
||||
prometheus.CounterValue,
|
||||
data[WriteBytesTransmittedViaSMBDirectPerSec].FirstValue,
|
||||
data.WriteBytesTransmittedViaSMBDirectPerSec,
|
||||
serverValue, shareValue,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.writeBytesTotal,
|
||||
prometheus.CounterValue,
|
||||
data[WriteBytesPerSec].FirstValue,
|
||||
data.WriteBytesPerSec,
|
||||
serverValue, shareValue,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.writeRequestsTransmittedViaSMBDirectTotal,
|
||||
prometheus.CounterValue,
|
||||
data[WriteRequestsTransmittedViaSMBDirectPerSec].FirstValue,
|
||||
data.WriteRequestsTransmittedViaSMBDirectPerSec,
|
||||
serverValue, shareValue,
|
||||
)
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.writesTotal,
|
||||
prometheus.CounterValue,
|
||||
data[WriteRequestsPerSec].FirstValue,
|
||||
data.WriteRequestsPerSec,
|
||||
serverValue, shareValue,
|
||||
)
|
||||
}
|
||||
|
||||
42
internal/collector/smbclient/types.go
Normal file
42
internal/collector/smbclient/types.go
Normal file
@@ -0,0 +1,42 @@
|
||||
// Copyright 2024 The Prometheus Authors
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build windows
|
||||
|
||||
package smbclient
|
||||
|
||||
type perfDataCounterValues struct {
|
||||
Name string
|
||||
|
||||
AvgDataQueueLength float64 `perfdata:"Avg. Data Queue Length"`
|
||||
AvgReadQueueLength float64 `perfdata:"Avg. Read Queue Length"`
|
||||
AvgSecPerRead float64 `perfdata:"Avg. sec/Read"`
|
||||
AvgSecPerWrite float64 `perfdata:"Avg. sec/Write"`
|
||||
AvgSecPerDataRequest float64 `perfdata:"Avg. sec/Data Request"`
|
||||
AvgWriteQueueLength float64 `perfdata:"Avg. Write Queue Length"`
|
||||
CreditStallsPerSec float64 `perfdata:"Credit Stalls/sec"`
|
||||
CurrentDataQueueLength float64 `perfdata:"Current Data Queue Length"`
|
||||
DataBytesPerSec float64 `perfdata:"Data Bytes/sec"`
|
||||
DataRequestsPerSec float64 `perfdata:"Data Requests/sec"`
|
||||
MetadataRequestsPerSec float64 `perfdata:"Metadata Requests/sec"`
|
||||
ReadBytesTransmittedViaSMBDirectPerSec float64 `perfdata:"Read Bytes transmitted via SMB Direct/sec"`
|
||||
ReadBytesPerSec float64 `perfdata:"Read Bytes/sec"`
|
||||
ReadRequestsTransmittedViaSMBDirectPerSec float64 `perfdata:"Read Requests transmitted via SMB Direct/sec"`
|
||||
ReadRequestsPerSec float64 `perfdata:"Read Requests/sec"`
|
||||
TurboIOReadsPerSec float64 `perfdata:"Turbo I/O Reads/sec"`
|
||||
TurboIOWritesPerSec float64 `perfdata:"Turbo I/O Writes/sec"`
|
||||
WriteBytesTransmittedViaSMBDirectPerSec float64 `perfdata:"Write Bytes transmitted via SMB Direct/sec"`
|
||||
WriteBytesPerSec float64 `perfdata:"Write Bytes/sec"`
|
||||
WriteRequestsTransmittedViaSMBDirectPerSec float64 `perfdata:"Write Requests transmitted via SMB Direct/sec"`
|
||||
WriteRequestsPerSec float64 `perfdata:"Write Requests/sec"`
|
||||
}
|
||||
Reference in New Issue
Block a user