Skip to content

Commit 48e8ac6

Browse files
committed
collector/diskstats: add device-mapper backing device info metric
1 parent 4d32635 commit 48e8ac6

3 files changed

Lines changed: 89 additions & 0 deletions

File tree

collector/diskstats_linux.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"fmt"
2121
"log/slog"
2222
"os"
23+
"sort"
2324
"strconv"
2425
"strings"
2526

@@ -74,6 +75,7 @@ type diskstatsCollector struct {
7475
descs []typedDesc
7576
filesystemInfoDesc typedDesc
7677
deviceMapperInfoDesc typedDesc
78+
deviceMapperBackingDesc typedDesc
7779
ataDescs map[string]typedDesc
7880
logger *slog.Logger
7981
getUdevDeviceProperties func(uint32, uint32) (udevInfo, error)
@@ -224,6 +226,13 @@ func NewDiskstatsCollector(logger *slog.Logger) (Collector, error) {
224226
nil,
225227
), valueType: prometheus.GaugeValue,
226228
},
229+
deviceMapperBackingDesc: typedDesc{
230+
desc: prometheus.NewDesc(prometheus.BuildFQName(namespace, diskSubsystem, "device_mapper_backing_device_info"),
231+
"Info about the underlying block devices of a device mapper device.",
232+
[]string{"device", "backing_device"},
233+
nil,
234+
), valueType: prometheus.GaugeValue,
235+
},
227236
ataDescs: map[string]typedDesc{
228237
udevIDATAWriteCache: {
229238
desc: prometheus.NewDesc(prometheus.BuildFQName(namespace, diskSubsystem, "ata_write_cache"),
@@ -351,6 +360,7 @@ func (c *diskstatsCollector) Update(ch chan<- prometheus.Metric) error {
351360
info[udevDMLVName],
352361
info[udevDMLVLayer],
353362
)
363+
c.updateDeviceMapperBackingDevices(ch, dev)
354364
}
355365

356366
if ata := info[udevIDATA]; ata != "" {
@@ -372,6 +382,23 @@ func (c *diskstatsCollector) Update(ch chan<- prometheus.Metric) error {
372382
return nil
373383
}
374384

385+
func (c *diskstatsCollector) updateDeviceMapperBackingDevices(ch chan<- prometheus.Metric, dev string) {
386+
underlying, err := c.fs.SysBlockDeviceUnderlyingDevices(dev)
387+
if err != nil {
388+
if !os.IsNotExist(err) {
389+
c.logger.Debug("Failed to get device mapper backing devices", "device", dev, "err", err)
390+
}
391+
return
392+
}
393+
394+
sort.Strings(underlying.DeviceNames)
395+
for _, backingDevice := range underlying.DeviceNames {
396+
ch <- c.deviceMapperBackingDesc.mustNewConstMetric(1.0, dev,
397+
backingDevice,
398+
)
399+
}
400+
}
401+
375402
func getUdevDeviceProperties(major, minor uint32) (udevInfo, error) {
376403
filename := udevDataFilePath(fmt.Sprintf("b%d:%d", major, minor))
377404

collector/diskstats_linux_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,14 @@ node_disk_ata_write_cache{device="sdc"} 1
6868
node_disk_ata_write_cache_enabled{device="sda"} 0
6969
node_disk_ata_write_cache_enabled{device="sdb"} 1
7070
node_disk_ata_write_cache_enabled{device="sdc"} 0
71+
# HELP node_disk_device_mapper_backing_device_info Info about the underlying block devices of a device mapper device.
72+
# TYPE node_disk_device_mapper_backing_device_info gauge
73+
node_disk_device_mapper_backing_device_info{backing_device="nvme0n1p3",device="dm-0"} 1
74+
node_disk_device_mapper_backing_device_info{backing_device="dm-0",device="dm-1"} 1
75+
node_disk_device_mapper_backing_device_info{backing_device="dm-0",device="dm-2"} 1
76+
node_disk_device_mapper_backing_device_info{backing_device="dm-0",device="dm-3"} 1
77+
node_disk_device_mapper_backing_device_info{backing_device="dm-0",device="dm-4"} 1
78+
node_disk_device_mapper_backing_device_info{backing_device="dm-0",device="dm-5"} 1
7179
# HELP node_disk_device_mapper_info Info about disk device mapper.
7280
# TYPE node_disk_device_mapper_info gauge
7381
node_disk_device_mapper_info{device="dm-0",lv_layer="",lv_name="",name="nvme0n1_crypt",uuid="CRYPT-LUKS2-jolaulot80fy9zsiobkxyxo7y2dqeho2-nvme0n1_crypt",vg_name=""} 1

collector/fixtures/sys.ttar

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,60 @@ Mode: 755
55
Directory: sys/block
66
Mode: 755
77
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
8+
Directory: sys/block/dm-0
9+
Mode: 755
10+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
11+
Directory: sys/block/dm-0/slaves
12+
Mode: 755
13+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
14+
Path: sys/block/dm-0/slaves/nvme0n1p3
15+
SymlinkTo: ../nvme0n1p3
16+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
17+
Directory: sys/block/dm-1
18+
Mode: 755
19+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
20+
Directory: sys/block/dm-1/slaves
21+
Mode: 755
22+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
23+
Path: sys/block/dm-1/slaves/dm-0
24+
SymlinkTo: ../dm-0
25+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
26+
Directory: sys/block/dm-2
27+
Mode: 755
28+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
29+
Directory: sys/block/dm-2/slaves
30+
Mode: 755
31+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
32+
Path: sys/block/dm-2/slaves/dm-0
33+
SymlinkTo: ../dm-0
34+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
35+
Directory: sys/block/dm-3
36+
Mode: 755
37+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
38+
Directory: sys/block/dm-3/slaves
39+
Mode: 755
40+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
41+
Path: sys/block/dm-3/slaves/dm-0
42+
SymlinkTo: ../dm-0
43+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
44+
Directory: sys/block/dm-4
45+
Mode: 755
46+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
47+
Directory: sys/block/dm-4/slaves
48+
Mode: 755
49+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
50+
Path: sys/block/dm-4/slaves/dm-0
51+
SymlinkTo: ../dm-0
52+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
53+
Directory: sys/block/dm-5
54+
Mode: 755
55+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
56+
Directory: sys/block/dm-5/slaves
57+
Mode: 755
58+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
59+
Path: sys/block/dm-5/slaves/dm-0
60+
SymlinkTo: ../dm-0
61+
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
862
Directory: sys/block/md0
963
Mode: 755
1064
# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

0 commit comments

Comments
 (0)