performancecounter: rename collector (#1787)

Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de>
This commit is contained in:
Jan-Otto Kröpke
2024-11-30 11:24:01 +01:00
committed by GitHub
parent a359acb3d1
commit 9db94aa66a
13 changed files with 452 additions and 323 deletions

View File

@@ -42,7 +42,7 @@ Name | Description | Enabled by default
[net](docs/collector.net.md) | Network interface I/O | &#10003; [net](docs/collector.net.md) | Network interface I/O | &#10003;
[os](docs/collector.os.md) | OS metrics (memory, processes, users) | &#10003; [os](docs/collector.os.md) | OS metrics (memory, processes, users) | &#10003;
[pagefile](docs/collector.pagefile.md) | pagefile metrics | [pagefile](docs/collector.pagefile.md) | pagefile metrics |
[perfdata](docs/collector.perfdata.md) | Custom perfdata metrics | [performancecounter](docs/collector.performancecounter.md) | Custom performance counter metrics |
[physical_disk](docs/collector.physical_disk.md) | physical disk metrics | &#10003; [physical_disk](docs/collector.physical_disk.md) | physical disk metrics | &#10003;
[printer](docs/collector.printer.md) | Printer metrics | [printer](docs/collector.printer.md) | Printer metrics |
[process](docs/collector.process.md) | Per-process metrics | [process](docs/collector.process.md) | Per-process metrics |

View File

@@ -18,6 +18,7 @@ This directory contains documentation of the collectors in the windows_exporter,
- [`fsrmquota`](collector.fsrmquota.md) - [`fsrmquota`](collector.fsrmquota.md)
- [`hyperv`](collector.hyperv.md) - [`hyperv`](collector.hyperv.md)
- [`iis`](collector.iis.md) - [`iis`](collector.iis.md)
- [`license`](collector.license.md)
- [`logical_disk`](collector.logical_disk.md) - [`logical_disk`](collector.logical_disk.md)
- [`logon`](collector.logon.md) - [`logon`](collector.logon.md)
- [`memory`](collector.memory.md) - [`memory`](collector.memory.md)
@@ -28,12 +29,16 @@ This directory contains documentation of the collectors in the windows_exporter,
- [`netframework`](collector.netframework.md) - [`netframework`](collector.netframework.md)
- [`nps`](collector.nps.md) - [`nps`](collector.nps.md)
- [`os`](collector.os.md) - [`os`](collector.os.md)
- [`pagefile`](collector.pagefile.md)
- [`performancecounter`](collector.performancecounter.md)
- [`physical_disk`](collector.physical_disk.md) - [`physical_disk`](collector.physical_disk.md)
- [`printer`](collector.printer.md)
- [`process`](collector.process.md) - [`process`](collector.process.md)
- [`remote_fx`](collector.remote_fx.md) - [`remote_fx`](collector.remote_fx.md)
- [`scheduled_task`](collector.scheduled_task.md) - [`scheduled_task`](collector.scheduled_task.md)
- [`service`](collector.service.md) - [`service`](collector.service.md)
- [`smb`](collector.smb.md) - [`smb`](collector.smb.md)
- [`smbclient`](collector.smbclient.md)
- [`smtp`](collector.smtp.md) - [`smtp`](collector.smtp.md)
- [`system`](collector.system.md) - [`system`](collector.system.md)
- [`tcp`](collector.tcp.md) - [`tcp`](collector.tcp.md)

View File

@@ -1,114 +0,0 @@
# Perfdata collector
The perfdata collector exposes any configured metric.
| | |
|---------------------|-------------------------|
| Metric name prefix | `perfdata` |
| Data source | Performance Data Helper |
| Enabled by default? | No |
## Flags
### `--collector.perfdata.objects`
Objects is a list of objects to collect metrics from. The value takes the form of a JSON array of strings. YAML is also supported.
The collector supports only english named counter. Localized counter-names are not supported.
#### Schema
YAML:
```yaml
- object: "Processor Information"
instances: ["*"]
instance_label: "core"
counters:
"% Processor Time": {}
- object: "Memory"
counters:
"Cache Faults/sec":
type: "counter"
```
JSON:
```json
[
{"object":"Processor Information","instance_label": "core","instances":["*"],"counters": {"% Processor Time": {}}},
{"object":"Memory","counters": {"Cache Faults/sec": {"type": "counter"}}}
]
```
#### name
ObjectName is the Object to query for, like Processor, DirectoryServices, LogicalDisk or similar.
The collector supports only english named counter. Localized counter-names are not supported.
#### instances
The instances key (this is an array) declares the instances of a counter you would like returned, it can be one or more values.
Example: Instances = `["C:","D:","E:"]`
This will return only for the instances C:, D: and E: where relevant. To get all instances of a Counter, use `["*"]` only.
Some Objects like `Memory` do not have instances to select from at all. In this case, the `instances` key can be omitted.
#### counters
The Counters key (this is an object) declares the counters of the ObjectName you would like returned, it can also be one or more values.
Example: Counters = `{"% Idle Time": {}, "% Disk Read Time": {}, "% Disk Write Time": {}}`
This must be specified for every counter you want the results. Wildcards are not supported.
#### counters Sub-Schema
##### type
This key is optional. It indicates the type of the counter. The value can be `counter` or `gauge`.
If not specified, the windows_exporter will try to determine the type based on the counter type.
### Example
```
# HELP windows_perfdata_memory_cache_faults_sec
# TYPE windows_perfdata_memory_cache_faults_sec counter
windows_perfdata_memory_cache_faults_sec 2.369977e+07
# HELP windows_perfdata_processor_information__processor_time
# TYPE windows_perfdata_processor_information__processor_time gauge
windows_perfdata_processor_information__processor_time{instance="0,0"} 1.7259640625e+11
windows_perfdata_processor_information__processor_time{instance="0,1"} 1.7576796875e+11
windows_perfdata_processor_information__processor_time{instance="0,10"} 2.2704234375e+11
windows_perfdata_processor_information__processor_time{instance="0,11"} 2.3069296875e+11
windows_perfdata_processor_information__processor_time{instance="0,12"} 2.3302265625e+11
windows_perfdata_processor_information__processor_time{instance="0,13"} 2.32851875e+11
windows_perfdata_processor_information__processor_time{instance="0,14"} 2.3282421875e+11
windows_perfdata_processor_information__processor_time{instance="0,15"} 2.3271234375e+11
windows_perfdata_processor_information__processor_time{instance="0,16"} 2.329590625e+11
windows_perfdata_processor_information__processor_time{instance="0,17"} 2.32800625e+11
windows_perfdata_processor_information__processor_time{instance="0,18"} 2.3194359375e+11
windows_perfdata_processor_information__processor_time{instance="0,19"} 2.32380625e+11
windows_perfdata_processor_information__processor_time{instance="0,2"} 1.954765625e+11
windows_perfdata_processor_information__processor_time{instance="0,20"} 2.3259765625e+11
windows_perfdata_processor_information__processor_time{instance="0,21"} 2.3268515625e+11
windows_perfdata_processor_information__processor_time{instance="0,22"} 2.3301765625e+11
windows_perfdata_processor_information__processor_time{instance="0,23"} 2.3264328125e+11
windows_perfdata_processor_information__processor_time{instance="0,3"} 1.94745625e+11
windows_perfdata_processor_information__processor_time{instance="0,4"} 2.2011453125e+11
windows_perfdata_processor_information__processor_time{instance="0,5"} 2.27244375e+11
windows_perfdata_processor_information__processor_time{instance="0,6"} 2.25501875e+11
windows_perfdata_processor_information__processor_time{instance="0,7"} 2.2995265625e+11
windows_perfdata_processor_information__processor_time{instance="0,8"} 2.2929890625e+11
windows_perfdata_processor_information__processor_time{instance="0,9"} 2.313540625e+11
windows_perfdata_processor_information__processor_time{instance="0,_Total"} 2.23009459635e+11
```
## Metrics
The perfdata collector returns metrics based on the user configuration.
The metrics are named based on the object name and the counter name.
The instance name is added as a label to the metric.

View File

@@ -0,0 +1,193 @@
# performancecounter collector
The performancecounter collector exposes any configured metric.
| | |
|---------------------|-------------------------|
| Metric name prefix | `performancecounter` |
| Data source | Performance Data Helper |
| Enabled by default? | No |
## Flags
### `--collector.performancecounter.objects`
Objects is a list of objects to collect metrics from. The value takes the form of a JSON array of strings. YAML is also supported.
The collector supports only english named counter. Localized counter-names are not supported.
#### Schema
YAML:
<details>
<summary>Click to expand YAML schema</summary>
```yaml
- object: "Processor Information"
instances: ["*"]
instance_label: "core"
counters:
- name: "% Processor Time"
metric: windows_performancecounter_processor_information_processor_time # optional
labels:
state: active
- name: "% Idle Time"
metric: windows_performancecounter_processor_information_processor_time # optional
labels:
state: idle
- object: "Memory"
counters:
- name: "Cache Faults/sec"
type: "counter" # optional
```
</details>
<details>
<summary>Click to expand JSON schema</summary>
```json
[
{
"object": "Processor Information",
"instances": [
"*"
],
"instance_label": "core",
"counters": [
{
"name": "% Processor Time",
"metric": "windows_performancecounter_processor_information_processor_time",
"labels": {
"state": "active"
}
},
{
"name": "% Idle Time",
"metric": "windows_performancecounter_processor_information_processor_time",
"labels": {
"state": "idle"
}
}
]
},
{
"object": "Memory",
"counters": [
{
"name": "Cache Faults/sec",
"type": "counter"
}
]
}
]
```
#### name
ObjectName is the Object to query for, like Processor, DirectoryServices, LogicalDisk or similar.
The collector supports only english named counter. Localized counter-names are not supported.
#### instances
The instances key (this is an array) declares the instances of a counter you would like returned, it can be one or more values.
Example: Instances = `["C:","D:","E:"]`
This will return only for the instances C:, D: and E: where relevant. To get all instances of a Counter, use `["*"]` only.
Some Objects like `Memory` do not have instances to select from at all. In this case, the `instances` key can be omitted.
#### counters
List of counters to collect from the object. See the counters sub-schema for more information.
#### counters Sub-Schema
##### name
The name of the counter to collect.
##### metric
It indicates the name of the metric to be exposed. If not specified, the metric name will be generated based on the object name and the counter name.
This key is optional.
##### type
It indicates the type of the counter. The value can be `counter` or `gauge`.
If not specified, the windows_exporter will try to determine the type based on the counter type.
This key is optional.
##### labels
Labels is a map of key-value pairs that will be added as labels to the metric.
### Example
```
# HELP windows_performancecounter_memory_cache_faults_sec
# TYPE windows_performancecounter_memory_cache_faults_sec counter
windows_performancecounter_memory_cache_faults_sec 7.028097e+06
# HELP windows_performancecounter_processor_information_processor_time
# TYPE windows_performancecounter_processor_information_processor_time counter
windows_performancecounter_processor_information_processor_time{core="0,0",state="active"} 8.3809375e+10
windows_performancecounter_processor_information_processor_time{core="0,0",state="idle"} 8380.9375
windows_performancecounter_processor_information_processor_time{core="0,1",state="active"} 8.2868125e+10
windows_performancecounter_processor_information_processor_time{core="0,1",state="idle"} 8286.8125
windows_performancecounter_processor_information_processor_time{core="0,10",state="active"} 9.720046875e+10
windows_performancecounter_processor_information_processor_time{core="0,10",state="idle"} 9720.046875
windows_performancecounter_processor_information_processor_time{core="0,11",state="active"} 9.994921875e+10
windows_performancecounter_processor_information_processor_time{core="0,11",state="idle"} 9994.921875
windows_performancecounter_processor_information_processor_time{core="0,12",state="active"} 1.014403125e+11
windows_performancecounter_processor_information_processor_time{core="0,12",state="idle"} 10144.03125
windows_performancecounter_processor_information_processor_time{core="0,13",state="active"} 1.0155453125e+11
windows_performancecounter_processor_information_processor_time{core="0,13",state="idle"} 10155.453125
windows_performancecounter_processor_information_processor_time{core="0,14",state="active"} 1.01290625e+11
windows_performancecounter_processor_information_processor_time{core="0,14",state="idle"} 10129.0625
windows_performancecounter_processor_information_processor_time{core="0,15",state="active"} 1.0134890625e+11
windows_performancecounter_processor_information_processor_time{core="0,15",state="idle"} 10134.890625
windows_performancecounter_processor_information_processor_time{core="0,16",state="active"} 1.01405625e+11
windows_performancecounter_processor_information_processor_time{core="0,16",state="idle"} 10140.5625
windows_performancecounter_processor_information_processor_time{core="0,17",state="active"} 1.0153421875e+11
windows_performancecounter_processor_information_processor_time{core="0,17",state="idle"} 10153.421875
windows_performancecounter_processor_information_processor_time{core="0,18",state="active"} 1.0086390625e+11
windows_performancecounter_processor_information_processor_time{core="0,18",state="idle"} 10086.390625
windows_performancecounter_processor_information_processor_time{core="0,19",state="active"} 1.0123453125e+11
windows_performancecounter_processor_information_processor_time{core="0,19",state="idle"} 10123.453125
windows_performancecounter_processor_information_processor_time{core="0,2",state="active"} 8.3548125e+10
windows_performancecounter_processor_information_processor_time{core="0,2",state="idle"} 8354.8125
windows_performancecounter_processor_information_processor_time{core="0,20",state="active"} 1.011703125e+11
windows_performancecounter_processor_information_processor_time{core="0,20",state="idle"} 10117.03125
windows_performancecounter_processor_information_processor_time{core="0,21",state="active"} 1.0140984375e+11
windows_performancecounter_processor_information_processor_time{core="0,21",state="idle"} 10140.984375
windows_performancecounter_processor_information_processor_time{core="0,22",state="active"} 1.014615625e+11
windows_performancecounter_processor_information_processor_time{core="0,22",state="idle"} 10146.15625
windows_performancecounter_processor_information_processor_time{core="0,23",state="active"} 1.0145125e+11
windows_performancecounter_processor_information_processor_time{core="0,23",state="idle"} 10145.125
windows_performancecounter_processor_information_processor_time{core="0,3",state="active"} 8.488953125e+10
windows_performancecounter_processor_information_processor_time{core="0,3",state="idle"} 8488.953125
windows_performancecounter_processor_information_processor_time{core="0,4",state="active"} 9.338234375e+10
windows_performancecounter_processor_information_processor_time{core="0,4",state="idle"} 9338.234375
windows_performancecounter_processor_information_processor_time{core="0,5",state="active"} 9.776453125e+10
windows_performancecounter_processor_information_processor_time{core="0,5",state="idle"} 9776.453125
windows_performancecounter_processor_information_processor_time{core="0,6",state="active"} 9.736265625e+10
windows_performancecounter_processor_information_processor_time{core="0,6",state="idle"} 9736.265625
windows_performancecounter_processor_information_processor_time{core="0,7",state="active"} 9.959375e+10
windows_performancecounter_processor_information_processor_time{core="0,7",state="idle"} 9959.375
windows_performancecounter_processor_information_processor_time{core="0,8",state="active"} 9.939421875e+10
windows_performancecounter_processor_information_processor_time{core="0,8",state="idle"} 9939.421875
windows_performancecounter_processor_information_processor_time{core="0,9",state="active"} 1.0059484375e+11
windows_performancecounter_processor_information_processor_time{core="0,9",state="idle"} 10059.484375
```
## Metrics
The perfdata collector returns metrics based on the user configuration.
The metrics are named based on the object name and the counter name.
The instance name is added as a label to the metric.

View File

@@ -13,14 +13,12 @@
//go:build windows //go:build windows
package perfdata package performancecounter
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"log/slog" "log/slog"
"maps"
"slices"
"strings" "strings"
"github.com/alecthomas/kingpin/v2" "github.com/alecthomas/kingpin/v2"
@@ -30,7 +28,7 @@ import (
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
) )
const Name = "perfdata" const Name = "performancecounter"
type Config struct { type Config struct {
Objects []Object `yaml:"objects"` Objects []Object `yaml:"objects"`
@@ -41,9 +39,11 @@ var ConfigDefaults = Config{
Objects: make([]Object, 0), Objects: make([]Object, 0),
} }
// A Collector is a Prometheus collector for perfdata metrics. // A Collector is a Prometheus collector for performance counter metrics.
type Collector struct { type Collector struct {
config Config config Config
logger *slog.Logger
} }
func New(config *Config) *Collector { func New(config *Config) *Collector {
@@ -70,7 +70,7 @@ func NewWithFlags(app *kingpin.Application) *Collector {
var objects string var objects string
app.Flag( app.Flag(
"collector.perfdata.objects", "collector.performancecounter.objects",
"Objects of performance data to observe. See docs for more information on how to use this flag. By default, no objects are observed.", "Objects of performance data to observe. See docs for more information on how to use this flag. By default, no objects are observed.",
).Default("").StringVar(&objects) ).Default("").StringVar(&objects)
@@ -102,10 +102,19 @@ func (c *Collector) Close() error {
} }
func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error {
logger.Warn("The perfdata collector is in an experimental state! The configuration may change in future. Please report any issues.") c.logger = logger.With(slog.String("collector", Name))
for i, object := range c.config.Objects { for i, object := range c.config.Objects {
collector, err := perfdata.NewCollector(object.Object, object.Instances, slices.Sorted(maps.Keys(object.Counters))) counters := make([]string, 0, len(object.Counters))
for j, counter := range object.Counters {
counters = append(counters, counter.Name)
if counter.Metric == "" {
c.config.Objects[i].Counters[j].Metric = sanitizeMetricName(fmt.Sprintf("%s_%s_%s_%s", types.Namespace, Name, object.Object, counter.Name))
}
}
collector, err := perfdata.NewCollector(object.Object, object.Instances, counters)
if err != nil { if err != nil {
return fmt.Errorf("failed to create v2 collector: %w", err) return fmt.Errorf("failed to create v2 collector: %w", err)
} }
@@ -123,40 +132,64 @@ func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error {
// Collect sends the metric values for each metric // Collect sends the metric values for each metric
// to the provided prometheus Metric channel. // to the provided prometheus Metric channel.
func (c *Collector) Collect(ch chan<- prometheus.Metric) error { func (c *Collector) Collect(ch chan<- prometheus.Metric) error {
for _, object := range c.config.Objects { for _, perfDataObject := range c.config.Objects {
data, err := object.collector.Collect() collectedPerfData, err := perfDataObject.collector.Collect()
if err != nil { if err != nil {
return fmt.Errorf("failed to collect data: %w", err) return fmt.Errorf("failed to collect data: %w", err)
} }
for instance, counters := range data { for collectedInstance, collectedInstanceCounters := range collectedPerfData {
for counter, value := range counters { for _, counter := range perfDataObject.Counters {
var labels prometheus.Labels collectedCounterValue, ok := collectedInstanceCounters[counter.Name]
if instance != perfdata.InstanceEmpty { if !ok {
labels = prometheus.Labels{object.InstanceLabel: instance} c.logger.Warn(fmt.Sprintf("counter %s not found in collected data", counter.Name))
continue
} }
metricType := value.Type labels := make(prometheus.Labels, len(counter.Labels)+1)
if collectedInstance != perfdata.InstanceEmpty {
labels[perfDataObject.InstanceLabel] = collectedInstance
}
if val, ok := object.Counters[counter]; ok { for key, value := range counter.Labels {
switch val.Type { labels[key] = value
case "counter": }
metricType = prometheus.CounterValue
case "gauge": var metricType prometheus.ValueType
metricType = prometheus.GaugeValue
} switch counter.Type {
case "counter":
metricType = prometheus.CounterValue
case "gauge":
metricType = prometheus.GaugeValue
default:
metricType = collectedCounterValue.Type
} }
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
prometheus.NewDesc( prometheus.NewDesc(
sanitizeMetricName(fmt.Sprintf("%s_perfdata_%s_%s", types.Namespace, object.Object, counter)), counter.Metric,
fmt.Sprintf("Performance data for \\%s\\%s", object.Object, counter), "windows_exporter: custom Performance Counter metric",
nil, nil,
labels, labels,
), ),
metricType, metricType,
value.FirstValue, collectedCounterValue.FirstValue,
) )
if collectedCounterValue.SecondValue != 0 {
ch <- prometheus.MustNewConstMetric(
prometheus.NewDesc(
counter.Metric+"_second",
"windows_exporter: custom Performance Counter metric",
nil,
labels,
),
metricType,
collectedCounterValue.SecondValue,
)
}
} }
} }
} }

View File

@@ -13,19 +13,19 @@
//go:build windows //go:build windows
package perfdata_test package performancecounter_test
import ( import (
"testing" "testing"
"github.com/alecthomas/kingpin/v2" "github.com/alecthomas/kingpin/v2"
"github.com/prometheus-community/windows_exporter/internal/collector/perfdata" "github.com/prometheus-community/windows_exporter/internal/collector/performancecounter"
"github.com/prometheus-community/windows_exporter/internal/utils/testutils" "github.com/prometheus-community/windows_exporter/internal/utils/testutils"
) )
func BenchmarkCollector(b *testing.B) { func BenchmarkCollector(b *testing.B) {
perfDataObjects := `[{"object":"Processor Information","instances":["*"],"counters":{"*": {}}}]` perfDataObjects := `[{"object":"Processor Information","instances":["*"],"instance_label":"core","counters":[{"name":"% Processor Time","metric":"windows_performancecounter_processor_information_processor_time","labels":{"state":"active"}},{"name":"% Idle Time","metric":"windows_performancecounter_processor_information_processor_time","labels":{"state":"idle"}}]},{"object":"Memory","counters":[{"name":"Cache Faults/sec","type":"counter"}]}]`
kingpin.CommandLine.GetArg("collector.perfdata.objects").StringVar(&perfDataObjects) kingpin.CommandLine.GetArg("collector.perfdata.objects").StringVar(&perfDataObjects)
testutils.FuncBenchmarkCollector(b, perfdata.Name, perfdata.NewWithFlags) testutils.FuncBenchmarkCollector(b, performancecounter.Name, performancecounter.NewWithFlags)
} }

View File

@@ -13,7 +13,7 @@
//go:build windows //go:build windows
package perfdata_test package performancecounter_test
import ( import (
"fmt" "fmt"
@@ -24,7 +24,7 @@ import (
"regexp" "regexp"
"testing" "testing"
"github.com/prometheus-community/windows_exporter/internal/collector/perfdata" "github.com/prometheus-community/windows_exporter/internal/collector/performancecounter"
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp" "github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
@@ -32,7 +32,7 @@ import (
) )
type collectorAdapter struct { type collectorAdapter struct {
perfdata.Collector performancecounter.Collector
} }
// Describe implements the prometheus.Collector interface. // Describe implements the prometheus.Collector interface.
@@ -51,31 +51,40 @@ func TestCollector(t *testing.T) {
for _, tc := range []struct { for _, tc := range []struct {
object string object string
instances []string instances []string
counters map[string]perfdata.Counter instanceLabel string
counters []performancecounter.Counter
expectedMetrics *regexp.Regexp expectedMetrics *regexp.Regexp
}{ }{
{ {
object: "Memory", object: "Memory",
instances: nil, instances: nil,
counters: map[string]perfdata.Counter{"Available Bytes": {Type: "gauge"}}, counters: []performancecounter.Counter{{Name: "Available Bytes", Type: "gauge"}},
expectedMetrics: regexp.MustCompile(`^# HELP windows_perfdata_memory_available_bytes Performance data for \\\\Memory\\\\Available Bytes\s*# TYPE windows_perfdata_memory_available_bytes gauge\s*windows_perfdata_memory_available_bytes \d`), expectedMetrics: regexp.MustCompile(`^# HELP windows_performancecounter_memory_available_bytes windows_exporter: custom Performance Counter metric\S*\s*# TYPE windows_performancecounter_memory_available_bytes gauge\s*windows_performancecounter_memory_available_bytes \d`),
}, },
{ {
object: "Process", object: "Process",
instances: []string{"*"}, instances: []string{"*"},
counters: map[string]perfdata.Counter{"Thread Count": {Type: "counter"}}, counters: []performancecounter.Counter{{Name: "Thread Count", Type: "counter"}},
expectedMetrics: regexp.MustCompile(`^# HELP windows_perfdata_process_thread_count Performance data for \\\\Process\\\\Thread Count\s*# TYPE windows_perfdata_process_thread_count counter\s*windows_perfdata_process_thread_count\{instance=".+"} \d`), expectedMetrics: regexp.MustCompile(`^# HELP windows_performancecounter_process_thread_count windows_exporter: custom Performance Counter metric\S*\s*# TYPE windows_performancecounter_process_thread_count counter\s*windows_performancecounter_process_thread_count\{instance=".+"} \d`),
},
{
object: "Processor Information",
instances: []string{"*"},
instanceLabel: "core",
counters: []performancecounter.Counter{{Name: "% Processor Time", Metric: "windows_performancecounter_processor_information_processor_time", Labels: map[string]string{"state": "active"}}, {Name: "% Idle Time", Metric: "windows_performancecounter_processor_information_processor_time", Labels: map[string]string{"state": "idle"}}},
expectedMetrics: regexp.MustCompile(`^# HELP windows_performancecounter_processor_information_processor_time windows_exporter: custom Performance Counter metric\s+# TYPE windows_performancecounter_processor_information_processor_time counter\s+windows_performancecounter_processor_information_processor_time\{core="0,0",state="active"} [0-9.e+]+\s+windows_performancecounter_processor_information_processor_time\{core="0,0",state="idle"} [0-9.e+]+`),
}, },
} { } {
t.Run(tc.object, func(t *testing.T) { t.Run(tc.object, func(t *testing.T) {
t.Parallel() t.Parallel()
perfDataCollector := perfdata.New(&perfdata.Config{ perfDataCollector := performancecounter.New(&performancecounter.Config{
Objects: []perfdata.Object{ Objects: []performancecounter.Object{
{ {
Object: tc.object, Object: tc.object,
Instances: tc.instances, Instances: tc.instances,
Counters: tc.counters, InstanceLabel: tc.instanceLabel,
Counters: tc.counters,
}, },
}, },
}) })

View File

@@ -13,19 +13,24 @@
//go:build windows //go:build windows
package perfdata package performancecounter
import "github.com/prometheus-community/windows_exporter/internal/perfdata" import "github.com/prometheus-community/windows_exporter/internal/perfdata"
type Object struct { type Object struct {
Object string `json:"object" yaml:"object"` Object string `json:"object" yaml:"object"`
Instances []string `json:"instances" yaml:"instances"` Instances []string `json:"instances" yaml:"instances"`
Counters map[string]Counter `json:"counters" yaml:"counters"` Counters []Counter `json:"counters" yaml:"counters"`
InstanceLabel string `json:"instance_label" yaml:"instance_label"` //nolint:tagliatelle InstanceLabel string `json:"instance_label" yaml:"instance_label"` //nolint:tagliatelle
collector *perfdata.Collector collector *perfdata.Collector
} }
type Counter struct { type Counter struct {
Type string `json:"type" yaml:"type"` Name string `json:"name" yaml:"name"`
Type string `json:"type" yaml:"type"`
Metric string `json:"metric" yaml:"metric"`
Labels map[string]string `json:"labels" yaml:"labels"`
} }
// https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/54691ebe11bb9ec32b4e35cd31fcb94a352de134/receiver/windowsperfcountersreceiver/README.md?plain=1#L150

View File

@@ -54,7 +54,7 @@ import (
"github.com/prometheus-community/windows_exporter/internal/collector/nps" "github.com/prometheus-community/windows_exporter/internal/collector/nps"
"github.com/prometheus-community/windows_exporter/internal/collector/os" "github.com/prometheus-community/windows_exporter/internal/collector/os"
"github.com/prometheus-community/windows_exporter/internal/collector/pagefile" "github.com/prometheus-community/windows_exporter/internal/collector/pagefile"
"github.com/prometheus-community/windows_exporter/internal/collector/perfdata" "github.com/prometheus-community/windows_exporter/internal/collector/performancecounter"
"github.com/prometheus-community/windows_exporter/internal/collector/physical_disk" "github.com/prometheus-community/windows_exporter/internal/collector/physical_disk"
"github.com/prometheus-community/windows_exporter/internal/collector/printer" "github.com/prometheus-community/windows_exporter/internal/collector/printer"
"github.com/prometheus-community/windows_exporter/internal/collector/process" "github.com/prometheus-community/windows_exporter/internal/collector/process"
@@ -123,7 +123,7 @@ func NewWithConfig(config Config) *Collection {
collectors[nps.Name] = nps.New(&config.Nps) collectors[nps.Name] = nps.New(&config.Nps)
collectors[os.Name] = os.New(&config.OS) collectors[os.Name] = os.New(&config.OS)
collectors[pagefile.Name] = pagefile.New(&config.Paging) collectors[pagefile.Name] = pagefile.New(&config.Paging)
collectors[perfdata.Name] = perfdata.New(&config.PerfData) collectors[performancecounter.Name] = performancecounter.New(&config.PerformanceCounter)
collectors[physical_disk.Name] = physical_disk.New(&config.PhysicalDisk) collectors[physical_disk.Name] = physical_disk.New(&config.PhysicalDisk)
collectors[printer.Name] = printer.New(&config.Printer) collectors[printer.Name] = printer.New(&config.Printer)
collectors[process.Name] = process.New(&config.Process) collectors[process.Name] = process.New(&config.Process)

View File

@@ -45,7 +45,7 @@ import (
"github.com/prometheus-community/windows_exporter/internal/collector/nps" "github.com/prometheus-community/windows_exporter/internal/collector/nps"
"github.com/prometheus-community/windows_exporter/internal/collector/os" "github.com/prometheus-community/windows_exporter/internal/collector/os"
"github.com/prometheus-community/windows_exporter/internal/collector/pagefile" "github.com/prometheus-community/windows_exporter/internal/collector/pagefile"
"github.com/prometheus-community/windows_exporter/internal/collector/perfdata" "github.com/prometheus-community/windows_exporter/internal/collector/performancecounter"
"github.com/prometheus-community/windows_exporter/internal/collector/physical_disk" "github.com/prometheus-community/windows_exporter/internal/collector/physical_disk"
"github.com/prometheus-community/windows_exporter/internal/collector/printer" "github.com/prometheus-community/windows_exporter/internal/collector/printer"
"github.com/prometheus-community/windows_exporter/internal/collector/process" "github.com/prometheus-community/windows_exporter/internal/collector/process"
@@ -67,54 +67,54 @@ import (
) )
type Config struct { type Config struct {
AD ad.Config `yaml:"ad"` AD ad.Config `yaml:"ad"`
ADCS adcs.Config `yaml:"adcs"` ADCS adcs.Config `yaml:"adcs"`
ADFS adfs.Config `yaml:"adfs"` ADFS adfs.Config `yaml:"adfs"`
Cache cache.Config `yaml:"cache"` Cache cache.Config `yaml:"cache"`
Container container.Config `yaml:"container"` Container container.Config `yaml:"container"`
CPU cpu.Config `yaml:"cpu"` CPU cpu.Config `yaml:"cpu"`
CPUInfo cpu_info.Config `yaml:"cpu_info"` CPUInfo cpu_info.Config `yaml:"cpu_info"`
Cs cs.Config `yaml:"cs"` Cs cs.Config `yaml:"cs"`
DFSR dfsr.Config `yaml:"dfsr"` DFSR dfsr.Config `yaml:"dfsr"`
Dhcp dhcp.Config `yaml:"dhcp"` Dhcp dhcp.Config `yaml:"dhcp"`
DiskDrive diskdrive.Config `yaml:"disk_drive"` DiskDrive diskdrive.Config `yaml:"disk_drive"`
DNS dns.Config `yaml:"dns"` DNS dns.Config `yaml:"dns"`
Exchange exchange.Config `yaml:"exchange"` Exchange exchange.Config `yaml:"exchange"`
Filetime filetime.Config `yaml:"filetime"` Filetime filetime.Config `yaml:"filetime"`
Fsrmquota fsrmquota.Config `yaml:"fsrmquota"` Fsrmquota fsrmquota.Config `yaml:"fsrmquota"`
HyperV hyperv.Config `yaml:"hyper_v"` HyperV hyperv.Config `yaml:"hyper_v"`
IIS iis.Config `yaml:"iis"` IIS iis.Config `yaml:"iis"`
License license.Config `yaml:"license"` License license.Config `yaml:"license"`
LogicalDisk logical_disk.Config `yaml:"logical_disk"` LogicalDisk logical_disk.Config `yaml:"logical_disk"`
Logon logon.Config `yaml:"logon"` Logon logon.Config `yaml:"logon"`
Memory memory.Config `yaml:"memory"` Memory memory.Config `yaml:"memory"`
MSCluster mscluster.Config `yaml:"ms_cluster"` MSCluster mscluster.Config `yaml:"ms_cluster"`
Msmq msmq.Config `yaml:"msmq"` Msmq msmq.Config `yaml:"msmq"`
Mssql mssql.Config `yaml:"mssql"` Mssql mssql.Config `yaml:"mssql"`
Net net.Config `yaml:"net"` Net net.Config `yaml:"net"`
NetFramework netframework.Config `yaml:"net_framework"` NetFramework netframework.Config `yaml:"net_framework"`
Nps nps.Config `yaml:"nps"` Nps nps.Config `yaml:"nps"`
OS os.Config `yaml:"os"` OS os.Config `yaml:"os"`
Paging pagefile.Config `yaml:"paging"` Paging pagefile.Config `yaml:"paging"`
PerfData perfdata.Config `yaml:"perf_data"` PerformanceCounter performancecounter.Config `yaml:"performance_counter"`
PhysicalDisk physical_disk.Config `yaml:"physical_disk"` PhysicalDisk physical_disk.Config `yaml:"physical_disk"`
Printer printer.Config `yaml:"printer"` Printer printer.Config `yaml:"printer"`
Process process.Config `yaml:"process"` Process process.Config `yaml:"process"`
RemoteFx remote_fx.Config `yaml:"remote_fx"` RemoteFx remote_fx.Config `yaml:"remote_fx"`
ScheduledTask scheduled_task.Config `yaml:"scheduled_task"` ScheduledTask scheduled_task.Config `yaml:"scheduled_task"`
Service service.Config `yaml:"service"` Service service.Config `yaml:"service"`
SMB smb.Config `yaml:"smb"` SMB smb.Config `yaml:"smb"`
SMBClient smbclient.Config `yaml:"smb_client"` SMBClient smbclient.Config `yaml:"smb_client"`
SMTP smtp.Config `yaml:"smtp"` SMTP smtp.Config `yaml:"smtp"`
System system.Config `yaml:"system"` System system.Config `yaml:"system"`
TCP tcp.Config `yaml:"tcp"` TCP tcp.Config `yaml:"tcp"`
TerminalServices terminal_services.Config `yaml:"terminal_services"` TerminalServices terminal_services.Config `yaml:"terminal_services"`
Textfile textfile.Config `yaml:"textfile"` Textfile textfile.Config `yaml:"textfile"`
ThermalZone thermalzone.Config `yaml:"thermal_zone"` ThermalZone thermalzone.Config `yaml:"thermal_zone"`
Time time.Config `yaml:"time"` Time time.Config `yaml:"time"`
UDP udp.Config `yaml:"udp"` UDP udp.Config `yaml:"udp"`
Update update.Config `yaml:"update"` Update update.Config `yaml:"update"`
Vmware vmware.Config `yaml:"vmware"` Vmware vmware.Config `yaml:"vmware"`
} }
// ConfigDefaults Is an interface to be used by the external libraries. It holds all ConfigDefaults form all collectors // ConfigDefaults Is an interface to be used by the external libraries. It holds all ConfigDefaults form all collectors
@@ -122,52 +122,52 @@ type Config struct {
//nolint:gochecknoglobals //nolint:gochecknoglobals
//goland:noinspection GoUnusedGlobalVariable //goland:noinspection GoUnusedGlobalVariable
var ConfigDefaults = Config{ var ConfigDefaults = Config{
AD: ad.ConfigDefaults, AD: ad.ConfigDefaults,
ADCS: adcs.ConfigDefaults, ADCS: adcs.ConfigDefaults,
ADFS: adfs.ConfigDefaults, ADFS: adfs.ConfigDefaults,
Cache: cache.ConfigDefaults, Cache: cache.ConfigDefaults,
Container: container.ConfigDefaults, Container: container.ConfigDefaults,
CPU: cpu.ConfigDefaults, CPU: cpu.ConfigDefaults,
CPUInfo: cpu_info.ConfigDefaults, CPUInfo: cpu_info.ConfigDefaults,
Cs: cs.ConfigDefaults, Cs: cs.ConfigDefaults,
DFSR: dfsr.ConfigDefaults, DFSR: dfsr.ConfigDefaults,
Dhcp: dhcp.ConfigDefaults, Dhcp: dhcp.ConfigDefaults,
DiskDrive: diskdrive.ConfigDefaults, DiskDrive: diskdrive.ConfigDefaults,
DNS: dns.ConfigDefaults, DNS: dns.ConfigDefaults,
Exchange: exchange.ConfigDefaults, Exchange: exchange.ConfigDefaults,
Filetime: filetime.ConfigDefaults, Filetime: filetime.ConfigDefaults,
Fsrmquota: fsrmquota.ConfigDefaults, Fsrmquota: fsrmquota.ConfigDefaults,
HyperV: hyperv.ConfigDefaults, HyperV: hyperv.ConfigDefaults,
IIS: iis.ConfigDefaults, IIS: iis.ConfigDefaults,
License: license.ConfigDefaults, License: license.ConfigDefaults,
LogicalDisk: logical_disk.ConfigDefaults, LogicalDisk: logical_disk.ConfigDefaults,
Logon: logon.ConfigDefaults, Logon: logon.ConfigDefaults,
Memory: memory.ConfigDefaults, Memory: memory.ConfigDefaults,
MSCluster: mscluster.ConfigDefaults, MSCluster: mscluster.ConfigDefaults,
Msmq: msmq.ConfigDefaults, Msmq: msmq.ConfigDefaults,
Mssql: mssql.ConfigDefaults, Mssql: mssql.ConfigDefaults,
Net: net.ConfigDefaults, Net: net.ConfigDefaults,
NetFramework: netframework.ConfigDefaults, NetFramework: netframework.ConfigDefaults,
Nps: nps.ConfigDefaults, Nps: nps.ConfigDefaults,
OS: os.ConfigDefaults, OS: os.ConfigDefaults,
Paging: pagefile.ConfigDefaults, Paging: pagefile.ConfigDefaults,
PerfData: perfdata.ConfigDefaults, PerformanceCounter: performancecounter.ConfigDefaults,
PhysicalDisk: physical_disk.ConfigDefaults, PhysicalDisk: physical_disk.ConfigDefaults,
Printer: printer.ConfigDefaults, Printer: printer.ConfigDefaults,
Process: process.ConfigDefaults, Process: process.ConfigDefaults,
RemoteFx: remote_fx.ConfigDefaults, RemoteFx: remote_fx.ConfigDefaults,
ScheduledTask: scheduled_task.ConfigDefaults, ScheduledTask: scheduled_task.ConfigDefaults,
Service: service.ConfigDefaults, Service: service.ConfigDefaults,
SMB: smb.ConfigDefaults, SMB: smb.ConfigDefaults,
SMBClient: smbclient.ConfigDefaults, SMBClient: smbclient.ConfigDefaults,
SMTP: smtp.ConfigDefaults, SMTP: smtp.ConfigDefaults,
System: system.ConfigDefaults, System: system.ConfigDefaults,
TCP: tcp.ConfigDefaults, TCP: tcp.ConfigDefaults,
TerminalServices: terminal_services.ConfigDefaults, TerminalServices: terminal_services.ConfigDefaults,
Textfile: textfile.ConfigDefaults, Textfile: textfile.ConfigDefaults,
ThermalZone: thermalzone.ConfigDefaults, ThermalZone: thermalzone.ConfigDefaults,
Time: time.ConfigDefaults, Time: time.ConfigDefaults,
UDP: udp.ConfigDefaults, UDP: udp.ConfigDefaults,
Update: update.ConfigDefaults, Update: update.ConfigDefaults,
Vmware: vmware.ConfigDefaults, Vmware: vmware.ConfigDefaults,
} }

View File

@@ -49,7 +49,7 @@ import (
"github.com/prometheus-community/windows_exporter/internal/collector/nps" "github.com/prometheus-community/windows_exporter/internal/collector/nps"
"github.com/prometheus-community/windows_exporter/internal/collector/os" "github.com/prometheus-community/windows_exporter/internal/collector/os"
"github.com/prometheus-community/windows_exporter/internal/collector/pagefile" "github.com/prometheus-community/windows_exporter/internal/collector/pagefile"
"github.com/prometheus-community/windows_exporter/internal/collector/perfdata" "github.com/prometheus-community/windows_exporter/internal/collector/performancecounter"
"github.com/prometheus-community/windows_exporter/internal/collector/physical_disk" "github.com/prometheus-community/windows_exporter/internal/collector/physical_disk"
"github.com/prometheus-community/windows_exporter/internal/collector/printer" "github.com/prometheus-community/windows_exporter/internal/collector/printer"
"github.com/prometheus-community/windows_exporter/internal/collector/process" "github.com/prometheus-community/windows_exporter/internal/collector/process"
@@ -78,54 +78,54 @@ func NewBuilderWithFlags[C Collector](fn BuilderWithFlags[C]) BuilderWithFlags[C
//nolint:gochecknoglobals //nolint:gochecknoglobals
var BuildersWithFlags = map[string]BuilderWithFlags[Collector]{ var BuildersWithFlags = map[string]BuilderWithFlags[Collector]{
ad.Name: NewBuilderWithFlags(ad.NewWithFlags), ad.Name: NewBuilderWithFlags(ad.NewWithFlags),
adcs.Name: NewBuilderWithFlags(adcs.NewWithFlags), adcs.Name: NewBuilderWithFlags(adcs.NewWithFlags),
adfs.Name: NewBuilderWithFlags(adfs.NewWithFlags), adfs.Name: NewBuilderWithFlags(adfs.NewWithFlags),
cache.Name: NewBuilderWithFlags(cache.NewWithFlags), cache.Name: NewBuilderWithFlags(cache.NewWithFlags),
container.Name: NewBuilderWithFlags(container.NewWithFlags), container.Name: NewBuilderWithFlags(container.NewWithFlags),
cpu.Name: NewBuilderWithFlags(cpu.NewWithFlags), cpu.Name: NewBuilderWithFlags(cpu.NewWithFlags),
cpu_info.Name: NewBuilderWithFlags(cpu_info.NewWithFlags), cpu_info.Name: NewBuilderWithFlags(cpu_info.NewWithFlags),
cs.Name: NewBuilderWithFlags(cs.NewWithFlags), cs.Name: NewBuilderWithFlags(cs.NewWithFlags),
dfsr.Name: NewBuilderWithFlags(dfsr.NewWithFlags), dfsr.Name: NewBuilderWithFlags(dfsr.NewWithFlags),
dhcp.Name: NewBuilderWithFlags(dhcp.NewWithFlags), dhcp.Name: NewBuilderWithFlags(dhcp.NewWithFlags),
diskdrive.Name: NewBuilderWithFlags(diskdrive.NewWithFlags), diskdrive.Name: NewBuilderWithFlags(diskdrive.NewWithFlags),
dns.Name: NewBuilderWithFlags(dns.NewWithFlags), dns.Name: NewBuilderWithFlags(dns.NewWithFlags),
exchange.Name: NewBuilderWithFlags(exchange.NewWithFlags), exchange.Name: NewBuilderWithFlags(exchange.NewWithFlags),
filetime.Name: NewBuilderWithFlags(filetime.NewWithFlags), filetime.Name: NewBuilderWithFlags(filetime.NewWithFlags),
fsrmquota.Name: NewBuilderWithFlags(fsrmquota.NewWithFlags), fsrmquota.Name: NewBuilderWithFlags(fsrmquota.NewWithFlags),
hyperv.Name: NewBuilderWithFlags(hyperv.NewWithFlags), hyperv.Name: NewBuilderWithFlags(hyperv.NewWithFlags),
iis.Name: NewBuilderWithFlags(iis.NewWithFlags), iis.Name: NewBuilderWithFlags(iis.NewWithFlags),
license.Name: NewBuilderWithFlags(license.NewWithFlags), license.Name: NewBuilderWithFlags(license.NewWithFlags),
logical_disk.Name: NewBuilderWithFlags(logical_disk.NewWithFlags), logical_disk.Name: NewBuilderWithFlags(logical_disk.NewWithFlags),
logon.Name: NewBuilderWithFlags(logon.NewWithFlags), logon.Name: NewBuilderWithFlags(logon.NewWithFlags),
memory.Name: NewBuilderWithFlags(memory.NewWithFlags), memory.Name: NewBuilderWithFlags(memory.NewWithFlags),
mscluster.Name: NewBuilderWithFlags(mscluster.NewWithFlags), mscluster.Name: NewBuilderWithFlags(mscluster.NewWithFlags),
msmq.Name: NewBuilderWithFlags(msmq.NewWithFlags), msmq.Name: NewBuilderWithFlags(msmq.NewWithFlags),
mssql.Name: NewBuilderWithFlags(mssql.NewWithFlags), mssql.Name: NewBuilderWithFlags(mssql.NewWithFlags),
net.Name: NewBuilderWithFlags(net.NewWithFlags), net.Name: NewBuilderWithFlags(net.NewWithFlags),
netframework.Name: NewBuilderWithFlags(netframework.NewWithFlags), netframework.Name: NewBuilderWithFlags(netframework.NewWithFlags),
nps.Name: NewBuilderWithFlags(nps.NewWithFlags), nps.Name: NewBuilderWithFlags(nps.NewWithFlags),
os.Name: NewBuilderWithFlags(os.NewWithFlags), os.Name: NewBuilderWithFlags(os.NewWithFlags),
pagefile.Name: NewBuilderWithFlags(pagefile.NewWithFlags), pagefile.Name: NewBuilderWithFlags(pagefile.NewWithFlags),
perfdata.Name: NewBuilderWithFlags(perfdata.NewWithFlags), performancecounter.Name: NewBuilderWithFlags(performancecounter.NewWithFlags),
physical_disk.Name: NewBuilderWithFlags(physical_disk.NewWithFlags), physical_disk.Name: NewBuilderWithFlags(physical_disk.NewWithFlags),
printer.Name: NewBuilderWithFlags(printer.NewWithFlags), printer.Name: NewBuilderWithFlags(printer.NewWithFlags),
process.Name: NewBuilderWithFlags(process.NewWithFlags), process.Name: NewBuilderWithFlags(process.NewWithFlags),
remote_fx.Name: NewBuilderWithFlags(remote_fx.NewWithFlags), remote_fx.Name: NewBuilderWithFlags(remote_fx.NewWithFlags),
scheduled_task.Name: NewBuilderWithFlags(scheduled_task.NewWithFlags), scheduled_task.Name: NewBuilderWithFlags(scheduled_task.NewWithFlags),
service.Name: NewBuilderWithFlags(service.NewWithFlags), service.Name: NewBuilderWithFlags(service.NewWithFlags),
smb.Name: NewBuilderWithFlags(smb.NewWithFlags), smb.Name: NewBuilderWithFlags(smb.NewWithFlags),
smbclient.Name: NewBuilderWithFlags(smbclient.NewWithFlags), smbclient.Name: NewBuilderWithFlags(smbclient.NewWithFlags),
smtp.Name: NewBuilderWithFlags(smtp.NewWithFlags), smtp.Name: NewBuilderWithFlags(smtp.NewWithFlags),
system.Name: NewBuilderWithFlags(system.NewWithFlags), system.Name: NewBuilderWithFlags(system.NewWithFlags),
tcp.Name: NewBuilderWithFlags(tcp.NewWithFlags), tcp.Name: NewBuilderWithFlags(tcp.NewWithFlags),
terminal_services.Name: NewBuilderWithFlags(terminal_services.NewWithFlags), terminal_services.Name: NewBuilderWithFlags(terminal_services.NewWithFlags),
textfile.Name: NewBuilderWithFlags(textfile.NewWithFlags), textfile.Name: NewBuilderWithFlags(textfile.NewWithFlags),
thermalzone.Name: NewBuilderWithFlags(thermalzone.NewWithFlags), thermalzone.Name: NewBuilderWithFlags(thermalzone.NewWithFlags),
time.Name: NewBuilderWithFlags(time.NewWithFlags), time.Name: NewBuilderWithFlags(time.NewWithFlags),
udp.Name: NewBuilderWithFlags(udp.NewWithFlags), udp.Name: NewBuilderWithFlags(udp.NewWithFlags),
update.Name: NewBuilderWithFlags(update.NewWithFlags), update.Name: NewBuilderWithFlags(update.NewWithFlags),
vmware.Name: NewBuilderWithFlags(vmware.NewWithFlags), vmware.Name: NewBuilderWithFlags(vmware.NewWithFlags),
} }
func Available() []string { func Available() []string {

View File

@@ -123,7 +123,7 @@ windows_exporter_collector_success{collector="memory"} 1
windows_exporter_collector_success{collector="net"} 1 windows_exporter_collector_success{collector="net"} 1
windows_exporter_collector_success{collector="os"} 1 windows_exporter_collector_success{collector="os"} 1
windows_exporter_collector_success{collector="pagefile"} 1 windows_exporter_collector_success{collector="pagefile"} 1
windows_exporter_collector_success{collector="perfdata"} 1 windows_exporter_collector_success{collector="performancecounter"} 1
windows_exporter_collector_success{collector="physical_disk"} 1 windows_exporter_collector_success{collector="physical_disk"} 1
windows_exporter_collector_success{collector="printer"} 1 windows_exporter_collector_success{collector="printer"} 1
windows_exporter_collector_success{collector="process"} 1 windows_exporter_collector_success{collector="process"} 1
@@ -146,7 +146,7 @@ windows_exporter_collector_timeout{collector="memory"} 0
windows_exporter_collector_timeout{collector="net"} 0 windows_exporter_collector_timeout{collector="net"} 0
windows_exporter_collector_timeout{collector="os"} 0 windows_exporter_collector_timeout{collector="os"} 0
windows_exporter_collector_timeout{collector="pagefile"} 0 windows_exporter_collector_timeout{collector="pagefile"} 0
windows_exporter_collector_timeout{collector="perfdata"} 0 windows_exporter_collector_timeout{collector="performancecounter"} 0
windows_exporter_collector_timeout{collector="physical_disk"} 0 windows_exporter_collector_timeout{collector="physical_disk"} 0
windows_exporter_collector_timeout{collector="printer"} 0 windows_exporter_collector_timeout{collector="printer"} 0
windows_exporter_collector_timeout{collector="process"} 0 windows_exporter_collector_timeout{collector="process"} 0
@@ -319,12 +319,10 @@ windows_exporter_collector_timeout{collector="udp"} 0
# TYPE windows_pagefile_free_bytes gauge # TYPE windows_pagefile_free_bytes gauge
# HELP windows_pagefile_limit_bytes Number of bytes that can be stored in the operating system paging files. 0 (zero) indicates that there are no paging files # HELP windows_pagefile_limit_bytes Number of bytes that can be stored in the operating system paging files. 0 (zero) indicates that there are no paging files
# TYPE windows_pagefile_limit_bytes gauge # TYPE windows_pagefile_limit_bytes gauge
# HELP windows_perfdata_memory_cache_faults_sec Performance data for \\Memory\\Cache Faults/sec # HELP windows_performancecounter_memory_cache_faults_sec windows_exporter: custom Performance Counter metric
# TYPE windows_perfdata_memory_cache_faults_sec counter # TYPE windows_performancecounter_memory_cache_faults_sec counter
# HELP windows_perfdata_processor_information__privileged_time Performance data for \\Processor Information\\% Privileged Time # HELP windows_performancecounter_processor_information_processor_time windows_exporter: custom Performance Counter metric
# TYPE windows_perfdata_processor_information__privileged_time counter # TYPE windows_performancecounter_processor_information_processor_time counter
# HELP windows_perfdata_processor_information__processor_time Performance data for \\Processor Information\\% Processor Time
# TYPE windows_perfdata_processor_information__processor_time counter
# HELP windows_physical_disk_idle_seconds_total Seconds that the disk was idle (PhysicalDisk.PercentIdleTime) # HELP windows_physical_disk_idle_seconds_total Seconds that the disk was idle (PhysicalDisk.PercentIdleTime)
# TYPE windows_physical_disk_idle_seconds_total counter # TYPE windows_physical_disk_idle_seconds_total counter
# HELP windows_physical_disk_read_bytes_total The number of bytes transferred from the disk during read operations (PhysicalDisk.DiskReadBytesPerSec) # HELP windows_physical_disk_read_bytes_total The number of bytes transferred from the disk during read operations (PhysicalDisk.DiskReadBytesPerSec)

View File

@@ -18,15 +18,15 @@ mkdir $textfile_dir | Out-Null
Copy-Item 'e2e-textfile.prom' -Destination "$($textfile_dir)/e2e-textfile.prom" Copy-Item 'e2e-textfile.prom' -Destination "$($textfile_dir)/e2e-textfile.prom"
# Omit dynamic collector information that will change after each run # Omit dynamic collector information that will change after each run
$skip_re = "^(go_|windows_exporter_build_info|windows_exporter_collector_duration_seconds|windows_exporter_scrape_duration_seconds|process_|windows_textfile_mtime_seconds|windows_cpu|windows_cs|windows_cache|windows_logon|windows_pagefile|windows_logical_disk|windows_physical_disk|windows_memory|windows_net|windows_os|windows_process|windows_service_process|windows_printer|windows_udp|windows_tcp|windows_system|windows_time|windows_session|windows_perfdata|windows_textfile_mtime_seconds)" $skip_re = "^(go_|windows_exporter_build_info|windows_exporter_collector_duration_seconds|windows_exporter_scrape_duration_seconds|process_|windows_textfile_mtime_seconds|windows_cpu|windows_cs|windows_cache|windows_logon|windows_pagefile|windows_logical_disk|windows_physical_disk|windows_memory|windows_net|windows_os|windows_process|windows_service_process|windows_printer|windows_udp|windows_tcp|windows_system|windows_time|windows_session|windows_performancecounter|windows_performancecounter|windows_textfile_mtime_seconds)"
# Start process in background, awaiting HTTP requests. # Start process in background, awaiting HTTP requests.
# Use default collectors, port and address: http://localhost:9182/metrics # Use default collectors, port and address: http://localhost:9182/metrics
$exporter_proc = Start-Process ` $exporter_proc = Start-Process `
-PassThru ` -PassThru `
-FilePath ..\windows_exporter.exe ` -FilePath ..\windows_exporter.exe `
-ArgumentList "--log.level=debug","--web.disable-exporter-metrics","--collectors.enabled=[defaults],cpu_info,textfile,process,pagefile,perfdata,scheduled_task,tcp,udp,time,system,service,logical_disk,printer,os,net,memory,logon,cache","--collector.process.include=explorer.exe","--collector.scheduled_task.include=.*GAEvents","--collector.service.include=Themes","--collector.textfile.directories=$($textfile_dir)",@" -ArgumentList "--log.level=debug","--web.disable-exporter-metrics","--collectors.enabled=[defaults],cpu_info,textfile,process,pagefile,performancecounter,scheduled_task,tcp,udp,time,system,service,logical_disk,printer,os,net,memory,logon,cache","--collector.process.include=explorer.exe","--collector.scheduled_task.include=.*GAEvents","--collector.service.include=Themes","--collector.textfile.directories=$($textfile_dir)",@"
--collector.perfdata.objects="[{\"object\":\"Processor Information\",\"instance_label\":\"core\",\"instances\":[\"*\"],\"counters\":{\"% Processor Time\":{},\"% Privileged Time\":{}}},{\"object\":\"Memory\",\"counters\":{\"Cache Faults/sec\":{\"type\":\"counter\"}}}]" --collector.performancecounter.objects="[{\"object\":\"Processor Information\",\"instances\":[\"*\"],\"instance_label\":\"core\",\"counters\":[{\"name\":\"% Processor Time\",\"metric\":\"windows_performancecounter_processor_information_processor_time\",\"labels\":{\"state\":\"active\"}},{\"name\":\"% Idle Time\",\"metric\":\"windows_performancecounter_processor_information_processor_time\",\"labels\":{\"state\":\"idle\"}}]},{\"object\":\"Memory\",\"counters\":[{\"name\":\"Cache Faults/sec\",\"type\":\"counter\"}]}]"
"@ ` "@ `
-WindowStyle Hidden ` -WindowStyle Hidden `
-RedirectStandardOutput "$($temp_dir)/windows_exporter.log" ` -RedirectStandardOutput "$($temp_dir)/windows_exporter.log" `