Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions collector/diskstats_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"fmt"
"log/slog"
"os"
"sort"
"strconv"
"strings"

Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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"),
Expand Down Expand Up @@ -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 != "" {
Expand All @@ -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))

Expand Down
8 changes: 8 additions & 0 deletions collector/diskstats_linux_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
54 changes: 54 additions & 0 deletions collector/fixtures/sys.ttar
Original file line number Diff line number Diff line change
Expand Up @@ -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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Expand Down