Skip to content
Open
28 changes: 28 additions & 0 deletions collector/diskstats_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,11 @@ package collector

import (
"bufio"
"errors"
"fmt"
"log/slog"
"os"
"sort"
"strconv"
"strings"

Expand Down Expand Up @@ -74,6 +76,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)
Expand Down Expand Up @@ -224,6 +227,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"),
Expand Down Expand Up @@ -351,6 +361,7 @@ func (c *diskstatsCollector) Update(ch chan<- prometheus.Metric) error {
info[udevDMLVName],
info[udevDMLVLayer],
)
c.updateDeviceMapperBackingDevices(ch, dev)
}

if ata := info[udevIDATA]; ata != "" {
Expand Down Expand Up @@ -397,6 +408,23 @@ func rotationalLabel(fs blockdevice.FS, dev string) string {
return "0"
}

func (c *diskstatsCollector) updateDeviceMapperBackingDevices(ch chan<- prometheus.Metric, dev string) {
underlying, err := c.fs.SysBlockDeviceUnderlyingDevices(dev)
if err != nil {
if errors.Is(err, os.ErrNotExist) {
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))

Expand Down
11 changes: 11 additions & 0 deletions collector/diskstats_linux_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,17 @@ 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="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="nvme0n1p3",device="dm-0"} 1
node_disk_device_mapper_backing_device_info{backing_device="sdi",device="dm-5"} 1
node_disk_device_mapper_backing_device_info{backing_device="sdj",device="dm-5"} 1
node_disk_device_mapper_backing_device_info{backing_device="sdk",device="dm-5"} 1
node_disk_device_mapper_backing_device_info{backing_device="sdl",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
Expand Down
11 changes: 11 additions & 0 deletions collector/fixtures/e2e-64k-page-output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1035,6 +1035,17 @@ 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="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="nvme0n1p3",device="dm-0"} 1
Comment thread
Maharacha marked this conversation as resolved.
node_disk_device_mapper_backing_device_info{backing_device="sdi",device="dm-5"} 1
node_disk_device_mapper_backing_device_info{backing_device="sdj",device="dm-5"} 1
node_disk_device_mapper_backing_device_info{backing_device="sdk",device="dm-5"} 1
node_disk_device_mapper_backing_device_info{backing_device="sdl",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
Expand Down
11 changes: 11 additions & 0 deletions collector/fixtures/e2e-output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1067,6 +1067,17 @@ 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="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="nvme0n1p3",device="dm-0"} 1
node_disk_device_mapper_backing_device_info{backing_device="sdi",device="dm-5"} 1
node_disk_device_mapper_backing_device_info{backing_device="sdj",device="dm-5"} 1
node_disk_device_mapper_backing_device_info{backing_device="sdk",device="dm-5"} 1
node_disk_device_mapper_backing_device_info{backing_device="sdl",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
Expand Down
45 changes: 45 additions & 0 deletions collector/fixtures/sys.ttar
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,51 @@ 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/md0
Mode: 755
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Expand Down
Loading