From 15c371967c092c2b0ab586c6e2ed5366d5b0605d Mon Sep 17 00:00:00 2001 From: binjip978 Date: Sun, 10 Apr 2022 11:58:01 +0000 Subject: [PATCH] qdisk-linux: Add exclude and include flags for interface name Signed-off-by: binjip978 Signed-off-by: Johannes 'fish' Ziemke --- collector/qdisc_linux.go | 33 +++++++++++++++++++++++---------- end-to-end-test.sh | 1 + 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/collector/qdisc_linux.go b/collector/qdisc_linux.go index 3050318ab4..6a44cb2b15 100644 --- a/collector/qdisc_linux.go +++ b/collector/qdisc_linux.go @@ -18,6 +18,7 @@ package collector import ( "encoding/json" + "fmt" "io/ioutil" "path/filepath" @@ -28,18 +29,21 @@ import ( ) type qdiscStatCollector struct { - bytes typedDesc - packets typedDesc - drops typedDesc - requeues typedDesc - overlimits typedDesc - qlength typedDesc - backlog typedDesc - logger log.Logger + logger log.Logger + deviceFilter deviceFilter + bytes typedDesc + packets typedDesc + drops typedDesc + requeues typedDesc + overlimits typedDesc + qlength typedDesc + backlog typedDesc } var ( - collectorQdisc = kingpin.Flag("collector.qdisc.fixtures", "test fixtures to use for qdisc collector end-to-end testing").Default("").String() + collectorQdisc = kingpin.Flag("collector.qdisc.fixtures", "test fixtures to use for qdisc collector end-to-end testing").Default("").String() + collectorQdiskDeviceInclude = kingpin.Flag("collector.qdisk.device-include", "Regexp of qdisk devices to include (mutually exclusive to device-exclude).").String() + collectorQdiskDeviceExclude = kingpin.Flag("collector.qdisk.device-exclude", "Regexp of qdisk devices to exclude (mutually exclusive to device-include).").String() ) func init() { @@ -48,6 +52,10 @@ func init() { // NewQdiscStatCollector returns a new Collector exposing queuing discipline statistics. func NewQdiscStatCollector(logger log.Logger) (Collector, error) { + if *collectorQdiskDeviceExclude != "" && *collectorQdiskDeviceInclude != "" { + return nil, fmt.Errorf("collector.qdisk.device-include and collector.qdisk.device-exclude are mutaly exclusive") + } + return &qdiscStatCollector{ bytes: typedDesc{prometheus.NewDesc( prometheus.BuildFQName(namespace, "qdisc", "bytes_total"), @@ -84,7 +92,8 @@ func NewQdiscStatCollector(logger log.Logger) (Collector, error) { "Number of bytes currently in queue to be sent.", []string{"device", "kind"}, nil, ), prometheus.GaugeValue}, - logger: logger, + logger: logger, + deviceFilter: newDeviceFilter(*collectorQdiskDeviceExclude, *collectorQdiskDeviceExclude), }, nil } @@ -122,6 +131,10 @@ func (c *qdiscStatCollector) Update(ch chan<- prometheus.Metric) error { continue } + if c.deviceFilter.ignored(msg.IfaceName) { + continue + } + ch <- c.bytes.mustNewConstMetric(float64(msg.Bytes), msg.IfaceName, msg.Kind) ch <- c.packets.mustNewConstMetric(float64(msg.Packets), msg.IfaceName, msg.Kind) ch <- c.drops.mustNewConstMetric(float64(msg.Drops), msg.IfaceName, msg.Kind) diff --git a/end-to-end-test.sh b/end-to-end-test.sh index 808c1cdd30..3ceb0eb28f 100755 --- a/end-to-end-test.sh +++ b/end-to-end-test.sh @@ -128,6 +128,7 @@ fi --collector.textfile.directory="collector/fixtures/textfile/two_metric_files/" \ --collector.wifi.fixtures="collector/fixtures/wifi" \ --collector.qdisc.fixtures="collector/fixtures/qdisc/" \ + --collector.qdisk.device-include="(wlan0|eth0)" \ --collector.arp.device-exclude="nope" \ --collector.netclass.ignored-devices="(dmz|int)" \ --collector.netclass.ignore-invalid-speed \