From dae4c87f7d54803340ccc065bee6cb6dd400af99 Mon Sep 17 00:00:00 2001 From: kangjie Date: Fri, 7 Jun 2024 00:37:22 +0800 Subject: [PATCH] slab-collector: add filter for slab name. (#3041) Signed-off-by: Kangjie Xu Co-authored-by: Kangjie Xu --- README.md | 1 + collector/slabinfo_linux.go | 25 ++++++++++++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index ad385650..c6e0d1fe 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,7 @@ filesystem | mount-points | N/A | --collector.filesystem.mount-points-exclude hwmon | chip | --collector.hwmon.chip-include | --collector.hwmon.chip-exclude netdev | device | --collector.netdev.device-include | --collector.netdev.device-exclude qdisk | device | --collector.qdisk.device-include | --collector.qdisk.device-exclude +slabinfo | slab-names | --collector.slabinfo.slabs-include | --collector.slabinfo.slabs-exclude sysctl | all | --collector.sysctl.include | N/A systemd | unit | --collector.systemd.unit-include | --collector.systemd.unit-exclude diff --git a/collector/slabinfo_linux.go b/collector/slabinfo_linux.go index a3c3ebce..70241a08 100644 --- a/collector/slabinfo_linux.go +++ b/collector/slabinfo_linux.go @@ -19,16 +19,23 @@ package collector import ( "fmt" + "github.com/alecthomas/kingpin/v2" "github.com/go-kit/log" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/procfs" ) +var ( + slabNameInclude = kingpin.Flag("collector.slabinfo.slabs-include", "Regexp of slabs to include in slabinfo collector.").Default(".*").String() + slabNameExclude = kingpin.Flag("collector.slabinfo.slabs-exclude", "Regexp of slabs to exclude in slabinfo collector.").Default("").String() +) + type slabinfoCollector struct { - fs procfs.FS - logger log.Logger - subsystem string - labels []string + fs procfs.FS + logger log.Logger + subsystem string + labels []string + slabNameFilter deviceFilter } func init() { @@ -42,9 +49,10 @@ func NewSlabinfoCollector(logger log.Logger) (Collector, error) { } return &slabinfoCollector{logger: logger, - fs: fs, - subsystem: "slabinfo", - labels: []string{"slab"}, + fs: fs, + subsystem: "slabinfo", + labels: []string{"slab"}, + slabNameFilter: newDeviceFilter(*slabNameExclude, *slabNameInclude), }, nil } @@ -55,6 +63,9 @@ func (c *slabinfoCollector) Update(ch chan<- prometheus.Metric) error { } for _, slab := range slabinfo.Slabs { + if c.slabNameFilter.ignored(slab.Name) { + continue + } ch <- c.activeObjects(slab.Name, slab.ObjActive) ch <- c.objects(slab.Name, slab.ObjNum) ch <- c.objectSizeBytes(slab.Name, slab.ObjSize)