diff --git a/CHANGELOG.md b/CHANGELOG.md index f5e2ef1cb1..c58ba3c9f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ ## master / unreleased * [CHANGE] -* [FEATURE] +* [FEATURE] Add device filtering to the infiniband collector #3694 * [ENHANCEMENT] * [BUGFIX] diff --git a/README.md b/README.md index 3b8c2d811e..c53d521999 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,7 @@ filesystem | fs-types | --collector.filesystem.fs-types-include | --collector.fi filesystem | mount-points | --collector.filesystem.mount-points-include | --collector.filesystem.mount-points-exclude hwmon | chip | --collector.hwmon.chip-include | --collector.hwmon.chip-exclude hwmon | sensor | --collector.hwmon.sensor-include | --collector.hwmon.sensor-exclude +infiniband | device | --collector.infiniband.device-include | --collector.infiniband.device-exclude interrupts | name | --collector.interrupts.name-include | --collector.interrupts.name-exclude netdev | device | --collector.netdev.device-include | --collector.netdev.device-exclude qdisk | device | --collector.qdisk.device-include | --collector.qdisk.device-exclude diff --git a/collector/infiniband_linux.go b/collector/infiniband_linux.go index 078047a0d7..fb83c152a6 100644 --- a/collector/infiniband_linux.go +++ b/collector/infiniband_linux.go @@ -22,15 +22,22 @@ import ( "os" "strconv" + "github.com/alecthomas/kingpin/v2" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/procfs/sysfs" ) +var ( + infinibandDeviceInclude = kingpin.Flag("collector.infiniband.device-include", "Regexp of infiniband devices to include (mutually exclusive to device-exclude).").String() + infinibandDeviceExclude = kingpin.Flag("collector.infiniband.device-exclude", "Regexp of infiniband devices to exclude (mutually exclusive to device-include).").String() +) + type infinibandCollector struct { - fs sysfs.FS - metricDescs map[string]*prometheus.Desc - logger *slog.Logger - subsystem string + fs sysfs.FS + metricDescs map[string]*prometheus.Desc + logger *slog.Logger + subsystem string + deviceFilter deviceFilter } func init() { @@ -129,6 +136,14 @@ func NewInfiniBandCollector(logger *slog.Logger) (Collector, error) { ) } + if *infinibandDeviceInclude != "" { + i.logger.Info("Parsed flag --collector.infiniband.device-include", "flag", *infinibandDeviceInclude) + } + if *infinibandDeviceExclude != "" { + i.logger.Info("Parsed flag --collector.infiniband.device-exclude", "flag", *infinibandDeviceExclude) + } + i.deviceFilter = newDeviceFilter(*infinibandDeviceExclude, *infinibandDeviceInclude) + return &i, nil } @@ -153,6 +168,10 @@ func (c *infinibandCollector) Update(ch chan<- prometheus.Metric) error { } for _, device := range devices { + if c.deviceFilter.ignored(device.Name) { + continue + } + infoDesc := prometheus.NewDesc( prometheus.BuildFQName(namespace, c.subsystem, "info"), "Non-numeric data from /sys/class/infiniband/, value is always 1.",