Refactor collector package configuration

Add a new pattern to allow moving the flag handling out of the collector
package and into a separate package. This allows collector package users
to create their own config or flag handling.

Signed-off-by: Ben Kochie <superq@gmail.com>
This commit is contained in:
Ben Kochie 2023-07-21 15:02:36 +02:00
parent 8fb4f78ce5
commit 9c6ff78e74
No known key found for this signature in database
GPG key ID: C646B23C9E3245F1
101 changed files with 181 additions and 126 deletions

View file

@ -18,17 +18,12 @@ package collector
import ( import (
"fmt" "fmt"
"github.com/alecthomas/kingpin/v2"
"github.com/go-kit/log" "github.com/go-kit/log"
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/procfs" "github.com/prometheus/procfs"
) )
var (
arpDeviceInclude = kingpin.Flag("collector.arp.device-include", "Regexp of arp devices to include (mutually exclusive to device-exclude).").String()
arpDeviceExclude = kingpin.Flag("collector.arp.device-exclude", "Regexp of arp devices to exclude (mutually exclusive to device-include).").String()
)
type arpCollector struct { type arpCollector struct {
fs procfs.FS fs procfs.FS
deviceFilter deviceFilter deviceFilter deviceFilter
@ -41,7 +36,7 @@ func init() {
} }
// NewARPCollector returns a new Collector exposing ARP stats. // NewARPCollector returns a new Collector exposing ARP stats.
func NewARPCollector(logger log.Logger) (Collector, error) { func NewARPCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := procfs.NewFS(*procPath) fs, err := procfs.NewFS(*procPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open procfs: %w", err) return nil, fmt.Errorf("failed to open procfs: %w", err)
@ -49,7 +44,7 @@ func NewARPCollector(logger log.Logger) (Collector, error) {
return &arpCollector{ return &arpCollector{
fs: fs, fs: fs,
deviceFilter: newDeviceFilter(*arpDeviceExclude, *arpDeviceInclude), deviceFilter: newDeviceFilter(*config.Arp.DeviceExclude, *config.Arp.DeviceInclude),
entries: prometheus.NewDesc( entries: prometheus.NewDesc(
prometheus.BuildFQName(namespace, "arp", "entries"), prometheus.BuildFQName(namespace, "arp", "entries"),
"ARP entries by device", "ARP entries by device",

View file

@ -41,7 +41,7 @@ type bcacheCollector struct {
// NewBcacheCollector returns a newly allocated bcacheCollector. // NewBcacheCollector returns a newly allocated bcacheCollector.
// It exposes a number of Linux bcache statistics. // It exposes a number of Linux bcache statistics.
func NewBcacheCollector(logger log.Logger) (Collector, error) { func NewBcacheCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := bcache.NewFS(*sysPath) fs, err := bcache.NewFS(*sysPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open sysfs: %w", err) return nil, fmt.Errorf("failed to open sysfs: %w", err)

View file

@ -39,7 +39,7 @@ func init() {
// NewBondingCollector returns a newly allocated bondingCollector. // NewBondingCollector returns a newly allocated bondingCollector.
// It exposes the number of configured and active slave of linux bonding interfaces. // It exposes the number of configured and active slave of linux bonding interfaces.
func NewBondingCollector(logger log.Logger) (Collector, error) { func NewBondingCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &bondingCollector{ return &bondingCollector{
slaves: typedDesc{prometheus.NewDesc( slaves: typedDesc{prometheus.NewDesc(
prometheus.BuildFQName(namespace, "bonding", "slaves"), prometheus.BuildFQName(namespace, "bonding", "slaves"),

View file

@ -32,7 +32,7 @@ func init() {
} }
// newBootTimeCollector returns a new Collector exposing system boot time on BSD systems. // newBootTimeCollector returns a new Collector exposing system boot time on BSD systems.
func newBootTimeCollector(logger log.Logger) (Collector, error) { func newBootTimeCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &bootTimeCollector{ return &bootTimeCollector{
logger: logger, logger: logger,
}, nil }, nil

View file

@ -31,7 +31,7 @@ func init() {
registerCollector("boottime", defaultEnabled, newBootTimeCollector) registerCollector("boottime", defaultEnabled, newBootTimeCollector)
} }
func newBootTimeCollector(logger log.Logger) (Collector, error) { func newBootTimeCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &bootTimeCollector{ return &bootTimeCollector{
boottime: typedDesc{ boottime: typedDesc{
prometheus.NewDesc( prometheus.NewDesc(

View file

@ -40,7 +40,7 @@ func init() {
} }
// NewBtrfsCollector returns a new Collector exposing Btrfs statistics. // NewBtrfsCollector returns a new Collector exposing Btrfs statistics.
func NewBtrfsCollector(logger log.Logger) (Collector, error) { func NewBtrfsCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := btrfs.NewFS(*sysPath) fs, err := btrfs.NewFS(*sysPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open sysfs: %w", err) return nil, fmt.Errorf("failed to open sysfs: %w", err)

View file

@ -41,7 +41,7 @@ func init() {
} }
// NewBuddyinfoCollector returns a new Collector exposing buddyinfo stats. // NewBuddyinfoCollector returns a new Collector exposing buddyinfo stats.
func NewBuddyinfoCollector(logger log.Logger) (Collector, error) { func NewBuddyinfoCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
desc := prometheus.NewDesc( desc := prometheus.NewDesc(
prometheus.BuildFQName(namespace, buddyInfoSubsystem, "blocks"), prometheus.BuildFQName(namespace, buddyInfoSubsystem, "blocks"),
"Count of free blocks according to size.", "Count of free blocks according to size.",

View file

@ -38,7 +38,7 @@ func init() {
} }
// NewCgroupSummaryCollector returns a new Collector exposing a summary of cgroups. // NewCgroupSummaryCollector returns a new Collector exposing a summary of cgroups.
func NewCgroupSummaryCollector(logger log.Logger) (Collector, error) { func NewCgroupSummaryCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := procfs.NewFS(*procPath) fs, err := procfs.NewFS(*procPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open procfs: %w", err) return nil, fmt.Errorf("failed to open procfs: %w", err)

View file

@ -50,14 +50,14 @@ const (
) )
var ( var (
factories = make(map[string]func(logger log.Logger) (Collector, error)) factories = make(map[string]func(config NodeCollectorConfig, logger log.Logger) (Collector, error))
initiatedCollectorsMtx = sync.Mutex{} initiatedCollectorsMtx = sync.Mutex{}
initiatedCollectors = make(map[string]Collector) initiatedCollectors = make(map[string]Collector)
collectorState = make(map[string]*bool) collectorState = make(map[string]*bool)
forcedCollectors = map[string]bool{} // collectors which have been explicitly enabled or disabled forcedCollectors = map[string]bool{} // collectors which have been explicitly enabled or disabled
) )
func registerCollector(collector string, isDefaultEnabled bool, factory func(logger log.Logger) (Collector, error)) { func registerCollector(collector string, isDefaultEnabled bool, factory func(config NodeCollectorConfig, logger log.Logger) (Collector, error)) {
var helpDefaultState string var helpDefaultState string
if isDefaultEnabled { if isDefaultEnabled {
helpDefaultState = "enabled" helpDefaultState = "enabled"
@ -104,7 +104,7 @@ func collectorFlagAction(collector string) func(ctx *kingpin.ParseContext) error
} }
// NewNodeCollector creates a new NodeCollector. // NewNodeCollector creates a new NodeCollector.
func NewNodeCollector(logger log.Logger, filters ...string) (*NodeCollector, error) { func NewNodeCollector(config NodeCollectorConfig, logger log.Logger, filters ...string) (*NodeCollector, error) {
f := make(map[string]bool) f := make(map[string]bool)
for _, filter := range filters { for _, filter := range filters {
enabled, exist := collectorState[filter] enabled, exist := collectorState[filter]
@ -126,7 +126,7 @@ func NewNodeCollector(logger log.Logger, filters ...string) (*NodeCollector, err
if collector, ok := initiatedCollectors[key]; ok { if collector, ok := initiatedCollectors[key]; ok {
collectors[key] = collector collectors[key] = collector
} else { } else {
collector, err := factories[key](log.With(logger, "collector", key)) collector, err := factories[key](config, log.With(logger, "collector", key))
if err != nil { if err != nil {
return nil, err return nil, err
} }

26
collector/config.go Normal file
View file

@ -0,0 +1,26 @@
// Copyright 2023 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 !noarp
// +build !noarp
package collector
type NodeCollectorConfig struct {
Arp ArpConfig
}
type ArpConfig struct {
DeviceInclude *string
DeviceExclude *string
}

View file

@ -57,7 +57,7 @@ func init() {
} }
// NewConntrackCollector returns a new Collector exposing conntrack stats. // NewConntrackCollector returns a new Collector exposing conntrack stats.
func NewConntrackCollector(logger log.Logger) (Collector, error) { func NewConntrackCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &conntrackCollector{ return &conntrackCollector{
current: prometheus.NewDesc( current: prometheus.NewDesc(
prometheus.BuildFQName(namespace, "", "nf_conntrack_entries"), prometheus.BuildFQName(namespace, "", "nf_conntrack_entries"),

View file

@ -61,7 +61,7 @@ func init() {
} }
// NewCPUCollector returns a new Collector exposing CPU stats. // NewCPUCollector returns a new Collector exposing CPU stats.
func NewCPUCollector(logger log.Logger) (Collector, error) { func NewCPUCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &statCollector{ return &statCollector{
cpu: nodeCPUSecondsDesc, cpu: nodeCPUSecondsDesc,
logger: logger, logger: logger,

View file

@ -86,7 +86,7 @@ func init() {
} }
// NewStatCollector returns a new Collector exposing CPU stats. // NewStatCollector returns a new Collector exposing CPU stats.
func NewStatCollector(logger log.Logger) (Collector, error) { func NewStatCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &statCollector{ return &statCollector{
cpu: nodeCPUSecondsDesc, cpu: nodeCPUSecondsDesc,
logger: logger, logger: logger,

View file

@ -93,7 +93,7 @@ func init() {
} }
// NewStatCollector returns a new Collector exposing CPU stats. // NewStatCollector returns a new Collector exposing CPU stats.
func NewStatCollector(logger log.Logger) (Collector, error) { func NewStatCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &statCollector{ return &statCollector{
cpu: typedDesc{nodeCPUSecondsDesc, prometheus.CounterValue}, cpu: typedDesc{nodeCPUSecondsDesc, prometheus.CounterValue},
temp: typedDesc{prometheus.NewDesc( temp: typedDesc{prometheus.NewDesc(

View file

@ -69,7 +69,7 @@ func init() {
} }
// NewCPUCollector returns a new Collector exposing kernel/system statistics. // NewCPUCollector returns a new Collector exposing kernel/system statistics.
func NewCPUCollector(logger log.Logger) (Collector, error) { func NewCPUCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := procfs.NewFS(*procPath) fs, err := procfs.NewFS(*procPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open procfs: %w", err) return nil, fmt.Errorf("failed to open procfs: %w", err)

View file

@ -222,7 +222,7 @@ func init() {
} }
// NewStatCollector returns a new Collector exposing CPU stats. // NewStatCollector returns a new Collector exposing CPU stats.
func NewStatCollector(logger log.Logger) (Collector, error) { func NewStatCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &statCollector{ return &statCollector{
cpu: typedDesc{nodeCPUSecondsDesc, prometheus.CounterValue}, cpu: typedDesc{nodeCPUSecondsDesc, prometheus.CounterValue},
temp: typedDesc{prometheus.NewDesc( temp: typedDesc{prometheus.NewDesc(

View file

@ -52,7 +52,7 @@ func init() {
registerCollector("cpu", defaultEnabled, NewCPUCollector) registerCollector("cpu", defaultEnabled, NewCPUCollector)
} }
func NewCPUCollector(logger log.Logger) (Collector, error) { func NewCPUCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &cpuCollector{ return &cpuCollector{
cpu: typedDesc{nodeCPUSecondsDesc, prometheus.CounterValue}, cpu: typedDesc{nodeCPUSecondsDesc, prometheus.CounterValue},
logger: logger, logger: logger,

View file

@ -36,7 +36,7 @@ func init() {
registerCollector("cpu", defaultEnabled, NewCpuCollector) registerCollector("cpu", defaultEnabled, NewCpuCollector)
} }
func NewCpuCollector(logger log.Logger) (Collector, error) { func NewCpuCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &cpuCollector{ return &cpuCollector{
cpu: typedDesc{nodeCPUSecondsDesc, prometheus.CounterValue}, cpu: typedDesc{nodeCPUSecondsDesc, prometheus.CounterValue},
logger: logger, logger: logger,

View file

@ -40,7 +40,7 @@ func init() {
registerCollector(cpuVulerabilitiesCollector, defaultDisabled, NewVulnerabilitySysfsCollector) registerCollector(cpuVulerabilitiesCollector, defaultDisabled, NewVulnerabilitySysfsCollector)
} }
func NewVulnerabilitySysfsCollector(logger log.Logger) (Collector, error) { func NewVulnerabilitySysfsCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &cpuVulnerabilitiesCollector{}, nil return &cpuVulnerabilitiesCollector{}, nil
} }

View file

@ -34,7 +34,7 @@ func init() {
} }
// NewCPUFreqCollector returns a new Collector exposing kernel/system statistics. // NewCPUFreqCollector returns a new Collector exposing kernel/system statistics.
func NewCPUFreqCollector(logger log.Logger) (Collector, error) { func NewCPUFreqCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := sysfs.NewFS(*sysPath) fs, err := sysfs.NewFS(*sysPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open sysfs: %w", err) return nil, fmt.Errorf("failed to open sysfs: %w", err)

View file

@ -36,7 +36,7 @@ func init() {
registerCollector("cpufreq", defaultEnabled, NewCpuFreqCollector) registerCollector("cpufreq", defaultEnabled, NewCpuFreqCollector)
} }
func NewCpuFreqCollector(logger log.Logger) (Collector, error) { func NewCpuFreqCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &cpuFreqCollector{ return &cpuFreqCollector{
logger: logger, logger: logger,
}, nil }, nil

View file

@ -106,7 +106,7 @@ func init() {
} }
// NewDevstatCollector returns a new Collector exposing Device stats. // NewDevstatCollector returns a new Collector exposing Device stats.
func NewDevstatCollector(logger log.Logger) (Collector, error) { func NewDevstatCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &devstatCollector{ return &devstatCollector{
bytesDesc: prometheus.NewDesc( bytesDesc: prometheus.NewDesc(
prometheus.BuildFQName(namespace, devstatSubsystem, "bytes_total"), prometheus.BuildFQName(namespace, devstatSubsystem, "bytes_total"),

View file

@ -51,7 +51,7 @@ func init() {
} }
// NewDevstatCollector returns a new Collector exposing Device stats. // NewDevstatCollector returns a new Collector exposing Device stats.
func NewDevstatCollector(logger log.Logger) (Collector, error) { func NewDevstatCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &devstatCollector{ return &devstatCollector{
devinfo: &C.struct_devinfo{}, devinfo: &C.struct_devinfo{},
bytes: typedDesc{prometheus.NewDesc( bytes: typedDesc{prometheus.NewDesc(

View file

@ -43,7 +43,7 @@ func init() {
} }
// NewDiskstatsCollector returns a new Collector exposing disk device stats. // NewDiskstatsCollector returns a new Collector exposing disk device stats.
func NewDiskstatsCollector(logger log.Logger) (Collector, error) { func NewDiskstatsCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
var diskLabelNames = []string{"device"} var diskLabelNames = []string{"device"}
deviceFilter, err := newDiskstatsDeviceFilter(logger) deviceFilter, err := newDiskstatsDeviceFilter(logger)

View file

@ -95,7 +95,7 @@ func init() {
// NewDiskstatsCollector returns a new Collector exposing disk device stats. // NewDiskstatsCollector returns a new Collector exposing disk device stats.
// Docs from https://www.kernel.org/doc/Documentation/iostats.txt // Docs from https://www.kernel.org/doc/Documentation/iostats.txt
func NewDiskstatsCollector(logger log.Logger) (Collector, error) { func NewDiskstatsCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
var diskLabelNames = []string{"device"} var diskLabelNames = []string{"device"}
fs, err := blockdevice.NewFS(*procPath, *sysPath) fs, err := blockdevice.NewFS(*procPath, *sysPath)
if err != nil { if err != nil {

View file

@ -36,8 +36,8 @@ func (c testDiskStatsCollector) Describe(ch chan<- *prometheus.Desc) {
prometheus.DescribeByCollect(c, ch) prometheus.DescribeByCollect(c, ch)
} }
func NewTestDiskStatsCollector(logger log.Logger) (prometheus.Collector, error) { func NewTestDiskStatsCollector(config NodeCollectorConfig, logger log.Logger) (prometheus.Collector, error) {
dsc, err := NewDiskstatsCollector(logger) dsc, err := NewDiskstatsCollector(config, logger)
if err != nil { if err != nil {
return testDiskStatsCollector{}, err return testDiskStatsCollector{}, err
} }
@ -314,12 +314,13 @@ node_disk_written_bytes_total{device="sr0"} 0
node_disk_written_bytes_total{device="vda"} 1.0938236928e+11 node_disk_written_bytes_total{device="vda"} 1.0938236928e+11
` `
config := NodeCollectorConfig{}
logger := log.NewLogfmtLogger(os.Stderr) logger := log.NewLogfmtLogger(os.Stderr)
collector, err := NewDiskstatsCollector(logger) collector, err := NewDiskstatsCollector(config, logger)
if err != nil { if err != nil {
panic(err) panic(err)
} }
c, err := NewTestDiskStatsCollector(logger) c, err := NewTestDiskStatsCollector(config, logger)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }

View file

@ -49,7 +49,7 @@ func init() {
} }
// NewDiskstatsCollector returns a new Collector exposing disk device stats. // NewDiskstatsCollector returns a new Collector exposing disk device stats.
func NewDiskstatsCollector(logger log.Logger) (Collector, error) { func NewDiskstatsCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
deviceFilter, err := newDiskstatsDeviceFilter(logger) deviceFilter, err := newDiskstatsDeviceFilter(logger)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to parse device filter flags: %w", err) return nil, fmt.Errorf("failed to parse device filter flags: %w", err)

View file

@ -60,7 +60,7 @@ func init() {
} }
// NewDiskstatsCollector returns a new Collector exposing disk device stats. // NewDiskstatsCollector returns a new Collector exposing disk device stats.
func NewDiskstatsCollector(logger log.Logger) (Collector, error) { func NewDiskstatsCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
deviceFilter, err := newDiskstatsDeviceFilter(logger) deviceFilter, err := newDiskstatsDeviceFilter(logger)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to parse device filter flags: %w", err) return nil, fmt.Errorf("failed to parse device filter flags: %w", err)

View file

@ -38,7 +38,7 @@ func init() {
} }
// NewDMICollector returns a new Collector exposing DMI information. // NewDMICollector returns a new Collector exposing DMI information.
func NewDMICollector(logger log.Logger) (Collector, error) { func NewDMICollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := sysfs.NewFS(*sysPath) fs, err := sysfs.NewFS(*sysPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open sysfs: %w", err) return nil, fmt.Errorf("failed to open sysfs: %w", err)

View file

@ -86,7 +86,7 @@ func init() {
registerCollector("drbd", defaultDisabled, newDRBDCollector) registerCollector("drbd", defaultDisabled, newDRBDCollector)
} }
func newDRBDCollector(logger log.Logger) (Collector, error) { func newDRBDCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &drbdCollector{ return &drbdCollector{
numerical: map[string]drbdNumericalMetric{ numerical: map[string]drbdNumericalMetric{
"ns": newDRBDNumericalMetric( "ns": newDRBDNumericalMetric(

View file

@ -46,7 +46,7 @@ func init() {
} }
// NewDrmCollector returns a new Collector exposing /sys/class/drm/card?/device stats. // NewDrmCollector returns a new Collector exposing /sys/class/drm/card?/device stats.
func NewDrmCollector(logger log.Logger) (Collector, error) { func NewDrmCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := sysfs.NewFS(*sysPath) fs, err := sysfs.NewFS(*sysPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open sysfs: %w", err) return nil, fmt.Errorf("failed to open sysfs: %w", err)

View file

@ -47,7 +47,7 @@ func init() {
} }
// NewEdacCollector returns a new Collector exposing edac stats. // NewEdacCollector returns a new Collector exposing edac stats.
func NewEdacCollector(logger log.Logger) (Collector, error) { func NewEdacCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &edacCollector{ return &edacCollector{
ceCount: prometheus.NewDesc( ceCount: prometheus.NewDesc(
prometheus.BuildFQName(namespace, edacSubsystem, "correctable_errors_total"), prometheus.BuildFQName(namespace, edacSubsystem, "correctable_errors_total"),

View file

@ -36,7 +36,7 @@ func init() {
} }
// NewEntropyCollector returns a new Collector exposing entropy stats. // NewEntropyCollector returns a new Collector exposing entropy stats.
func NewEntropyCollector(logger log.Logger) (Collector, error) { func NewEntropyCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := procfs.NewFS(*procPath) fs, err := procfs.NewFS(*procPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open procfs: %w", err) return nil, fmt.Errorf("failed to open procfs: %w", err)

View file

@ -85,7 +85,7 @@ type ethtoolCollector struct {
// makeEthtoolCollector is the internal constructor for EthtoolCollector. // makeEthtoolCollector is the internal constructor for EthtoolCollector.
// This allows NewEthtoolTestCollector to override its .ethtool interface // This allows NewEthtoolTestCollector to override its .ethtool interface
// for testing. // for testing.
func makeEthtoolCollector(logger log.Logger) (*ethtoolCollector, error) { func makeEthtoolCollector(config NodeCollectorConfig, logger log.Logger) (*ethtoolCollector, error) {
fs, err := sysfs.NewFS(*sysPath) fs, err := sysfs.NewFS(*sysPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open sysfs: %w", err) return nil, fmt.Errorf("failed to open sysfs: %w", err)
@ -213,8 +213,8 @@ func buildEthtoolFQName(metric string) string {
} }
// NewEthtoolCollector returns a new Collector exposing ethtool stats. // NewEthtoolCollector returns a new Collector exposing ethtool stats.
func NewEthtoolCollector(logger log.Logger) (Collector, error) { func NewEthtoolCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return makeEthtoolCollector(logger) return makeEthtoolCollector(config, logger)
} }
// updatePortCapabilities generates metrics for autonegotiate, pause and asymmetricpause. // updatePortCapabilities generates metrics for autonegotiate, pause and asymmetricpause.

View file

@ -46,8 +46,8 @@ func (c testEthtoolCollector) Describe(ch chan<- *prometheus.Desc) {
prometheus.DescribeByCollect(c, ch) prometheus.DescribeByCollect(c, ch)
} }
func NewTestEthtoolCollector(logger log.Logger) (prometheus.Collector, error) { func NewTestEthtoolCollector(config NodeCollectorConfig, logger log.Logger) (prometheus.Collector, error) {
dsc, err := NewEthtoolTestCollector(logger) dsc, err := NewEthtoolTestCollector(config, logger)
if err != nil { if err != nil {
return testEthtoolCollector{}, err return testEthtoolCollector{}, err
} }
@ -252,8 +252,8 @@ func (e *EthtoolFixture) LinkInfo(intf string) (ethtool.EthtoolCmd, error) {
return res, err return res, err
} }
func NewEthtoolTestCollector(logger log.Logger) (Collector, error) { func NewEthtoolTestCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
collector, err := makeEthtoolCollector(logger) collector, err := makeEthtoolCollector(config, logger)
collector.ethtool = &EthtoolFixture{ collector.ethtool = &EthtoolFixture{
fixturePath: "fixtures/ethtool/", fixturePath: "fixtures/ethtool/",
} }
@ -367,12 +367,13 @@ node_network_supported_speed_bytes{device="eth0",duplex="half",mode="10baseT"} 1
` `
*sysPath = "fixtures/sys" *sysPath = "fixtures/sys"
config := NodeCollectorConfig{}
logger := log.NewLogfmtLogger(os.Stderr) logger := log.NewLogfmtLogger(os.Stderr)
collector, err := NewEthtoolTestCollector(logger) collector, err := NewEthtoolTestCollector(config, logger)
if err != nil { if err != nil {
panic(err) panic(err)
} }
c, err := NewTestEthtoolCollector(logger) c, err := NewTestEthtoolCollector(config, logger)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }

View file

@ -32,7 +32,7 @@ func init() {
} }
// NewExecCollector returns a new Collector exposing system execution statistics. // NewExecCollector returns a new Collector exposing system execution statistics.
func NewExecCollector(logger log.Logger) (Collector, error) { func NewExecCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
// From sys/vm/vm_meter.c: // From sys/vm/vm_meter.c:
// All are of type CTLTYPE_UINT. // All are of type CTLTYPE_UINT.
// //

View file

@ -40,7 +40,7 @@ func init() {
} }
// NewFibreChannelCollector returns a new Collector exposing FibreChannel stats. // NewFibreChannelCollector returns a new Collector exposing FibreChannel stats.
func NewFibreChannelCollector(logger log.Logger) (Collector, error) { func NewFibreChannelCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
var i fibrechannelCollector var i fibrechannelCollector
var err error var err error

View file

@ -40,7 +40,7 @@ func init() {
} }
// NewFileFDStatCollector returns a new Collector exposing file-nr stats. // NewFileFDStatCollector returns a new Collector exposing file-nr stats.
func NewFileFDStatCollector(logger log.Logger) (Collector, error) { func NewFileFDStatCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &fileFDStatCollector{logger}, nil return &fileFDStatCollector{logger}, nil
} }

View file

@ -88,7 +88,7 @@ func init() {
} }
// NewFilesystemCollector returns a new Collector exposing filesystems stats. // NewFilesystemCollector returns a new Collector exposing filesystems stats.
func NewFilesystemCollector(logger log.Logger) (Collector, error) { func NewFilesystemCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
if *oldMountPointsExcluded != "" { if *oldMountPointsExcluded != "" {
if !mountPointsExcludeSet { if !mountPointsExcludeSet {
level.Warn(logger).Log("msg", "--collector.filesystem.ignored-mount-points is DEPRECATED and will be removed in 2.0.0, use --collector.filesystem.mount-points-exclude") level.Warn(logger).Log("msg", "--collector.filesystem.ignored-mount-points is DEPRECATED and will be removed in 2.0.0, use --collector.filesystem.mount-points-exclude")

View file

@ -57,7 +57,7 @@ type hwMonCollector struct {
// NewHwMonCollector returns a new Collector exposing /sys/class/hwmon stats // NewHwMonCollector returns a new Collector exposing /sys/class/hwmon stats
// (similar to lm-sensors). // (similar to lm-sensors).
func NewHwMonCollector(logger log.Logger) (Collector, error) { func NewHwMonCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &hwMonCollector{ return &hwMonCollector{
logger: logger, logger: logger,

View file

@ -40,7 +40,7 @@ func init() {
} }
// NewInfiniBandCollector returns a new Collector exposing InfiniBand stats. // NewInfiniBandCollector returns a new Collector exposing InfiniBand stats.
func NewInfiniBandCollector(logger log.Logger) (Collector, error) { func NewInfiniBandCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
var i infinibandCollector var i infinibandCollector
var err error var err error

View file

@ -32,7 +32,7 @@ func init() {
} }
// NewInterruptsCollector returns a new Collector exposing interrupts stats. // NewInterruptsCollector returns a new Collector exposing interrupts stats.
func NewInterruptsCollector(logger log.Logger) (Collector, error) { func NewInterruptsCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &interruptsCollector{ return &interruptsCollector{
desc: typedDesc{prometheus.NewDesc( desc: typedDesc{prometheus.NewDesc(
namespace+"_interrupts_total", namespace+"_interrupts_total",

View file

@ -73,11 +73,11 @@ func init() {
// NewIPVSCollector sets up a new collector for IPVS metrics. It accepts the // NewIPVSCollector sets up a new collector for IPVS metrics. It accepts the
// "procfs" config parameter to override the default proc location (/proc). // "procfs" config parameter to override the default proc location (/proc).
func NewIPVSCollector(logger log.Logger) (Collector, error) { func NewIPVSCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return newIPVSCollector(logger) return newIPVSCollector(config, logger)
} }
func newIPVSCollector(logger log.Logger) (*ipvsCollector, error) { func newIPVSCollector(config NodeCollectorConfig, logger log.Logger) (*ipvsCollector, error) {
var ( var (
c ipvsCollector c ipvsCollector
err error err error

View file

@ -111,7 +111,7 @@ func TestIPVSCollector(t *testing.T) {
if _, err := kingpin.CommandLine.Parse(args); err != nil { if _, err := kingpin.CommandLine.Parse(args); err != nil {
t.Fatal(err) t.Fatal(err)
} }
collector, err := newIPVSCollector(log.NewNopLogger()) collector, err := newIPVSCollector(NodeCollectorConfig{}, log.NewNopLogger())
if err != nil { if err != nil {
if test.err == nil { if test.err == nil {
t.Fatal(err) t.Fatal(err)
@ -179,7 +179,7 @@ func TestIPVSCollectorResponse(t *testing.T) {
if _, err := kingpin.CommandLine.Parse(args); err != nil { if _, err := kingpin.CommandLine.Parse(args); err != nil {
t.Fatal(err) t.Fatal(err)
} }
collector, err := NewIPVSCollector(log.NewNopLogger()) collector, err := NewIPVSCollector(NodeCollectorConfig{}, log.NewNopLogger())
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }

View file

@ -50,7 +50,7 @@ func getCanonicalMetricName(filename string) string {
} }
// NewKsmdCollector returns a new Collector exposing kernel/system statistics. // NewKsmdCollector returns a new Collector exposing kernel/system statistics.
func NewKsmdCollector(logger log.Logger) (Collector, error) { func NewKsmdCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
subsystem := "ksmd" subsystem := "ksmd"
descs := make(map[string]*prometheus.Desc) descs := make(map[string]*prometheus.Desc)

View file

@ -33,7 +33,7 @@ func init() {
registerCollector("lnstat", defaultDisabled, NewLnstatCollector) registerCollector("lnstat", defaultDisabled, NewLnstatCollector)
} }
func NewLnstatCollector(logger log.Logger) (Collector, error) { func NewLnstatCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &lnstatCollector{logger}, nil return &lnstatCollector{logger}, nil
} }

View file

@ -35,7 +35,7 @@ func init() {
} }
// NewLoadavgCollector returns a new Collector exposing load average stats. // NewLoadavgCollector returns a new Collector exposing load average stats.
func NewLoadavgCollector(logger log.Logger) (Collector, error) { func NewLoadavgCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &loadavgCollector{ return &loadavgCollector{
metric: []typedDesc{ metric: []typedDesc{
{prometheus.NewDesc(namespace+"_load1", "1m load average.", nil, nil), prometheus.GaugeValue}, {prometheus.NewDesc(namespace+"_load1", "1m load average.", nil, nil), prometheus.GaugeValue},

View file

@ -86,7 +86,7 @@ func init() {
} }
// NewLogindCollector returns a new Collector exposing logind statistics. // NewLogindCollector returns a new Collector exposing logind statistics.
func NewLogindCollector(logger log.Logger) (Collector, error) { func NewLogindCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &logindCollector{logger}, nil return &logindCollector{logger}, nil
} }

View file

@ -36,7 +36,7 @@ func init() {
} }
// NewMdadmCollector returns a new Collector exposing raid statistics. // NewMdadmCollector returns a new Collector exposing raid statistics.
func NewMdadmCollector(logger log.Logger) (Collector, error) { func NewMdadmCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &mdadmCollector{logger}, nil return &mdadmCollector{logger}, nil
} }

View file

@ -39,7 +39,7 @@ func init() {
} }
// NewMeminfoCollector returns a new Collector exposing memory stats. // NewMeminfoCollector returns a new Collector exposing memory stats.
func NewMeminfoCollector(logger log.Logger) (Collector, error) { func NewMeminfoCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &meminfoCollector{logger}, nil return &meminfoCollector{logger}, nil
} }

View file

@ -53,7 +53,7 @@ func init() {
} }
// NewMeminfoNumaCollector returns a new Collector exposing memory stats. // NewMeminfoNumaCollector returns a new Collector exposing memory stats.
func NewMeminfoNumaCollector(logger log.Logger) (Collector, error) { func NewMeminfoNumaCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &meminfoNumaCollector{ return &meminfoNumaCollector{
metricDescs: map[string]*prometheus.Desc{}, metricDescs: map[string]*prometheus.Desc{},
logger: logger, logger: logger,

View file

@ -41,7 +41,7 @@ func init() {
} }
// NewMemoryCollector returns a new Collector exposing memory stats. // NewMemoryCollector returns a new Collector exposing memory stats.
func NewMemoryCollector(logger log.Logger) (Collector, error) { func NewMemoryCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
tmp32, err := unix.SysctlUint32("vm.stats.vm.v_page_size") tmp32, err := unix.SysctlUint32("vm.stats.vm.v_page_size")
if err != nil { if err != nil {
return nil, fmt.Errorf("sysctl(vm.stats.vm.v_page_size) failed: %w", err) return nil, fmt.Errorf("sysctl(vm.stats.vm.v_page_size) failed: %w", err)

View file

@ -111,7 +111,7 @@ func init() {
} }
// NewMountStatsCollector returns a new Collector exposing NFS statistics. // NewMountStatsCollector returns a new Collector exposing NFS statistics.
func NewMountStatsCollector(logger log.Logger) (Collector, error) { func NewMountStatsCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := procfs.NewFS(*procPath) fs, err := procfs.NewFS(*procPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open procfs: %w", err) return nil, fmt.Errorf("failed to open procfs: %w", err)

View file

@ -49,7 +49,7 @@ func init() {
} }
// NewNetClassCollector returns a new Collector exposing network class stats. // NewNetClassCollector returns a new Collector exposing network class stats.
func NewNetClassCollector(logger log.Logger) (Collector, error) { func NewNetClassCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := sysfs.NewFS(*sysPath) fs, err := sysfs.NewFS(*sysPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open sysfs: %w", err) return nil, fmt.Errorf("failed to open sysfs: %w", err)

View file

@ -54,7 +54,7 @@ func init() {
} }
// NewNetDevCollector returns a new Collector exposing network device stats. // NewNetDevCollector returns a new Collector exposing network device stats.
func NewNetDevCollector(logger log.Logger) (Collector, error) { func NewNetDevCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
if *oldNetdevDeviceInclude != "" { if *oldNetdevDeviceInclude != "" {
if *netdevDeviceInclude == "" { if *netdevDeviceInclude == "" {
level.Warn(logger).Log("msg", "--collector.netdev.device-whitelist is DEPRECATED and will be removed in 2.0.0, use --collector.netdev.device-include") level.Warn(logger).Log("msg", "--collector.netdev.device-whitelist is DEPRECATED and will be removed in 2.0.0, use --collector.netdev.device-include")

View file

@ -36,7 +36,7 @@ func init() {
registerCollector("netisr", defaultEnabled, NewNetisrCollector) registerCollector("netisr", defaultEnabled, NewNetisrCollector)
} }
func NewNetisrCollector(logger log.Logger) (Collector, error) { func NewNetisrCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &netisrCollector{ return &netisrCollector{
sysctls: []bsdSysctl{ sysctls: []bsdSysctl{
{ {

View file

@ -50,7 +50,7 @@ func init() {
// NewNetStatCollector takes and returns // NewNetStatCollector takes and returns
// a new Collector exposing network stats. // a new Collector exposing network stats.
func NewNetStatCollector(logger log.Logger) (Collector, error) { func NewNetStatCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
pattern := regexp.MustCompile(*netStatFields) pattern := regexp.MustCompile(*netStatFields)
return &netStatCollector{ return &netStatCollector{
fieldPattern: pattern, fieldPattern: pattern,

View file

@ -38,7 +38,7 @@ func init() {
} }
// NewNetworkRouteCollector returns a new Collector exposing systemd statistics. // NewNetworkRouteCollector returns a new Collector exposing systemd statistics.
func NewNetworkRouteCollector(logger log.Logger) (Collector, error) { func NewNetworkRouteCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
const subsystem = "network" const subsystem = "network"
routeInfoDesc := prometheus.NewDesc( routeInfoDesc := prometheus.NewDesc(

View file

@ -48,7 +48,7 @@ func init() {
} }
// NewNfsCollector returns a new Collector exposing NFS statistics. // NewNfsCollector returns a new Collector exposing NFS statistics.
func NewNfsCollector(logger log.Logger) (Collector, error) { func NewNfsCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := nfs.NewFS(*procPath) fs, err := nfs.NewFS(*procPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open procfs: %w", err) return nil, fmt.Errorf("failed to open procfs: %w", err)

View file

@ -44,7 +44,7 @@ const (
) )
// NewNFSdCollector returns a new Collector exposing /proc/net/rpc/nfsd statistics. // NewNFSdCollector returns a new Collector exposing /proc/net/rpc/nfsd statistics.
func NewNFSdCollector(logger log.Logger) (Collector, error) { func NewNFSdCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := nfs.NewFS(*procPath) fs, err := nfs.NewFS(*procPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open procfs: %w", err) return nil, fmt.Errorf("failed to open procfs: %w", err)

View file

@ -62,7 +62,7 @@ func init() {
// Default definition of "local" is: // Default definition of "local" is:
// - collector.ntp.server address is a loopback address (or collector.ntp.server-is-mine flag is turned on) // - collector.ntp.server address is a loopback address (or collector.ntp.server-is-mine flag is turned on)
// - the server is reachable with outgoin IP_TTL = 1 // - the server is reachable with outgoin IP_TTL = 1
func NewNtpCollector(logger log.Logger) (Collector, error) { func NewNtpCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
ipaddr := net.ParseIP(*ntpServer) ipaddr := net.ParseIP(*ntpServer)
if !*ntpServerIsLocal && (ipaddr == nil || !ipaddr.IsLoopback()) { if !*ntpServerIsLocal && (ipaddr == nil || !ipaddr.IsLoopback()) {
return nil, fmt.Errorf("only IP address of local NTP server is valid for --collector.ntp.server") return nil, fmt.Errorf("only IP address of local NTP server is valid for --collector.ntp.server")

View file

@ -37,7 +37,7 @@ func init() {
} }
// NewNVMeCollector returns a new Collector exposing NVMe stats. // NewNVMeCollector returns a new Collector exposing NVMe stats.
func NewNVMeCollector(logger log.Logger) (Collector, error) { func NewNVMeCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := sysfs.NewFS(*sysPath) fs, err := sysfs.NewFS(*sysPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open sysfs: %w", err) return nil, fmt.Errorf("failed to open sysfs: %w", err)

View file

@ -81,7 +81,7 @@ func init() {
} }
// NewOSCollector returns a new Collector exposing os-release information. // NewOSCollector returns a new Collector exposing os-release information.
func NewOSCollector(logger log.Logger) (Collector, error) { func NewOSCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &osReleaseCollector{ return &osReleaseCollector{
logger: logger, logger: logger,
infoDesc: prometheus.NewDesc( infoDesc: prometheus.NewDesc(

View file

@ -87,7 +87,7 @@ func TestUpdateStruct(t *testing.T) {
} }
wantedVersion := 20.04 wantedVersion := 20.04
collector, err := NewOSCollector(log.NewNopLogger()) collector, err := NewOSCollector(NodeCollectorConfig{}, log.NewNopLogger())
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }

View file

@ -301,7 +301,7 @@ func newPerfTracepointCollector(
// NewPerfCollector returns a new perf based collector, it creates a profiler // NewPerfCollector returns a new perf based collector, it creates a profiler
// per CPU. // per CPU.
func NewPerfCollector(logger log.Logger) (Collector, error) { func NewPerfCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
collector := &perfCollector{ collector := &perfCollector{
perfHwProfilers: map[int]*perf.HardwareProfiler{}, perfHwProfilers: map[int]*perf.HardwareProfiler{},
perfSwProfilers: map[int]*perf.SoftwareProfiler{}, perfSwProfilers: map[int]*perf.SoftwareProfiler{},

View file

@ -45,7 +45,7 @@ func canTestPerf(t *testing.T) {
func TestPerfCollector(t *testing.T) { func TestPerfCollector(t *testing.T) {
canTestPerf(t) canTestPerf(t)
collector, err := NewPerfCollector(log.NewNopLogger()) collector, err := NewPerfCollector(NodeCollectorConfig{}, log.NewNopLogger())
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -98,7 +98,7 @@ func TestPerfCollectorStride(t *testing.T) {
} }
} }
perfCPUsFlag = &test.flag perfCPUsFlag = &test.flag
collector, err := NewPerfCollector(log.NewNopLogger()) collector, err := NewPerfCollector(NodeCollectorConfig{}, log.NewNopLogger())
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }

View file

@ -40,7 +40,7 @@ func init() {
registerCollector("powersupplyclass", defaultEnabled, NewPowerSupplyClassCollector) registerCollector("powersupplyclass", defaultEnabled, NewPowerSupplyClassCollector)
} }
func NewPowerSupplyClassCollector(logger log.Logger) (Collector, error) { func NewPowerSupplyClassCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
pattern := regexp.MustCompile(*powerSupplyClassIgnoredPowerSupplies) pattern := regexp.MustCompile(*powerSupplyClassIgnoredPowerSupplies)
return &powerSupplyClassCollector{ return &powerSupplyClassCollector{
subsystem: "power_supply", subsystem: "power_supply",

View file

@ -49,7 +49,7 @@ func init() {
} }
// NewPressureStatsCollector returns a Collector exposing pressure stall information // NewPressureStatsCollector returns a Collector exposing pressure stall information
func NewPressureStatsCollector(logger log.Logger) (Collector, error) { func NewPressureStatsCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := procfs.NewFS(*procPath) fs, err := procfs.NewFS(*procPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open procfs: %w", err) return nil, fmt.Errorf("failed to open procfs: %w", err)

View file

@ -47,7 +47,7 @@ func init() {
} }
// NewProcessStatCollector returns a new Collector exposing process data read from the proc filesystem. // NewProcessStatCollector returns a new Collector exposing process data read from the proc filesystem.
func NewProcessStatCollector(logger log.Logger) (Collector, error) { func NewProcessStatCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := procfs.NewFS(*procPath) fs, err := procfs.NewFS(*procPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open procfs: %w", err) return nil, fmt.Errorf("failed to open procfs: %w", err)

View file

@ -51,7 +51,7 @@ func init() {
} }
// NewQdiscStatCollector returns a new Collector exposing queuing discipline statistics. // NewQdiscStatCollector returns a new Collector exposing queuing discipline statistics.
func NewQdiscStatCollector(logger log.Logger) (Collector, error) { func NewQdiscStatCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
if *collectorQdiskDeviceExclude != "" && *collectorQdiskDeviceInclude != "" { if *collectorQdiskDeviceExclude != "" && *collectorQdiskDeviceInclude != "" {
return nil, fmt.Errorf("collector.qdisk.device-include and collector.qdisk.device-exclude are mutaly exclusive") return nil, fmt.Errorf("collector.qdisk.device-include and collector.qdisk.device-exclude are mutaly exclusive")
} }

View file

@ -47,7 +47,7 @@ var (
) )
// NewRaplCollector returns a new Collector exposing RAPL metrics. // NewRaplCollector returns a new Collector exposing RAPL metrics.
func NewRaplCollector(logger log.Logger) (Collector, error) { func NewRaplCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := sysfs.NewFS(*sysPath) fs, err := sysfs.NewFS(*sysPath)
if err != nil { if err != nil {

View file

@ -39,7 +39,7 @@ func init() {
} }
// NewRunitCollector returns a new Collector exposing runit statistics. // NewRunitCollector returns a new Collector exposing runit statistics.
func NewRunitCollector(logger log.Logger) (Collector, error) { func NewRunitCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
var ( var (
subsystem = "service" subsystem = "service"
constLabels = prometheus.Labels{"supervisor": "runit"} constLabels = prometheus.Labels{"supervisor": "runit"}

View file

@ -53,7 +53,7 @@ var (
) )
// NewSchedstatCollector returns a new Collector exposing task scheduler statistics // NewSchedstatCollector returns a new Collector exposing task scheduler statistics
func NewSchedstatCollector(logger log.Logger) (Collector, error) { func NewSchedstatCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := procfs.NewFS(*procPath) fs, err := procfs.NewFS(*procPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open procfs: %w", err) return nil, fmt.Errorf("failed to open procfs: %w", err)

View file

@ -34,7 +34,7 @@ func init() {
} }
// NewSelinuxCollector returns a new Collector exposing SELinux statistics. // NewSelinuxCollector returns a new Collector exposing SELinux statistics.
func NewSelinuxCollector(logger log.Logger) (Collector, error) { func NewSelinuxCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
const subsystem = "selinux" const subsystem = "selinux"
return &selinuxCollector{ return &selinuxCollector{

View file

@ -35,7 +35,7 @@ func init() {
registerCollector("slabinfo", defaultDisabled, NewSlabinfoCollector) registerCollector("slabinfo", defaultDisabled, NewSlabinfoCollector)
} }
func NewSlabinfoCollector(logger log.Logger) (Collector, error) { func NewSlabinfoCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := procfs.NewFS(*procPath) fs, err := procfs.NewFS(*procPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open procfs: %w", err) return nil, fmt.Errorf("failed to open procfs: %w", err)

View file

@ -43,7 +43,7 @@ func init() {
} }
// NewSockStatCollector returns a new Collector exposing socket stats. // NewSockStatCollector returns a new Collector exposing socket stats.
func NewSockStatCollector(logger log.Logger) (Collector, error) { func NewSockStatCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &sockStatCollector{logger}, nil return &sockStatCollector{logger}, nil
} }

View file

@ -34,7 +34,7 @@ func init() {
} }
// NewSoftirqsCollector returns a new Collector exposing softirq stats. // NewSoftirqsCollector returns a new Collector exposing softirq stats.
func NewSoftirqsCollector(logger log.Logger) (Collector, error) { func NewSoftirqsCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
desc := typedDesc{prometheus.NewDesc( desc := typedDesc{prometheus.NewDesc(
namespace+"_softirqs_functions_total", namespace+"_softirqs_functions_total",
"Softirq counts per CPU.", "Softirq counts per CPU.",

View file

@ -46,7 +46,7 @@ func init() {
} }
// NewSoftnetCollector returns a new Collector exposing softnet metrics. // NewSoftnetCollector returns a new Collector exposing softnet metrics.
func NewSoftnetCollector(logger log.Logger) (Collector, error) { func NewSoftnetCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := procfs.NewFS(*procPath) fs, err := procfs.NewFS(*procPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open procfs: %w", err) return nil, fmt.Errorf("failed to open procfs: %w", err)

View file

@ -44,7 +44,7 @@ func init() {
} }
// NewStatCollector returns a new Collector exposing kernel/system statistics. // NewStatCollector returns a new Collector exposing kernel/system statistics.
func NewStatCollector(logger log.Logger) (Collector, error) { func NewStatCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := procfs.NewFS(*procPath) fs, err := procfs.NewFS(*procPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open procfs: %w", err) return nil, fmt.Errorf("failed to open procfs: %w", err)

View file

@ -49,7 +49,7 @@ func init() {
} }
// NewSupervisordCollector returns a new Collector exposing supervisord statistics. // NewSupervisordCollector returns a new Collector exposing supervisord statistics.
func NewSupervisordCollector(logger log.Logger) (Collector, error) { func NewSupervisordCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
var ( var (
subsystem = "supervisord" subsystem = "supervisord"
labelNames = []string{"name", "group"} labelNames = []string{"name", "group"}

View file

@ -41,7 +41,7 @@ func init() {
registerCollector("sysctl", defaultDisabled, NewSysctlCollector) registerCollector("sysctl", defaultDisabled, NewSysctlCollector)
} }
func NewSysctlCollector(logger log.Logger) (Collector, error) { func NewSysctlCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := procfs.NewFS(*procPath) fs, err := procfs.NewFS(*procPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open sysfs: %w", err) return nil, fmt.Errorf("failed to open sysfs: %w", err)

View file

@ -88,7 +88,7 @@ func init() {
} }
// NewSystemdCollector returns a new Collector exposing systemd statistics. // NewSystemdCollector returns a new Collector exposing systemd statistics.
func NewSystemdCollector(logger log.Logger) (Collector, error) { func NewSystemdCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
const subsystem = "systemd" const subsystem = "systemd"
unitDesc := prometheus.NewDesc( unitDesc := prometheus.NewDesc(

View file

@ -100,7 +100,7 @@ func TestSystemdIgnoreFilter(t *testing.T) {
} }
func TestSystemdIgnoreFilterDefaultKeepsAll(t *testing.T) { func TestSystemdIgnoreFilterDefaultKeepsAll(t *testing.T) {
logger := log.NewNopLogger() logger := log.NewNopLogger()
c, err := NewSystemdCollector(logger) c, err := NewSystemdCollector(NodeCollectorConfig{}, logger)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }

View file

@ -54,7 +54,7 @@ func init() {
// NewTapestatsCollector returns a new Collector exposing tape device stats. // NewTapestatsCollector returns a new Collector exposing tape device stats.
// Docs from https://www.kernel.org/doc/html/latest/scsi/st.html#sysfs-and-statistics-for-tape-devices // Docs from https://www.kernel.org/doc/html/latest/scsi/st.html#sysfs-and-statistics-for-tape-devices
func NewTapestatsCollector(logger log.Logger) (Collector, error) { func NewTapestatsCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
var tapeLabelNames = []string{"device"} var tapeLabelNames = []string{"device"}
fs, err := sysfs.NewFS(*sysPath) fs, err := sysfs.NewFS(*sysPath)

View file

@ -68,7 +68,7 @@ func init() {
} }
// NewTCPStatCollector returns a new Collector exposing network stats. // NewTCPStatCollector returns a new Collector exposing network stats.
func NewTCPStatCollector(logger log.Logger) (Collector, error) { func NewTCPStatCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &tcpStatCollector{ return &tcpStatCollector{
desc: typedDesc{prometheus.NewDesc( desc: typedDesc{prometheus.NewDesc(
prometheus.BuildFQName(namespace, "tcp", "connection_states"), prometheus.BuildFQName(namespace, "tcp", "connection_states"),

View file

@ -55,7 +55,7 @@ func init() {
// NewTextFileCollector returns a new Collector exposing metrics read from files // NewTextFileCollector returns a new Collector exposing metrics read from files
// in the given textfile directory. // in the given textfile directory.
func NewTextFileCollector(logger log.Logger) (Collector, error) { func NewTextFileCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
c := &textFileCollector{ c := &textFileCollector{
path: *textFileDirectory, path: *textFileDirectory,
logger: logger, logger: logger,

View file

@ -67,7 +67,7 @@ func init() {
} }
// NewThermCollector returns a new Collector exposing current CPU power levels. // NewThermCollector returns a new Collector exposing current CPU power levels.
func NewThermCollector(logger log.Logger) (Collector, error) { func NewThermCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &thermCollector{ return &thermCollector{
cpuSchedulerLimit: typedDesc{ cpuSchedulerLimit: typedDesc{
desc: prometheus.NewDesc( desc: prometheus.NewDesc(

View file

@ -43,7 +43,7 @@ func init() {
} }
// NewThermalZoneCollector returns a new Collector exposing kernel/system statistics. // NewThermalZoneCollector returns a new Collector exposing kernel/system statistics.
func NewThermalZoneCollector(logger log.Logger) (Collector, error) { func NewThermalZoneCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := sysfs.NewFS(*sysPath) fs, err := sysfs.NewFS(*sysPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open sysfs: %w", err) return nil, fmt.Errorf("failed to open sysfs: %w", err)

View file

@ -38,7 +38,7 @@ func init() {
// NewTimeCollector returns a new Collector exposing the current system time in // NewTimeCollector returns a new Collector exposing the current system time in
// seconds since epoch. // seconds since epoch.
func NewTimeCollector(logger log.Logger) (Collector, error) { func NewTimeCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
const subsystem = "time" const subsystem = "time"
return &timeCollector{ return &timeCollector{
now: typedDesc{prometheus.NewDesc( now: typedDesc{prometheus.NewDesc(

View file

@ -66,7 +66,7 @@ func init() {
} }
// NewTimexCollector returns a new Collector exposing adjtime(3) stats. // NewTimexCollector returns a new Collector exposing adjtime(3) stats.
func NewTimexCollector(logger log.Logger) (Collector, error) { func NewTimexCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
const subsystem = "timex" const subsystem = "timex"
return &timexCollector{ return &timexCollector{

View file

@ -40,7 +40,7 @@ func init() {
} }
// NewUDPqueuesCollector returns a new Collector exposing network udp queued bytes. // NewUDPqueuesCollector returns a new Collector exposing network udp queued bytes.
func NewUDPqueuesCollector(logger log.Logger) (Collector, error) { func NewUDPqueuesCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := procfs.NewFS(*procPath) fs, err := procfs.NewFS(*procPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open procfs: %w", err) return nil, fmt.Errorf("failed to open procfs: %w", err)

View file

@ -53,7 +53,7 @@ func init() {
} }
// NewUnameCollector returns new unameCollector. // NewUnameCollector returns new unameCollector.
func newUnameCollector(logger log.Logger) (Collector, error) { func newUnameCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &unameCollector{logger}, nil return &unameCollector{logger}, nil
} }

View file

@ -47,7 +47,7 @@ func init() {
} }
// NewvmStatCollector returns a new Collector exposing vmstat stats. // NewvmStatCollector returns a new Collector exposing vmstat stats.
func NewvmStatCollector(logger log.Logger) (Collector, error) { func NewvmStatCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
pattern := regexp.MustCompile(*vmStatFields) pattern := regexp.MustCompile(*vmStatFields)
return &vmStatCollector{ return &vmStatCollector{
fieldPattern: pattern, fieldPattern: pattern,

View file

@ -67,7 +67,7 @@ type wifiStater interface {
} }
// NewWifiCollector returns a new Collector exposing Wifi statistics. // NewWifiCollector returns a new Collector exposing Wifi statistics.
func NewWifiCollector(logger log.Logger) (Collector, error) { func NewWifiCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
const ( const (
subsystem = "wifi" subsystem = "wifi"
) )

View file

@ -35,7 +35,7 @@ func init() {
} }
// NewXFSCollector returns a new Collector exposing XFS statistics. // NewXFSCollector returns a new Collector exposing XFS statistics.
func NewXFSCollector(logger log.Logger) (Collector, error) { func NewXFSCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := xfs.NewFS(*procPath, *sysPath) fs, err := xfs.NewFS(*procPath, *sysPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open sysfs: %w", err) return nil, fmt.Errorf("failed to open sysfs: %w", err)

View file

@ -43,7 +43,7 @@ type zfsCollector struct {
} }
// NewZFSCollector returns a new Collector exposing ZFS statistics. // NewZFSCollector returns a new Collector exposing ZFS statistics.
func NewZFSCollector(logger log.Logger) (Collector, error) { func NewZFSCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &zfsCollector{ return &zfsCollector{
linuxProcpathBase: "spl/kstat/zfs", linuxProcpathBase: "spl/kstat/zfs",
linuxZpoolIoPath: "/*/io", linuxZpoolIoPath: "/*/io",

View file

@ -36,7 +36,7 @@ func init() {
registerCollector("zfs", defaultEnabled, NewZfsCollector) registerCollector("zfs", defaultEnabled, NewZfsCollector)
} }
func NewZfsCollector(logger log.Logger) (Collector, error) { func NewZfsCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &zfsCollector{ return &zfsCollector{
sysctls: []bsdSysctl{ sysctls: []bsdSysctl{
{ {

View file

@ -65,7 +65,7 @@ func init() {
registerCollector("zfs", defaultEnabled, NewZfsCollector) registerCollector("zfs", defaultEnabled, NewZfsCollector)
} }
func NewZfsCollector(logger log.Logger) (Collector, error) { func NewZfsCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
return &zfsCollector{ return &zfsCollector{
abdstatsLinearCount: prometheus.NewDesc( abdstatsLinearCount: prometheus.NewDesc(
prometheus.BuildFQName(namespace, zfsCollectorSubsystem, "abdstats_linear_count_total"), prometheus.BuildFQName(namespace, zfsCollectorSubsystem, "abdstats_linear_count_total"),

View file

@ -37,7 +37,7 @@ func init() {
} }
// NewZoneinfoCollector returns a new Collector exposing zone stats. // NewZoneinfoCollector returns a new Collector exposing zone stats.
func NewZoneinfoCollector(logger log.Logger) (Collector, error) { func NewZoneinfoCollector(config NodeCollectorConfig, logger log.Logger) (Collector, error) {
fs, err := procfs.NewFS(*procPath) fs, err := procfs.NewFS(*procPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to open procfs: %w", err) return nil, fmt.Errorf("failed to open procfs: %w", err)

28
kingpinconfig/flags.go Normal file
View file

@ -0,0 +1,28 @@
// Copyright 2023 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.
package kingpinconfig
import (
"github.com/alecthomas/kingpin/v2"
"github.com/prometheus/node_exporter/collector"
)
func AddFlags(a *kingpin.Application) collector.NodeCollectorConfig {
config := collector.NodeCollectorConfig{}
config.Arp.DeviceInclude = a.Flag("collector.arp.device-include", "Regexp of arp devices to include (mutually exclusive to device-exclude).").String()
config.Arp.DeviceExclude = a.Flag("collector.arp.device-exclude", "Regexp of arp devices to exclude (mutually exclusive to device-include).").String()
return config
}

Some files were not shown because too many files have changed in this diff Show more