collector: add dmmultipath collector for DM-multipath sysfs metrics - #3581
Conversation
|
Hi @SuperQ , I created this PR for a new multipath collector. |
2ec5320 to
4666659
Compare
| func normalizeDMPathState(raw string) string { | ||
| switch raw { | ||
| case "running", "offline", "blocked", "transport-offline": | ||
| return raw | ||
| case "created", "quiesce": | ||
| return raw | ||
| default: | ||
| return "unknown" | ||
| } | ||
| } |
There was a problem hiding this comment.
The individual paths of multipath can be different devices with different states. For example,
I tested with NVMeoF in dm-multipath (to test #3579 in a single virtual machine) and NVMe states are quite different. A "live" NVMe device ends up as "unknown" and node_dmmultipath_device_paths_active is then zero.
If only SCSI is being considered for this collector, then it should be reflected in help texts of all metrics or the collector documentation, not only in node_dmmultipath_path_state. I understand that NVMe has its own multipath and typically does not use dm-multipath, still, explicit is better than implicit.
There was a problem hiding this comment.
In addition, the Linux kernel can report more states for SCSI. I'd appreciate at least a comment why e.g. "deleted" is reported as "unknown".
There was a problem hiding this comment.
Thanks for testing this!
I've updated the collector to pass the raw device state through, with no normalization or fixed enum.
The device_paths_active metric now counts both SCSI running and NVMe live as active paths, so your NVMe test case should report correctly.
The metric help texts have been updated to be device-type agnostic.
The raw value from /sys/block/<dev>/device/state is passed through as-is in path_state, so deleted, blocked, transport-offline, etc. will all appear as reported by the kernel.
I also opened the sysfs parsing as a separate PR in prometheus/procfs (prometheus/procfs#796) as requested by @simonpasquier.
|
|
||
| // scanDMMultipathDevices discovers DM-multipath devices by scanning | ||
| // /sys/block/dm-* and filtering on dm/uuid prefix "mpath-". | ||
| func scanDMMultipathDevices(sysfsBase string) ([]dmMultipathDevice, error) { |
There was a problem hiding this comment.
this functionality should probably land into https://github.com/prometheus/procfs first.
4666659 to
812baac
Compare
|
Results example: |
|
|
812baac to
a8bde97
Compare
|
@simonpasquier Thank you for catching this! |
66fc703 to
70e0645
Compare
|
PR is failing since its based on prometheus/procfs#796 which is still not merged |
70e0645 to
618342b
Compare
|
Hi @jan--f, @SuperQ — the procfs dependency (prometheus/procfs#796) is now merged. This PR is ready for review. Thank you. |
04dad44 to
cbb85f7
Compare
|
Hi @SuperQ , Please review this PR, Thank you in advance. |
313d3f5 to
cfa742c
Compare
jan--f
left a comment
There was a problem hiding this comment.
The fixture fix might have been better as a separate commit or even a separate PR. Please at least reference Fixes: https://github.com/prometheus/node_exporter/issues/3691 in the PR description.
5b56619 to
a694f19
Compare
7d7d795 to
f23e2b3
Compare
|
Rebased. |
cb3c4e3 to
ded7535
Compare
| deviceInfo *prometheus.Desc | ||
| deviceActive *prometheus.Desc | ||
| deviceSizeBytes *prometheus.Desc | ||
| devicePaths *prometheus.Desc | ||
| devicePathsActive *prometheus.Desc | ||
| devicePathsFailed *prometheus.Desc | ||
| pathState *prometheus.Desc |
There was a problem hiding this comment.
One thing that would help with the auto-docs support is to make these package level vars, rather than create the prometheus.Desc every time NewDMMultipathCollector(). We've been slowly migrating to this pattern across collectors.
See #3575
SuperQ
left a comment
There was a problem hiding this comment.
Besides the package var thing, this looks good.
Add a new collector that reads /sys/block/dm-* to discover Device Mapper multipath devices and expose path health metrics. Enabled by default; the collector is a no-op on systems without multipath. Multipath devices are identified by checking that dm/uuid starts with "mpath-". The path state is reported as-is from /sys/block/<dev>/device/state, supporting both SCSI and NVMe devices without hardcoding a fixed set of states. Exposed metrics: - node_dmmultipath_device_info - node_dmmultipath_device_active - node_dmmultipath_device_size_bytes - node_dmmultipath_device_paths - node_dmmultipath_device_paths_active - node_dmmultipath_device_paths_failed - node_dmmultipath_path_state Signed-off-by: Shirly Radco <sradco@redhat.com> Co-authored-by: AI Assistant <noreply@cursor.com>
ded7535 to
32fbfd4
Compare
Thank you @SuperQ , I updated the PR |
Propose a new component that maps CSI volumes to their underlying node block devices, exposing the mapping as Prometheus metrics. This enables correlating storage path health (multipath, NVMe-oF) with impacted Kubernetes workloads via PromQL joins. The exporter is a standalone DaemonSet — it does not introduce new gRPC RPCs or CRDs. It reads kubelet metadata and host sysfs. Related upstream work: - prometheus/node_exporter#3581 (dmmultipath collector, merged) - prometheus/node_exporter#3579 (nvmesubsystem collector, merged) - openshift-virtualization/csi-volume-device-exporter#1 (reference impl) Signed-off-by: Shirly Radco <sradco@redhat.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Propose a new component that maps CSI volumes to their underlying node block devices, exposing the mapping as Prometheus metrics. This enables correlating storage path health (multipath, NVMe-oF) with impacted Kubernetes workloads via PromQL joins. The exporter is a standalone DaemonSet — it does not introduce new gRPC RPCs or CRDs. It reads kubelet metadata and host sysfs. Related upstream work: - prometheus/node_exporter#3581 (dmmultipath collector, merged) - prometheus/node_exporter#3579 (nvmesubsystem collector, merged) - openshift-virtualization/csi-volume-device-exporter#1 (reference impl) Signed-off-by: Shirly Radco <sradco@redhat.com> Co-authored-by: Cursor <cursoragent@cursor.com>
* [FEATURE] mountstats: Add NFS mountpoint info metric #3554 * [FEATURE] nvmesubsystem: Add new collector #3579 * [FEATURE] dmmultipath: Add new collector #3581 * [FEATURE] infiniband: Add device filtering option #3694 * [ENHANCEMENT] hwmon: disambiguate colliding chip labels #3646 * [ENHANCEMENT] cpufreq: Add support for cpuinfo_avg_freq #3712 * [ENHANCEMENT] filesystem: Support ext4 super block emergency_ro flag #3717 * [ENHANCEMENT] edac: Add per-channel error metrics with DIMM labels #3720 * [BUGFIX] diskstats: Only enforce mutual exclusivity for non-empty values #3617 * [BUGFIX] thermal_zone: Handle EINVAL errors gracefully #3657 * [BUGFIX] filesystem: Add comma separator in mount options #3659 * [BUGFIX] diskstats: Fix rotational queue stats scrape regression #3686 * [BUGFIX] filesystem: Prevent panic on mount points with non-UTF-8 names #3687 Signed-off-by: Ben Kochie <superq@gmail.com>
….1 ➔ v1.12.0) (#297) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [quay.io/prometheus/node-exporter](https://github.com/prometheus/node_exporter) | minor | `v1.11.1` → `v1.12.0` | --- ### Release Notes <details> <summary>prometheus/node_exporter (quay.io/prometheus/node-exporter)</summary> ### [`v1.12.0`](https://github.com/prometheus/node_exporter/releases/tag/v1.12.0): 1.12.0 / 2026-07-10 [Compare Source](prometheus/node_exporter@v1.11.1...v1.12.0) - \[FEATURE] mountstats: Add NFS mountpoint info metric [#​3554](prometheus/node_exporter#3554) - \[FEATURE] nvmesubsystem: Add new collector [#​3579](prometheus/node_exporter#3579) - \[FEATURE] dmmultipath: Add new collector [#​3581](prometheus/node_exporter#3581) - \[FEATURE] infiniband: Add device filtering option [#​3694](prometheus/node_exporter#3694) - \[ENHANCEMENT] hwmon: disambiguate colliding chip labels [#​3646](prometheus/node_exporter#3646) - \[ENHANCEMENT] cpufreq: Add support for cpuinfo\_avg\_freq [#​3712](prometheus/node_exporter#3712) - \[ENHANCEMENT] filesystem: Support ext4 super block emergency\_ro flag [#​3717](prometheus/node_exporter#3717) - \[ENHANCEMENT] edac: Add per-channel error metrics with DIMM labels [#​3720](prometheus/node_exporter#3720) - \[BUGFIX] diskstats: Only enforce mutual exclusivity for non-empty values [#​3617](prometheus/node_exporter#3617) - \[BUGFIX] thermal\_zone: Handle EINVAL errors gracefully [#​3657](prometheus/node_exporter#3657) - \[BUGFIX] filesystem: Add comma separator in mount options [#​3659](prometheus/node_exporter#3659) - \[BUGFIX] diskstats: Fix rotational queue stats scrape regression [#​3686](prometheus/node_exporter#3686) - \[BUGFIX] filesystem: Prevent panic on mount points with non-UTF-8 names [#​3687](prometheus/node_exporter#3687) </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Warsaw) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTcuNCIsInVwZGF0ZWRJblZlciI6IjQzLjI1Ny40IiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbInJlbm92YXRlL2NvbnRhaW5lciIsInR5cGUvbWlub3IiXX0=--> Reviewed-on: https://git.ajgon.casa/deedee/mark13/pulls/297
….1 ➔ v1.12.0) (#1526) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [quay.io/prometheus/node-exporter](https://github.com/prometheus/node_exporter) | minor | `v1.11.1` → `v1.12.0` | --- ### Release Notes <details> <summary>prometheus/node_exporter (quay.io/prometheus/node-exporter)</summary> ### [`v1.12.0`](https://github.com/prometheus/node_exporter/releases/tag/v1.12.0): 1.12.0 / 2026-07-10 [Compare Source](prometheus/node_exporter@v1.11.1...v1.12.0) - \[FEATURE] mountstats: Add NFS mountpoint info metric [#​3554](prometheus/node_exporter#3554) - \[FEATURE] nvmesubsystem: Add new collector [#​3579](prometheus/node_exporter#3579) - \[FEATURE] dmmultipath: Add new collector [#​3581](prometheus/node_exporter#3581) - \[FEATURE] infiniband: Add device filtering option [#​3694](prometheus/node_exporter#3694) - \[ENHANCEMENT] hwmon: disambiguate colliding chip labels [#​3646](prometheus/node_exporter#3646) - \[ENHANCEMENT] cpufreq: Add support for cpuinfo\_avg\_freq [#​3712](prometheus/node_exporter#3712) - \[ENHANCEMENT] filesystem: Support ext4 super block emergency\_ro flag [#​3717](prometheus/node_exporter#3717) - \[ENHANCEMENT] edac: Add per-channel error metrics with DIMM labels [#​3720](prometheus/node_exporter#3720) - \[BUGFIX] diskstats: Only enforce mutual exclusivity for non-empty values [#​3617](prometheus/node_exporter#3617) - \[BUGFIX] thermal\_zone: Handle EINVAL errors gracefully [#​3657](prometheus/node_exporter#3657) - \[BUGFIX] filesystem: Add comma separator in mount options [#​3659](prometheus/node_exporter#3659) - \[BUGFIX] diskstats: Fix rotational queue stats scrape regression [#​3686](prometheus/node_exporter#3686) - \[BUGFIX] filesystem: Prevent panic on mount points with non-UTF-8 names [#​3687](prometheus/node_exporter#3687) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL21pbm9yIl19--> Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/1526
….12.0 (#511) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [quay.io/prometheus/node-exporter](https://github.com/prometheus/node_exporter) | minor | `v1.11.1` → `v1.12.0` | --- ### Release Notes <details> <summary>prometheus/node_exporter (quay.io/prometheus/node-exporter)</summary> ### [`v1.12.0`](https://github.com/prometheus/node_exporter/releases/tag/v1.12.0): 1.12.0 / 2026-07-10 [Compare Source](prometheus/node_exporter@v1.11.1...v1.12.0) - \[FEATURE] mountstats: Add NFS mountpoint info metric [#​3554](prometheus/node_exporter#3554) - \[FEATURE] nvmesubsystem: Add new collector [#​3579](prometheus/node_exporter#3579) - \[FEATURE] dmmultipath: Add new collector [#​3581](prometheus/node_exporter#3581) - \[FEATURE] infiniband: Add device filtering option [#​3694](prometheus/node_exporter#3694) - \[ENHANCEMENT] hwmon: disambiguate colliding chip labels [#​3646](prometheus/node_exporter#3646) - \[ENHANCEMENT] cpufreq: Add support for cpuinfo\_avg\_freq [#​3712](prometheus/node_exporter#3712) - \[ENHANCEMENT] filesystem: Support ext4 super block emergency\_ro flag [#​3717](prometheus/node_exporter#3717) - \[ENHANCEMENT] edac: Add per-channel error metrics with DIMM labels [#​3720](prometheus/node_exporter#3720) - \[BUGFIX] diskstats: Only enforce mutual exclusivity for non-empty values [#​3617](prometheus/node_exporter#3617) - \[BUGFIX] thermal\_zone: Handle EINVAL errors gracefully [#​3657](prometheus/node_exporter#3657) - \[BUGFIX] filesystem: Add comma separator in mount options [#​3659](prometheus/node_exporter#3659) - \[BUGFIX] diskstats: Fix rotational queue stats scrape regression [#​3686](prometheus/node_exporter#3686) - \[BUGFIX] filesystem: Prevent panic on mount points with non-UTF-8 names [#​3687](prometheus/node_exporter#3687) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTIuMSIsInVwZGF0ZWRJblZlciI6IjQzLjI1Mi4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
….1 ➔ v1.12.0) (#47) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [quay.io/prometheus/node-exporter](https://github.com/prometheus/node_exporter) | minor | `v1.11.1` → `v1.12.0` | --- ### Release Notes <details> <summary>prometheus/node_exporter (quay.io/prometheus/node-exporter)</summary> ### [`v1.12.0`](https://github.com/prometheus/node_exporter/releases/tag/v1.12.0): 1.12.0 / 2026-07-10 [Compare Source](prometheus/node_exporter@v1.11.1...v1.12.0) - \[FEATURE] mountstats: Add NFS mountpoint info metric [#​3554](prometheus/node_exporter#3554) - \[FEATURE] nvmesubsystem: Add new collector [#​3579](prometheus/node_exporter#3579) - \[FEATURE] dmmultipath: Add new collector [#​3581](prometheus/node_exporter#3581) - \[FEATURE] infiniband: Add device filtering option [#​3694](prometheus/node_exporter#3694) - \[ENHANCEMENT] hwmon: disambiguate colliding chip labels [#​3646](prometheus/node_exporter#3646) - \[ENHANCEMENT] cpufreq: Add support for cpuinfo\_avg\_freq [#​3712](prometheus/node_exporter#3712) - \[ENHANCEMENT] filesystem: Support ext4 super block emergency\_ro flag [#​3717](prometheus/node_exporter#3717) - \[ENHANCEMENT] edac: Add per-channel error metrics with DIMM labels [#​3720](prometheus/node_exporter#3720) - \[BUGFIX] diskstats: Only enforce mutual exclusivity for non-empty values [#​3617](prometheus/node_exporter#3617) - \[BUGFIX] thermal\_zone: Handle EINVAL errors gracefully [#​3657](prometheus/node_exporter#3657) - \[BUGFIX] filesystem: Add comma separator in mount options [#​3659](prometheus/node_exporter#3659) - \[BUGFIX] diskstats: Fix rotational queue stats scrape regression [#​3686](prometheus/node_exporter#3686) - \[BUGFIX] filesystem: Prevent panic on mount points with non-UTF-8 names [#​3687](prometheus/node_exporter#3687) </details> --- ### Configuration 📅 **Schedule**: (in timezone America/New_York) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNjAuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI2MC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL21pbm9yIl19--> Reviewed-on: https://git.greyrock.io/greyrock-labs/home-ops/pulls/47
….1 ➔ v1.12.0) (#297) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [quay.io/prometheus/node-exporter](https://github.com/prometheus/node_exporter) | minor | `v1.11.1` → `v1.12.0` | --- ### Release Notes <details> <summary>prometheus/node_exporter (quay.io/prometheus/node-exporter)</summary> ### [`v1.12.0`](https://github.com/prometheus/node_exporter/releases/tag/v1.12.0): 1.12.0 / 2026-07-10 [Compare Source](prometheus/node_exporter@v1.11.1...v1.12.0) - \[FEATURE] mountstats: Add NFS mountpoint info metric [#​3554](prometheus/node_exporter#3554) - \[FEATURE] nvmesubsystem: Add new collector [#​3579](prometheus/node_exporter#3579) - \[FEATURE] dmmultipath: Add new collector [#​3581](prometheus/node_exporter#3581) - \[FEATURE] infiniband: Add device filtering option [#​3694](prometheus/node_exporter#3694) - \[ENHANCEMENT] hwmon: disambiguate colliding chip labels [#​3646](prometheus/node_exporter#3646) - \[ENHANCEMENT] cpufreq: Add support for cpuinfo\_avg\_freq [#​3712](prometheus/node_exporter#3712) - \[ENHANCEMENT] filesystem: Support ext4 super block emergency\_ro flag [#​3717](prometheus/node_exporter#3717) - \[ENHANCEMENT] edac: Add per-channel error metrics with DIMM labels [#​3720](prometheus/node_exporter#3720) - \[BUGFIX] diskstats: Only enforce mutual exclusivity for non-empty values [#​3617](prometheus/node_exporter#3617) - \[BUGFIX] thermal\_zone: Handle EINVAL errors gracefully [#​3657](prometheus/node_exporter#3657) - \[BUGFIX] filesystem: Add comma separator in mount options [#​3659](prometheus/node_exporter#3659) - \[BUGFIX] diskstats: Fix rotational queue stats scrape regression [#​3686](prometheus/node_exporter#3686) - \[BUGFIX] filesystem: Prevent panic on mount points with non-UTF-8 names [#​3687](prometheus/node_exporter#3687) </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Warsaw) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTcuNCIsInVwZGF0ZWRJblZlciI6IjQzLjI1Ny40IiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbInJlbm92YXRlL2NvbnRhaW5lciIsInR5cGUvbWlub3IiXX0=--> Reviewed-on: https://git.ajgon.casa/deedee/mark13/pulls/297
….12.1 ##### [\`v1.12.1\`](https://github.com/prometheus/node_exporter/releases/tag/v1.12.1) - \[BUGFIX] perf: Fix perf profiler flag handling [#3731](prometheus/node_exporter#3731) - \[BUGFIX] edac: Fix optional csrow ue\_count collection [#3734](prometheus/node_exporter#3734) --- ##### [\`v1.12.0\`](https://github.com/prometheus/node_exporter/releases/tag/v1.12.0) - \[FEATURE] mountstats: Add NFS mountpoint info metric [#3554](prometheus/node_exporter#3554) - \[FEATURE] nvmesubsystem: Add new collector [#3579](prometheus/node_exporter#3579) - \[FEATURE] dmmultipath: Add new collector [#3581](prometheus/node_exporter#3581) - \[FEATURE] infiniband: Add device filtering option [#3694](prometheus/node_exporter#3694) - \[ENHANCEMENT] hwmon: disambiguate colliding chip labels [#3646](prometheus/node_exporter#3646) - \[ENHANCEMENT] cpufreq: Add support for cpuinfo\_avg\_freq [#3712](prometheus/node_exporter#3712) - \[ENHANCEMENT] filesystem: Support ext4 super block emergency\_ro flag [#3717](prometheus/node_exporter#3717) - \[ENHANCEMENT] edac: Add per-channel error metrics with DIMM labels [#3720](prometheus/node_exporter#3720) - \[BUGFIX] diskstats: Only enforce mutual exclusivity for non-empty values [#3617](prometheus/node_exporter#3617) - \[BUGFIX] thermal\_zone: Handle EINVAL errors gracefully [#3657](prometheus/node_exporter#3657) - \[BUGFIX] filesystem: Add comma separator in mount options [#3659](prometheus/node_exporter#3659) - \[BUGFIX] diskstats: Fix rotational queue stats scrape regression [#3686](prometheus/node_exporter#3686) - \[BUGFIX] filesystem: Prevent panic on mount points with non-UTF-8 names [#3687](prometheus/node_exporter#3687) --- ##### [\`v1.11.1\`](https://github.com/prometheus/node_exporter/releases/tag/v1.11.1) - \[BUGFIX] Fix kernel\_hung for no data [#3613](prometheus/node_exporter#3613) --- ##### [\`v1.11.0\`](https://github.com/prometheus/node_exporter/releases/tag/v1.11.0) - \[CHANGE] Adds distroless container image. [#3592](prometheus/node_exporter#3592) - \[FEATURE] infiniband: Add `hw_counters` metrics [#2827](prometheus/node_exporter#2827) - \[FEATURE] kernel\_hung: Add collector for kernel hung tasks [#3470](prometheus/node_exporter#3470) - \[FEATURE] mixin: Add "All" option to cluster variable in dashboards [#3509](prometheus/node_exporter#3509) - \[FEATURE] netlink: Add node\_network\_altnames\_info metric [#3541](prometheus/node_exporter#3541) - \[FEATURE] thermal: Add support for CPU temperature metrics on Apple Silicon [#3547](prometheus/node_exporter#3547) - \[FEATURE] bcachefs: Add new collector for bcachefs [#3523](prometheus/node_exporter#3523) - \[ENHANCEMENT] mixin: Make devices in network graphs configurable [#3525](prometheus/node_exporter#3525) - \[ENHANCEMENT] nvme: Add namespace parameters [#3360](prometheus/node_exporter#3360) - \[BUGFIX] netdev: Respect deviceFilter for `node_network_address_info` metric [#3340](prometheus/node_exporter#3340) - \[BUGFIX] mountstats: Fix multiple transports statistics labeling [#3358](prometheus/node_exporter#3358) - \[BUGFIX] diskstats: Fix panic when using device-include flag only [#3603](prometheus/node_exporter#3603)
….1 ➔ v1.12.0) (#297) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [quay.io/prometheus/node-exporter](https://github.com/prometheus/node_exporter) | minor | `v1.11.1` → `v1.12.0` | --- ### Release Notes <details> <summary>prometheus/node_exporter (quay.io/prometheus/node-exporter)</summary> ### [`v1.12.0`](https://github.com/prometheus/node_exporter/releases/tag/v1.12.0): 1.12.0 / 2026-07-10 [Compare Source](prometheus/node_exporter@v1.11.1...v1.12.0) - \[FEATURE] mountstats: Add NFS mountpoint info metric [#​3554](prometheus/node_exporter#3554) - \[FEATURE] nvmesubsystem: Add new collector [#​3579](prometheus/node_exporter#3579) - \[FEATURE] dmmultipath: Add new collector [#​3581](prometheus/node_exporter#3581) - \[FEATURE] infiniband: Add device filtering option [#​3694](prometheus/node_exporter#3694) - \[ENHANCEMENT] hwmon: disambiguate colliding chip labels [#​3646](prometheus/node_exporter#3646) - \[ENHANCEMENT] cpufreq: Add support for cpuinfo\_avg\_freq [#​3712](prometheus/node_exporter#3712) - \[ENHANCEMENT] filesystem: Support ext4 super block emergency\_ro flag [#​3717](prometheus/node_exporter#3717) - \[ENHANCEMENT] edac: Add per-channel error metrics with DIMM labels [#​3720](prometheus/node_exporter#3720) - \[BUGFIX] diskstats: Only enforce mutual exclusivity for non-empty values [#​3617](prometheus/node_exporter#3617) - \[BUGFIX] thermal\_zone: Handle EINVAL errors gracefully [#​3657](prometheus/node_exporter#3657) - \[BUGFIX] filesystem: Add comma separator in mount options [#​3659](prometheus/node_exporter#3659) - \[BUGFIX] diskstats: Fix rotational queue stats scrape regression [#​3686](prometheus/node_exporter#3686) - \[BUGFIX] filesystem: Prevent panic on mount points with non-UTF-8 names [#​3687](prometheus/node_exporter#3687) </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Warsaw) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTcuNCIsInVwZGF0ZWRJblZlciI6IjQzLjI1Ny40IiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbInJlbm92YXRlL2NvbnRhaW5lciIsInR5cGUvbWlub3IiXX0=--> Reviewed-on: https://git.ajgon.casa/deedee/mark13/pulls/297
….12.1 ##### [\`v1.12.1\`](https://github.com/prometheus/node_exporter/releases/tag/v1.12.1) - \[BUGFIX] perf: Fix perf profiler flag handling [#3731](prometheus/node_exporter#3731) - \[BUGFIX] edac: Fix optional csrow ue\_count collection [#3734](prometheus/node_exporter#3734) --- ##### [\`v1.12.0\`](https://github.com/prometheus/node_exporter/releases/tag/v1.12.0) - \[FEATURE] mountstats: Add NFS mountpoint info metric [#3554](prometheus/node_exporter#3554) - \[FEATURE] nvmesubsystem: Add new collector [#3579](prometheus/node_exporter#3579) - \[FEATURE] dmmultipath: Add new collector [#3581](prometheus/node_exporter#3581) - \[FEATURE] infiniband: Add device filtering option [#3694](prometheus/node_exporter#3694) - \[ENHANCEMENT] hwmon: disambiguate colliding chip labels [#3646](prometheus/node_exporter#3646) - \[ENHANCEMENT] cpufreq: Add support for cpuinfo\_avg\_freq [#3712](prometheus/node_exporter#3712) - \[ENHANCEMENT] filesystem: Support ext4 super block emergency\_ro flag [#3717](prometheus/node_exporter#3717) - \[ENHANCEMENT] edac: Add per-channel error metrics with DIMM labels [#3720](prometheus/node_exporter#3720) - \[BUGFIX] diskstats: Only enforce mutual exclusivity for non-empty values [#3617](prometheus/node_exporter#3617) - \[BUGFIX] thermal\_zone: Handle EINVAL errors gracefully [#3657](prometheus/node_exporter#3657) - \[BUGFIX] filesystem: Add comma separator in mount options [#3659](prometheus/node_exporter#3659) - \[BUGFIX] diskstats: Fix rotational queue stats scrape regression [#3686](prometheus/node_exporter#3686) - \[BUGFIX] filesystem: Prevent panic on mount points with non-UTF-8 names [#3687](prometheus/node_exporter#3687) --- ##### [\`v1.11.1\`](https://github.com/prometheus/node_exporter/releases/tag/v1.11.1) - \[BUGFIX] Fix kernel\_hung for no data [#3613](prometheus/node_exporter#3613) --- ##### [\`v1.11.0\`](https://github.com/prometheus/node_exporter/releases/tag/v1.11.0) - \[CHANGE] Adds distroless container image. [#3592](prometheus/node_exporter#3592) - \[FEATURE] infiniband: Add `hw_counters` metrics [#2827](prometheus/node_exporter#2827) - \[FEATURE] kernel\_hung: Add collector for kernel hung tasks [#3470](prometheus/node_exporter#3470) - \[FEATURE] mixin: Add "All" option to cluster variable in dashboards [#3509](prometheus/node_exporter#3509) - \[FEATURE] netlink: Add node\_network\_altnames\_info metric [#3541](prometheus/node_exporter#3541) - \[FEATURE] thermal: Add support for CPU temperature metrics on Apple Silicon [#3547](prometheus/node_exporter#3547) - \[FEATURE] bcachefs: Add new collector for bcachefs [#3523](prometheus/node_exporter#3523) - \[ENHANCEMENT] mixin: Make devices in network graphs configurable [#3525](prometheus/node_exporter#3525) - \[ENHANCEMENT] nvme: Add namespace parameters [#3360](prometheus/node_exporter#3360) - \[BUGFIX] netdev: Respect deviceFilter for `node_network_address_info` metric [#3340](prometheus/node_exporter#3340) - \[BUGFIX] mountstats: Fix multiple transports statistics labeling [#3358](prometheus/node_exporter#3358) - \[BUGFIX] diskstats: Fix panic when using device-include flag only [#3603](prometheus/node_exporter#3603)
….1 ➔ v1.12.0) (#297) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [quay.io/prometheus/node-exporter](https://github.com/prometheus/node_exporter) | minor | `v1.11.1` → `v1.12.0` | --- ### Release Notes <details> <summary>prometheus/node_exporter (quay.io/prometheus/node-exporter)</summary> ### [`v1.12.0`](https://github.com/prometheus/node_exporter/releases/tag/v1.12.0): 1.12.0 / 2026-07-10 [Compare Source](prometheus/node_exporter@v1.11.1...v1.12.0) - \[FEATURE] mountstats: Add NFS mountpoint info metric [#​3554](prometheus/node_exporter#3554) - \[FEATURE] nvmesubsystem: Add new collector [#​3579](prometheus/node_exporter#3579) - \[FEATURE] dmmultipath: Add new collector [#​3581](prometheus/node_exporter#3581) - \[FEATURE] infiniband: Add device filtering option [#​3694](prometheus/node_exporter#3694) - \[ENHANCEMENT] hwmon: disambiguate colliding chip labels [#​3646](prometheus/node_exporter#3646) - \[ENHANCEMENT] cpufreq: Add support for cpuinfo\_avg\_freq [#​3712](prometheus/node_exporter#3712) - \[ENHANCEMENT] filesystem: Support ext4 super block emergency\_ro flag [#​3717](prometheus/node_exporter#3717) - \[ENHANCEMENT] edac: Add per-channel error metrics with DIMM labels [#​3720](prometheus/node_exporter#3720) - \[BUGFIX] diskstats: Only enforce mutual exclusivity for non-empty values [#​3617](prometheus/node_exporter#3617) - \[BUGFIX] thermal\_zone: Handle EINVAL errors gracefully [#​3657](prometheus/node_exporter#3657) - \[BUGFIX] filesystem: Add comma separator in mount options [#​3659](prometheus/node_exporter#3659) - \[BUGFIX] diskstats: Fix rotational queue stats scrape regression [#​3686](prometheus/node_exporter#3686) - \[BUGFIX] filesystem: Prevent panic on mount points with non-UTF-8 names [#​3687](prometheus/node_exporter#3687) </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Warsaw) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTcuNCIsInVwZGF0ZWRJblZlciI6IjQzLjI1Ny40IiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbInJlbm92YXRlL2NvbnRhaW5lciIsInR5cGUvbWlub3IiXX0=--> Reviewed-on: https://git.ajgon.casa/deedee/mark13/pulls/297
….12.1 ##### [\`v1.12.1\`](https://github.com/prometheus/node_exporter/releases/tag/v1.12.1) - \[BUGFIX] perf: Fix perf profiler flag handling [#3731](prometheus/node_exporter#3731) - \[BUGFIX] edac: Fix optional csrow ue\_count collection [#3734](prometheus/node_exporter#3734) --- ##### [\`v1.12.0\`](https://github.com/prometheus/node_exporter/releases/tag/v1.12.0) - \[FEATURE] mountstats: Add NFS mountpoint info metric [#3554](prometheus/node_exporter#3554) - \[FEATURE] nvmesubsystem: Add new collector [#3579](prometheus/node_exporter#3579) - \[FEATURE] dmmultipath: Add new collector [#3581](prometheus/node_exporter#3581) - \[FEATURE] infiniband: Add device filtering option [#3694](prometheus/node_exporter#3694) - \[ENHANCEMENT] hwmon: disambiguate colliding chip labels [#3646](prometheus/node_exporter#3646) - \[ENHANCEMENT] cpufreq: Add support for cpuinfo\_avg\_freq [#3712](prometheus/node_exporter#3712) - \[ENHANCEMENT] filesystem: Support ext4 super block emergency\_ro flag [#3717](prometheus/node_exporter#3717) - \[ENHANCEMENT] edac: Add per-channel error metrics with DIMM labels [#3720](prometheus/node_exporter#3720) - \[BUGFIX] diskstats: Only enforce mutual exclusivity for non-empty values [#3617](prometheus/node_exporter#3617) - \[BUGFIX] thermal\_zone: Handle EINVAL errors gracefully [#3657](prometheus/node_exporter#3657) - \[BUGFIX] filesystem: Add comma separator in mount options [#3659](prometheus/node_exporter#3659) - \[BUGFIX] diskstats: Fix rotational queue stats scrape regression [#3686](prometheus/node_exporter#3686) - \[BUGFIX] filesystem: Prevent panic on mount points with non-UTF-8 names [#3687](prometheus/node_exporter#3687) --- ##### [\`v1.11.1\`](https://github.com/prometheus/node_exporter/releases/tag/v1.11.1) - \[BUGFIX] Fix kernel\_hung for no data [#3613](prometheus/node_exporter#3613) --- ##### [\`v1.11.0\`](https://github.com/prometheus/node_exporter/releases/tag/v1.11.0) - \[CHANGE] Adds distroless container image. [#3592](prometheus/node_exporter#3592) - \[FEATURE] infiniband: Add `hw_counters` metrics [#2827](prometheus/node_exporter#2827) - \[FEATURE] kernel\_hung: Add collector for kernel hung tasks [#3470](prometheus/node_exporter#3470) - \[FEATURE] mixin: Add "All" option to cluster variable in dashboards [#3509](prometheus/node_exporter#3509) - \[FEATURE] netlink: Add node\_network\_altnames\_info metric [#3541](prometheus/node_exporter#3541) - \[FEATURE] thermal: Add support for CPU temperature metrics on Apple Silicon [#3547](prometheus/node_exporter#3547) - \[FEATURE] bcachefs: Add new collector for bcachefs [#3523](prometheus/node_exporter#3523) - \[ENHANCEMENT] mixin: Make devices in network graphs configurable [#3525](prometheus/node_exporter#3525) - \[ENHANCEMENT] nvme: Add namespace parameters [#3360](prometheus/node_exporter#3360) - \[BUGFIX] netdev: Respect deviceFilter for `node_network_address_info` metric [#3340](prometheus/node_exporter#3340) - \[BUGFIX] mountstats: Fix multiple transports statistics labeling [#3358](prometheus/node_exporter#3358) - \[BUGFIX] diskstats: Fix panic when using device-include flag only [#3603](prometheus/node_exporter#3603)
Summary
Add a new disabled-by-default
dmmultipathcollector that reads/sys/block/dm-*/dm/to expose Device Mapper multipath devicehealth metrics.
Exposed metrics
Enable
No special permissions required — reads only world-readable sysfs attributes.
Dependencies
build(deps): bump prometheus/procfs to v0.21.1)Test plan
testutil.GatherAndComparefor all metrics