From e59b259fb0df8f899579abd6a59ad2426894db10 Mon Sep 17 00:00:00 2001 From: Joakim Nyman Date: Tue, 2 Jun 2026 11:45:46 +0200 Subject: [PATCH] collector/diskstats: add device-mapper backing device info metric Signed-off-by: Joakim Nyman --- collector/diskstats_linux.go | 27 ++++++++++++++++ collector/diskstats_linux_test.go | 8 +++++ collector/fixtures/sys.ttar | 54 +++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+) diff --git a/collector/diskstats_linux.go b/collector/diskstats_linux.go index daca55d968..84237fc975 100644 --- a/collector/diskstats_linux.go +++ b/collector/diskstats_linux.go @@ -20,6 +20,7 @@ import ( "fmt" "log/slog" "os" + "sort" "strconv" "strings" @@ -74,6 +75,7 @@ type diskstatsCollector struct { descs []typedDesc filesystemInfoDesc typedDesc deviceMapperInfoDesc typedDesc + deviceMapperBackingDesc typedDesc ataDescs map[string]typedDesc logger *slog.Logger getUdevDeviceProperties func(uint32, uint32) (udevInfo, error) @@ -224,6 +226,13 @@ func NewDiskstatsCollector(logger *slog.Logger) (Collector, error) { nil, ), valueType: prometheus.GaugeValue, }, + deviceMapperBackingDesc: typedDesc{ + desc: prometheus.NewDesc(prometheus.BuildFQName(namespace, diskSubsystem, "device_mapper_backing_device_info"), + "Info about the underlying block devices of a device mapper device.", + []string{"device", "backing_device"}, + nil, + ), valueType: prometheus.GaugeValue, + }, ataDescs: map[string]typedDesc{ udevIDATAWriteCache: { desc: prometheus.NewDesc(prometheus.BuildFQName(namespace, diskSubsystem, "ata_write_cache"), @@ -351,6 +360,7 @@ func (c *diskstatsCollector) Update(ch chan<- prometheus.Metric) error { info[udevDMLVName], info[udevDMLVLayer], ) + c.updateDeviceMapperBackingDevices(ch, dev) } if ata := info[udevIDATA]; ata != "" { @@ -372,6 +382,23 @@ func (c *diskstatsCollector) Update(ch chan<- prometheus.Metric) error { return nil } +func (c *diskstatsCollector) updateDeviceMapperBackingDevices(ch chan<- prometheus.Metric, dev string) { + underlying, err := c.fs.SysBlockDeviceUnderlyingDevices(dev) + if err != nil { + if !os.IsNotExist(err) { + c.logger.Debug("Failed to get device mapper backing devices", "device", dev, "err", err) + } + return + } + + sort.Strings(underlying.DeviceNames) + for _, backingDevice := range underlying.DeviceNames { + ch <- c.deviceMapperBackingDesc.mustNewConstMetric(1.0, dev, + backingDevice, + ) + } +} + func getUdevDeviceProperties(major, minor uint32) (udevInfo, error) { filename := udevDataFilePath(fmt.Sprintf("b%d:%d", major, minor)) diff --git a/collector/diskstats_linux_test.go b/collector/diskstats_linux_test.go index 08a5024c8a..456b850158 100644 --- a/collector/diskstats_linux_test.go +++ b/collector/diskstats_linux_test.go @@ -68,6 +68,14 @@ node_disk_ata_write_cache{device="sdc"} 1 node_disk_ata_write_cache_enabled{device="sda"} 0 node_disk_ata_write_cache_enabled{device="sdb"} 1 node_disk_ata_write_cache_enabled{device="sdc"} 0 +# HELP node_disk_device_mapper_backing_device_info Info about the underlying block devices of a device mapper device. +# TYPE node_disk_device_mapper_backing_device_info gauge +node_disk_device_mapper_backing_device_info{backing_device="nvme0n1p3",device="dm-0"} 1 +node_disk_device_mapper_backing_device_info{backing_device="dm-0",device="dm-1"} 1 +node_disk_device_mapper_backing_device_info{backing_device="dm-0",device="dm-2"} 1 +node_disk_device_mapper_backing_device_info{backing_device="dm-0",device="dm-3"} 1 +node_disk_device_mapper_backing_device_info{backing_device="dm-0",device="dm-4"} 1 +node_disk_device_mapper_backing_device_info{backing_device="dm-0",device="dm-5"} 1 # HELP node_disk_device_mapper_info Info about disk device mapper. # TYPE node_disk_device_mapper_info gauge node_disk_device_mapper_info{device="dm-0",lv_layer="",lv_name="",name="nvme0n1_crypt",uuid="CRYPT-LUKS2-jolaulot80fy9zsiobkxyxo7y2dqeho2-nvme0n1_crypt",vg_name=""} 1 diff --git a/collector/fixtures/sys.ttar b/collector/fixtures/sys.ttar index bc8744cbe7..437752cb5f 100644 --- a/collector/fixtures/sys.ttar +++ b/collector/fixtures/sys.ttar @@ -5,6 +5,60 @@ Mode: 755 Directory: sys/block Mode: 755 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: sys/block/dm-0 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: sys/block/dm-0/slaves +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: sys/block/dm-0/slaves/nvme0n1p3 +SymlinkTo: ../nvme0n1p3 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: sys/block/dm-1 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: sys/block/dm-1/slaves +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: sys/block/dm-1/slaves/dm-0 +SymlinkTo: ../dm-0 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: sys/block/dm-2 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: sys/block/dm-2/slaves +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: sys/block/dm-2/slaves/dm-0 +SymlinkTo: ../dm-0 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: sys/block/dm-3 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: sys/block/dm-3/slaves +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: sys/block/dm-3/slaves/dm-0 +SymlinkTo: ../dm-0 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: sys/block/dm-4 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: sys/block/dm-4/slaves +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: sys/block/dm-4/slaves/dm-0 +SymlinkTo: ../dm-0 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: sys/block/dm-5 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: sys/block/dm-5/slaves +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: sys/block/dm-5/slaves/dm-0 +SymlinkTo: ../dm-0 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Directory: sys/block/md0 Mode: 755 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -