process: Use registry collector for V1 data (#1814)

Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de>
This commit is contained in:
Jan-Otto Kröpke
2024-12-21 22:58:47 +01:00
committed by GitHub
parent 39c929eefe
commit a9f8b3b722
158 changed files with 7793 additions and 7748 deletions

View File

@@ -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"
)

View File

@@ -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,
)
}

View 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"`
}