diff --git a/collector/diskstats_linux.go b/collector/diskstats_linux.go index a37dc4dad3..9e50831198 100644 --- a/collector/diskstats_linux.go +++ b/collector/diskstats_linux.go @@ -53,6 +53,7 @@ const ( udevIDATASATASignalRateGen2 = "ID_ATA_SATA_SIGNAL_RATE_GEN2" udevIDATAWriteCache = "ID_ATA_WRITE_CACHE" udevIDATAWriteCacheEnabled = "ID_ATA_WRITE_CACHE_ENABLED" + udevIDBus = "ID_BUS" udevIDFSType = "ID_FS_TYPE" udevIDFSUsage = "ID_FS_USAGE" udevIDFSUUID = "ID_FS_UUID" @@ -115,7 +116,7 @@ func NewDiskstatsCollector(logger *slog.Logger) (Collector, error) { infoDesc: typedFactorDesc{ desc: prometheus.NewDesc(prometheus.BuildFQName(namespace, diskSubsystem, "info"), "Info of /sys/block/.", - []string{"device", "major", "minor", "path", "wwn", "model", "serial", "revision", "rotational"}, + []string{"device", "major", "minor", "path", "wwn", "model", "serial", "revision", "rotational", "bus", "removable"}, nil, ), valueType: prometheus.GaugeValue, }, @@ -346,6 +347,8 @@ func (c *diskstatsCollector) Update(ch chan<- prometheus.Metric) error { serial, info[udevIDRevision], strconv.FormatUint(queueStats.Rotational, 2), + info[udevIDBus], + readSysBlockRemovable(dev), ) statCount := stats.IoStatsCount - 3 // Total diskstats record count, less MajorNumber, MinorNumber and DeviceName @@ -497,6 +500,17 @@ func (c *diskstatsCollector) Update(ch chan<- prometheus.Metric) error { return nil } +// readSysBlockRemovable returns the contents of /sys/block//removable +// (typically "0" or "1"). Returns an empty string if the file is missing or +// cannot be read (e.g. for partitions or virtual devices). +func readSysBlockRemovable(dev string) string { + data, err := os.ReadFile(sysFilePath("block/" + dev + "/removable")) + if err != nil { + return "" + } + return strings.TrimSpace(string(data)) +} + 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 fd90353f08..33744e6b8a 100644 --- a/collector/diskstats_linux_test.go +++ b/collector/diskstats_linux_test.go @@ -113,21 +113,21 @@ node_disk_flush_requests_time_seconds_total{device="sdc"} 1.944 node_disk_flush_requests_total{device="sdc"} 1555 # HELP node_disk_info Info of /sys/block/. # TYPE node_disk_info gauge -node_disk_info{device="dm-0",major="252",minor="0",model="",path="",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="dm-1",major="252",minor="1",model="",path="",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="dm-2",major="252",minor="2",model="",path="",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="dm-3",major="252",minor="3",model="",path="",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="dm-4",major="252",minor="4",model="",path="",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="dm-5",major="252",minor="5",model="",path="",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="mmcblk0",major="179",minor="0",model="",path="platform-df2969f3.mmc",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="mmcblk0p1",major="179",minor="1",model="",path="platform-df2969f3.mmc",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="mmcblk0p2",major="179",minor="2",model="",path="platform-df2969f3.mmc",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="nvme0n1",major="259",minor="0",model="SAMSUNG EHFTF55LURSY-000Y9",path="pci-0000:02:00.0-nvme-1",revision="4NBTUY95",rotational="0",serial="S252B6CU1HG3M1",wwn="eui.p3vbbiejx5aae2r3"} 1 -node_disk_info{device="sda",major="8",minor="0",model="TOSHIBA_KSDB4U86",path="pci-0000:3b:00.0-sas-phy7-lun-0",revision="0102",rotational="1",serial="2160A0D5FVGG",wwn="0x7c72382b8de36a64"} 1 -node_disk_info{device="sdb",major="8",minor="16",model="SuperMicro_SSD",path="pci-0000:00:1f.2-ata-1",revision="0R",rotational="0",serial="SMC0E1B87ABBB16BD84E",wwn="0xe1b87abbb16bd84e"} 1 -node_disk_info{device="sdc",major="8",minor="32",model="INTEL_SSDS9X9SI0",path="pci-0000:00:1f.2-ata-4",revision="0100",rotational="0",serial="3EWB5Y25CWQWA7EH1U",wwn="0x58907ddc573a5de"} 1 -node_disk_info{device="sr0",major="11",minor="0",model="Virtual_CDROM0",path="pci-0000:00:14.0-usb-0:1.1:1.0-scsi-0:0:0:0",revision="1.00",rotational="0",serial="AAAABBBBCCCC1",wwn=""} 1 -node_disk_info{device="vda",major="254",minor="0",model="",path="pci-0000:00:06.0",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="dm-0",major="252",minor="0",model="",path="",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="dm-1",major="252",minor="1",model="",path="",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="dm-2",major="252",minor="2",model="",path="",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="dm-3",major="252",minor="3",model="",path="",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="dm-4",major="252",minor="4",model="",path="",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="dm-5",major="252",minor="5",model="",path="",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="mmcblk0",major="179",minor="0",model="",path="platform-df2969f3.mmc",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="mmcblk0p1",major="179",minor="1",model="",path="platform-df2969f3.mmc",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="mmcblk0p2",major="179",minor="2",model="",path="platform-df2969f3.mmc",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="nvme0n1",major="259",minor="0",model="SAMSUNG EHFTF55LURSY-000Y9",path="pci-0000:02:00.0-nvme-1",removable="",revision="4NBTUY95",rotational="0",serial="S252B6CU1HG3M1",wwn="eui.p3vbbiejx5aae2r3"} 1 +node_disk_info{bus="ata",device="sda",major="8",minor="0",model="TOSHIBA_KSDB4U86",path="pci-0000:3b:00.0-sas-phy7-lun-0",removable="",revision="0102",rotational="1",serial="2160A0D5FVGG",wwn="0x7c72382b8de36a64"} 1 +node_disk_info{bus="ata",device="sdb",major="8",minor="16",model="SuperMicro_SSD",path="pci-0000:00:1f.2-ata-1",removable="",revision="0R",rotational="0",serial="SMC0E1B87ABBB16BD84E",wwn="0xe1b87abbb16bd84e"} 1 +node_disk_info{bus="ata",device="sdc",major="8",minor="32",model="INTEL_SSDS9X9SI0",path="pci-0000:00:1f.2-ata-4",removable="",revision="0100",rotational="0",serial="3EWB5Y25CWQWA7EH1U",wwn="0x58907ddc573a5de"} 1 +node_disk_info{bus="usb",device="sr0",major="11",minor="0",model="Virtual_CDROM0",path="pci-0000:00:14.0-usb-0:1.1:1.0-scsi-0:0:0:0",removable="",revision="1.00",rotational="0",serial="AAAABBBBCCCC1",wwn=""} 1 +node_disk_info{bus="",device="vda",major="254",minor="0",model="",path="pci-0000:00:06.0",removable="",revision="",rotational="0",serial="",wwn=""} 1 # HELP node_disk_io_now The number of I/Os currently in progress. # TYPE node_disk_io_now gauge node_disk_io_now{device="dm-0"} 0 diff --git a/collector/fixtures/e2e-64k-page-output.txt b/collector/fixtures/e2e-64k-page-output.txt index 030fa88e8a..76746cca7e 100644 --- a/collector/fixtures/e2e-64k-page-output.txt +++ b/collector/fixtures/e2e-64k-page-output.txt @@ -488,21 +488,21 @@ node_disk_flush_requests_time_seconds_total{device="sdc"} 1.944 node_disk_flush_requests_total{device="sdc"} 1555 # HELP node_disk_info Info of /sys/block/. # TYPE node_disk_info gauge -node_disk_info{device="dm-0",major="252",minor="0",model="",path="",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="dm-1",major="252",minor="1",model="",path="",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="dm-2",major="252",minor="2",model="",path="",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="dm-3",major="252",minor="3",model="",path="",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="dm-4",major="252",minor="4",model="",path="",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="dm-5",major="252",minor="5",model="",path="",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="mmcblk0",major="179",minor="0",model="",path="platform-df2969f3.mmc",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="mmcblk0p1",major="179",minor="1",model="",path="platform-df2969f3.mmc",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="mmcblk0p2",major="179",minor="2",model="",path="platform-df2969f3.mmc",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="nvme0n1",major="259",minor="0",model="SAMSUNG EHFTF55LURSY-000Y9",path="pci-0000:02:00.0-nvme-1",revision="4NBTUY95",rotational="0",serial="S252B6CU1HG3M1",wwn="eui.p3vbbiejx5aae2r3"} 1 -node_disk_info{device="sda",major="8",minor="0",model="TOSHIBA_KSDB4U86",path="pci-0000:3b:00.0-sas-phy7-lun-0",revision="0102",rotational="1",serial="2160A0D5FVGG",wwn="0x7c72382b8de36a64"} 1 -node_disk_info{device="sdb",major="8",minor="16",model="SuperMicro_SSD",path="pci-0000:00:1f.2-ata-1",revision="0R",rotational="0",serial="SMC0E1B87ABBB16BD84E",wwn="0xe1b87abbb16bd84e"} 1 -node_disk_info{device="sdc",major="8",minor="32",model="INTEL_SSDS9X9SI0",path="pci-0000:00:1f.2-ata-4",revision="0100",rotational="0",serial="3EWB5Y25CWQWA7EH1U",wwn="0x58907ddc573a5de"} 1 -node_disk_info{device="sr0",major="11",minor="0",model="Virtual_CDROM0",path="pci-0000:00:14.0-usb-0:1.1:1.0-scsi-0:0:0:0",revision="1.00",rotational="0",serial="AAAABBBBCCCC1",wwn=""} 1 -node_disk_info{device="vda",major="254",minor="0",model="",path="pci-0000:00:06.0",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="dm-0",major="252",minor="0",model="",path="",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="dm-1",major="252",minor="1",model="",path="",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="dm-2",major="252",minor="2",model="",path="",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="dm-3",major="252",minor="3",model="",path="",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="dm-4",major="252",minor="4",model="",path="",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="dm-5",major="252",minor="5",model="",path="",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="mmcblk0",major="179",minor="0",model="",path="platform-df2969f3.mmc",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="mmcblk0p1",major="179",minor="1",model="",path="platform-df2969f3.mmc",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="mmcblk0p2",major="179",minor="2",model="",path="platform-df2969f3.mmc",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="nvme0n1",major="259",minor="0",model="SAMSUNG EHFTF55LURSY-000Y9",path="pci-0000:02:00.0-nvme-1",removable="",revision="4NBTUY95",rotational="0",serial="S252B6CU1HG3M1",wwn="eui.p3vbbiejx5aae2r3"} 1 +node_disk_info{bus="ata",device="sda",major="8",minor="0",model="TOSHIBA_KSDB4U86",path="pci-0000:3b:00.0-sas-phy7-lun-0",removable="",revision="0102",rotational="1",serial="2160A0D5FVGG",wwn="0x7c72382b8de36a64"} 1 +node_disk_info{bus="ata",device="sdb",major="8",minor="16",model="SuperMicro_SSD",path="pci-0000:00:1f.2-ata-1",removable="",revision="0R",rotational="0",serial="SMC0E1B87ABBB16BD84E",wwn="0xe1b87abbb16bd84e"} 1 +node_disk_info{bus="ata",device="sdc",major="8",minor="32",model="INTEL_SSDS9X9SI0",path="pci-0000:00:1f.2-ata-4",removable="",revision="0100",rotational="0",serial="3EWB5Y25CWQWA7EH1U",wwn="0x58907ddc573a5de"} 1 +node_disk_info{bus="usb",device="sr0",major="11",minor="0",model="Virtual_CDROM0",path="pci-0000:00:14.0-usb-0:1.1:1.0-scsi-0:0:0:0",removable="",revision="1.00",rotational="0",serial="AAAABBBBCCCC1",wwn=""} 1 +node_disk_info{bus="",device="vda",major="254",minor="0",model="",path="pci-0000:00:06.0",removable="",revision="",rotational="0",serial="",wwn=""} 1 # HELP node_disk_io_now The number of I/Os currently in progress. # TYPE node_disk_io_now gauge node_disk_io_now{device="dm-0"} 0 diff --git a/collector/fixtures/e2e-output.txt b/collector/fixtures/e2e-output.txt index 8598f447ca..c242303280 100644 --- a/collector/fixtures/e2e-output.txt +++ b/collector/fixtures/e2e-output.txt @@ -510,21 +510,21 @@ node_disk_flush_requests_time_seconds_total{device="sdc"} 1.944 node_disk_flush_requests_total{device="sdc"} 1555 # HELP node_disk_info Info of /sys/block/. # TYPE node_disk_info gauge -node_disk_info{device="dm-0",major="252",minor="0",model="",path="",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="dm-1",major="252",minor="1",model="",path="",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="dm-2",major="252",minor="2",model="",path="",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="dm-3",major="252",minor="3",model="",path="",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="dm-4",major="252",minor="4",model="",path="",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="dm-5",major="252",minor="5",model="",path="",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="mmcblk0",major="179",minor="0",model="",path="platform-df2969f3.mmc",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="mmcblk0p1",major="179",minor="1",model="",path="platform-df2969f3.mmc",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="mmcblk0p2",major="179",minor="2",model="",path="platform-df2969f3.mmc",revision="",rotational="0",serial="",wwn=""} 1 -node_disk_info{device="nvme0n1",major="259",minor="0",model="SAMSUNG EHFTF55LURSY-000Y9",path="pci-0000:02:00.0-nvme-1",revision="4NBTUY95",rotational="0",serial="S252B6CU1HG3M1",wwn="eui.p3vbbiejx5aae2r3"} 1 -node_disk_info{device="sda",major="8",minor="0",model="TOSHIBA_KSDB4U86",path="pci-0000:3b:00.0-sas-phy7-lun-0",revision="0102",rotational="1",serial="2160A0D5FVGG",wwn="0x7c72382b8de36a64"} 1 -node_disk_info{device="sdb",major="8",minor="16",model="SuperMicro_SSD",path="pci-0000:00:1f.2-ata-1",revision="0R",rotational="0",serial="SMC0E1B87ABBB16BD84E",wwn="0xe1b87abbb16bd84e"} 1 -node_disk_info{device="sdc",major="8",minor="32",model="INTEL_SSDS9X9SI0",path="pci-0000:00:1f.2-ata-4",revision="0100",rotational="0",serial="3EWB5Y25CWQWA7EH1U",wwn="0x58907ddc573a5de"} 1 -node_disk_info{device="sr0",major="11",minor="0",model="Virtual_CDROM0",path="pci-0000:00:14.0-usb-0:1.1:1.0-scsi-0:0:0:0",revision="1.00",rotational="0",serial="AAAABBBBCCCC1",wwn=""} 1 -node_disk_info{device="vda",major="254",minor="0",model="",path="pci-0000:00:06.0",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="dm-0",major="252",minor="0",model="",path="",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="dm-1",major="252",minor="1",model="",path="",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="dm-2",major="252",minor="2",model="",path="",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="dm-3",major="252",minor="3",model="",path="",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="dm-4",major="252",minor="4",model="",path="",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="dm-5",major="252",minor="5",model="",path="",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="mmcblk0",major="179",minor="0",model="",path="platform-df2969f3.mmc",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="mmcblk0p1",major="179",minor="1",model="",path="platform-df2969f3.mmc",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="mmcblk0p2",major="179",minor="2",model="",path="platform-df2969f3.mmc",removable="",revision="",rotational="0",serial="",wwn=""} 1 +node_disk_info{bus="",device="nvme0n1",major="259",minor="0",model="SAMSUNG EHFTF55LURSY-000Y9",path="pci-0000:02:00.0-nvme-1",removable="",revision="4NBTUY95",rotational="0",serial="S252B6CU1HG3M1",wwn="eui.p3vbbiejx5aae2r3"} 1 +node_disk_info{bus="ata",device="sda",major="8",minor="0",model="TOSHIBA_KSDB4U86",path="pci-0000:3b:00.0-sas-phy7-lun-0",removable="",revision="0102",rotational="1",serial="2160A0D5FVGG",wwn="0x7c72382b8de36a64"} 1 +node_disk_info{bus="ata",device="sdb",major="8",minor="16",model="SuperMicro_SSD",path="pci-0000:00:1f.2-ata-1",removable="",revision="0R",rotational="0",serial="SMC0E1B87ABBB16BD84E",wwn="0xe1b87abbb16bd84e"} 1 +node_disk_info{bus="ata",device="sdc",major="8",minor="32",model="INTEL_SSDS9X9SI0",path="pci-0000:00:1f.2-ata-4",removable="",revision="0100",rotational="0",serial="3EWB5Y25CWQWA7EH1U",wwn="0x58907ddc573a5de"} 1 +node_disk_info{bus="usb",device="sr0",major="11",minor="0",model="Virtual_CDROM0",path="pci-0000:00:14.0-usb-0:1.1:1.0-scsi-0:0:0:0",removable="",revision="1.00",rotational="0",serial="AAAABBBBCCCC1",wwn=""} 1 +node_disk_info{bus="",device="vda",major="254",minor="0",model="",path="pci-0000:00:06.0",removable="",revision="",rotational="0",serial="",wwn=""} 1 # HELP node_disk_io_now The number of I/Os currently in progress. # TYPE node_disk_io_now gauge node_disk_io_now{device="dm-0"} 0 diff --git a/collector/rapl_linux.go b/collector/rapl_linux.go index 4cfe786350..13982b3304 100644 --- a/collector/rapl_linux.go +++ b/collector/rapl_linux.go @@ -19,13 +19,14 @@ package collector import ( "errors" "fmt" - "github.com/alecthomas/kingpin/v2" - "github.com/prometheus/client_golang/prometheus" - "github.com/prometheus/procfs/sysfs" "log/slog" "os" "path/filepath" "strconv" + + "github.com/alecthomas/kingpin/v2" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/procfs/sysfs" ) const raplCollectorSubsystem = "rapl"