Merge branch 'prometheus:master' into master

pull/3368/head
Ravindra Singh 2 months ago committed by GitHub
commit a9be2ab6d1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 6
      .circleci/config.yml
  2. 4
      .github/dependabot.yml
  3. 83
      .github/workflows/bsd.yml
  4. 8
      .github/workflows/container_description.yml
  5. 17
      .github/workflows/golangci-lint.yml
  6. 62
      .golangci.yml
  7. 2
      .promu-cgo.yml
  8. 2
      .promu.yml
  9. 1
      .yamllint
  10. 38
      CHANGELOG.md
  11. 3
      Makefile
  12. 260
      Makefile.common
  13. 2
      README.md
  14. 2
      VERSION
  15. 1
      collector/arp_linux.go
  16. 1
      collector/bcache_linux.go
  17. 275
      collector/bcachefs_linux.go
  18. 5
      collector/bonding_linux.go
  19. 1
      collector/bonding_linux_test.go
  20. 5
      collector/boot_time_bsd.go
  21. 4
      collector/boot_time_solaris.go
  22. 1
      collector/btrfs_linux.go
  23. 1
      collector/btrfs_linux_test.go
  24. 1
      collector/buddyinfo.go
  25. 1
      collector/cgroups_linux.go
  26. 2
      collector/collector.go
  27. 1
      collector/conntrack_linux.go
  28. 1
      collector/cpu_aix.go
  29. 1
      collector/cpu_common.go
  30. 1
      collector/cpu_darwin.go
  31. 1
      collector/cpu_dragonfly.go
  32. 1
      collector/cpu_dragonfly_test.go
  33. 1
      collector/cpu_freebsd.go
  34. 10
      collector/cpu_linux.go
  35. 1
      collector/cpu_linux_test.go
  36. 1
      collector/cpu_netbsd.go
  37. 1
      collector/cpu_netbsd_test.go
  38. 1
      collector/cpu_openbsd.go
  39. 1
      collector/cpu_solaris.go
  40. 1
      collector/cpufreq_common.go
  41. 5
      collector/cpufreq_linux.go
  42. 1
      collector/cpufreq_solaris.go
  43. 1
      collector/devstat_dragonfly.go
  44. 1
      collector/devstat_freebsd.go
  45. 1
      collector/diskstats_aix.go
  46. 2
      collector/diskstats_common.go
  47. 1
      collector/diskstats_darwin.go
  48. 36
      collector/diskstats_linux.go
  49. 7
      collector/diskstats_linux_test.go
  50. 1
      collector/diskstats_openbsd.go
  51. 1
      collector/diskstats_openbsd_amd64.go
  52. 1
      collector/dmi.go
  53. 1
      collector/drbd_linux.go
  54. 1
      collector/drm_linux.go
  55. 1
      collector/edac_linux.go
  56. 1
      collector/entropy_linux.go
  57. 1
      collector/ethtool_linux.go
  58. 5
      collector/ethtool_linux_test.go
  59. 5
      collector/exec_bsd.go
  60. 4
      collector/fibrechannel_linux.go
  61. 1
      collector/filefd_linux.go
  62. 1
      collector/filefd_linux_test.go
  63. 1
      collector/filesystem_aix.go
  64. 1
      collector/filesystem_bsd.go
  65. 4
      collector/filesystem_common.go
  66. 1
      collector/filesystem_freebsd.go
  67. 102
      collector/filesystem_linux.go
  68. 56
      collector/filesystem_linux_test.go
  69. 18
      collector/filesystem_macos.go
  70. 1
      collector/filesystem_netbsd.go
  71. 1
      collector/filesystem_openbsd.go
  72. 723
      collector/fixtures/e2e-64k-page-output.txt
  73. 4
      collector/fixtures/e2e-output-darwin.txt
  74. 12
      collector/fixtures/e2e-output-freebsd.txt
  75. 733
      collector/fixtures/e2e-output.txt
  76. 26
      collector/fixtures/pci.ids
  77. 95
      collector/fixtures/pcidevice-names-output.txt
  78. 1
      collector/fixtures/proc/1/mountinfo
  79. 2
      collector/fixtures/proc/swaps
  80. 5086
      collector/fixtures/sys.ttar
  81. 9
      collector/hwmon_linux.go
  82. 68
      collector/infiniband_linux.go
  83. 2
      collector/interrupts_common.go
  84. 1
      collector/interrupts_linux.go
  85. 1
      collector/interrupts_linux_test.go
  86. 1
      collector/interrupts_openbsd.go
  87. 1
      collector/interrupts_openbsd_amd64.go
  88. 1
      collector/ipvs_linux.go
  89. 1
      collector/ipvs_linux_test.go
  90. 63
      collector/kernel_hung_linux.go
  91. 1
      collector/ksmd_linux.go
  92. 2
      collector/kvm_bsd.go
  93. 1
      collector/lnstat_linux.go
  94. 2
      collector/loadavg.go
  95. 1
      collector/loadavg_aix.go
  96. 2
      collector/loadavg_bsd.go
  97. 1
      collector/loadavg_linux.go
  98. 1
      collector/loadavg_linux_test.go
  99. 1
      collector/loadavg_solaris.go
  100. 20
      collector/logind_linux.go
  101. Some files were not shown because too many files have changed in this diff Show More

@ -7,10 +7,10 @@ executors:
# should also be updated.
golang:
docker:
- image: cimg/go:1.24
- image: cimg/go:1.26
arm:
docker:
- image: cimg/go:1.24
- image: cimg/go:1.26
resource_class: arm.medium
jobs:
@ -70,7 +70,7 @@ jobs:
machine:
image: ubuntu-2404:current
environment:
DOCKER_TEST_IMAGE_NAME: quay.io/prometheus/golang-builder:1.24-base
DOCKER_TEST_IMAGE_NAME: quay.io/prometheus/golang-builder:1.26-base
REPO_PATH: github.com/prometheus/node_exporter
steps:
- prometheus/setup_environment

@ -4,3 +4,7 @@ updates:
directory: "/"
schedule:
interval: "monthly"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"

@ -13,11 +13,7 @@ permissions:
env:
GNU_TAR_VERSION: "1.35"
GO_VERSION_DRAGONFLY: "1.24.1"
GO_VERSION_FREEBSD: "123"
GO_VERSION_NETBSD: "1.24.1"
GO_VERSION_OPENBSD: "1.23.1"
GO_VERSION_SOLARIS: "1.24.1"
GO_VERSION: "1.26.0"
# To spin up one of the VMs below, see the "Debug Shell" section here: https://github.com/vmactions
jobs:
@ -26,12 +22,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: test-e2e
uses: vmactions/freebsd-vm@8873d98fd1413b5977cb2f7348fe329775159892 # v1.1.9
uses: vmactions/freebsd-vm@c9f815bc7aa0d34c9fdd0619b034a32d6ca7b57e # v1.4.2
with:
release: "15.0"
copyback: false
envs: 'GO_VERSION_FREEBSD GNU_TAR_VERSION'
envs: 'GO_VERSION GNU_TAR_VERSION'
usesh: true
prepare: |
pkg update -f
@ -40,7 +37,6 @@ jobs:
git \
gmake \
gnugrep \
go${GO_VERSION_FREEBSD} \
gsed \
gtar \
python \
@ -49,7 +45,12 @@ jobs:
echo "::group::Setup prerequisites"
set -eu
mkdir bin
ln -s $(which go${GO_VERSION_FREEBSD}) $(pwd)/bin/go
GOARCH=$(uname -m)
if [ "${GOARCH}" = "x86_64" ] ; then GOARCH="amd64" ; fi
GOGZ="go${GO_VERSION}.freebsd-${GOARCH}.tar.gz"
wget https://go.dev/dl/${GOGZ}
gtar xzf ${GOGZ}
ln -s $(pwd)/go/bin/go $(pwd)/bin/go
ln -s $(which ggrep) $(pwd)/bin/grep
ln -s $(which gmake) $(pwd)/bin/make
ln -s $(which gsed) $(pwd)/bin/sed
@ -73,12 +74,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: test-e2e
uses: vmactions/openbsd-vm@7ac70b6de6f33efc74a90c1964afa3bcf0ee4401 # v1.1.6
uses: vmactions/openbsd-vm@7fd5a3e251db9d8bdff2f34aae11a43b6be5ad60 # v1.2.4
with:
copyback: false
envs: 'GO_VERSION_OPENBSD GNU_TAR_VERSION'
envs: 'GO_VERSION GNU_TAR_VERSION'
usesh: true
prepare: |
pkg_add -u
@ -87,15 +88,20 @@ jobs:
ggrep \
git \
gmake \
go-${GO_VERSION_OPENBSD} \
gsed \
gtar-${GNU_TAR_VERSION}p0-static \
gtar-${GNU_TAR_VERSION}p1-static \
python \
wget
run: |
echo "::group::Setup prerequisites"
set -eu
mkdir bin
GOARCH=$(uname -m)
if [ "${GOARCH}" = "x86_64" ] ; then GOARCH="amd64" ; fi
GOGZ="go${GO_VERSION}.openbsd-${GOARCH}.tar.gz"
wget https://go.dev/dl/${GOGZ}
gtar xzf ${GOGZ}
ln -s $(pwd)/go/bin/go $(pwd)/bin/go
ln -s $(which ggrep) $(pwd)/bin/grep
ln -s $(which gmake) $(pwd)/bin/make
ln -s $(which gsed) $(pwd)/bin/sed
@ -119,16 +125,15 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: test-e2e
uses: vmactions/netbsd-vm@46a58bbf03682b4cb24142b97fa315ae52bed573 # v1.1.8
uses: vmactions/netbsd-vm@e04aec09540429f9cebb0e7941f7cd0c0fc3b44f # v1.3.6
with:
copyback: false
envs: 'GO_VERSION_NETBSD GNU_TAR_VERSION'
envs: 'GO_VERSION GNU_TAR_VERSION'
usesh: true
prepare: |
/usr/sbin/pkg_add -u
/usr/sbin/pkg_add \
/usr/sbin/pkg_add -u \
git \
gmake \
grep \
@ -140,7 +145,9 @@ jobs:
echo "::group::Setup prerequisites"
set -eu
mkdir bin
GOGZ="go${GO_VERSION_NETBSD}.netbsd-amd64.tar.gz"
GOARCH=$(uname -m)
if [ "${GOARCH}" = "x86_64" ] ; then GOARCH="amd64" ; fi
GOGZ="go${GO_VERSION}.netbsd-${GOARCH}.tar.gz"
wget https://go.dev/dl/${GOGZ}
gtar xzf ${GOGZ}
ln -s $(pwd)/go/bin/go $(pwd)/bin/go
@ -167,12 +174,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: test-e2e
uses: vmactions/dragonflybsd-vm@e3c420e8a2362c2496fca6e76a291abd46f5d8e7 # v1.1.0
uses: vmactions/dragonflybsd-vm@04601322b25fa8eb14f0394e46e1103084ea0199 # v1.2.6
with:
copyback: false
envs: 'GO_VERSION_DRAGONFLY'
envs: 'GO_VERSION'
usesh: true
prepare: |
pkg update && pkg upgrade -y
@ -189,7 +196,9 @@ jobs:
echo "::group::Setup prerequisites"
set -eu
mkdir bin
GOGZ="go${GO_VERSION_DRAGONFLY}.dragonfly-amd64.tar.gz"
GOARCH=$(uname -m)
if [ "${GOARCH}" = "x86_64" ] ; then GOARCH="amd64" ; fi
GOGZ="go${GO_VERSION}.dragonfly-${GOARCH}.tar.gz"
wget https://go.dev/dl/${GOGZ}
gtar xzf ${GOGZ}
ln -s $(pwd)/go/bin/go $(pwd)/bin/go
@ -217,15 +226,14 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: test-e2e
uses: vmactions/solaris-vm@cc8f82fa1a7cc746153ec3f71bf11f311f16e225 # v1.1.1
uses: vmactions/solaris-vm@69d382b4a775b25ea5955e6c1730e9d05047ca0d # v1.3.1
with:
copyback: false
envs: 'GO_VERSION_SOLARIS'
envs: 'GO_VERSION'
usesh: true
prepare: |
pkg update
pkg install \
bash \
curl \
@ -239,7 +247,9 @@ jobs:
echo "::group::Setup prerequisites"
set -eu
mkdir bin
GOGZ="go${GO_VERSION_SOLARIS}.solaris-amd64.tar.gz"
GOARCH=$(uname -m)
if [ "${GOARCH}" = "i86pc" ] ; then GOARCH="amd64" ; fi
GOGZ="go${GO_VERSION}.solaris-${GOARCH}.tar.gz"
wget https://go.dev/dl/${GOGZ}
gtar xzf ${GOGZ}
ln -s $(pwd)/go/bin/go $(pwd)/bin/go
@ -272,11 +282,11 @@ jobs:
echo "::endgroup::"
test_macos:
name: Run end-to-end tests on macOS
name: Run end-to-end tests on Darwin/MacOS
runs-on: macos-latest
steps:
- name: Checkout the repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install dependencies
run: |
brew install \
@ -287,13 +297,18 @@ jobs:
make \
gnu-sed \
gnu-tar \
go \
python3
- name: test-e2e
run: |
echo "::group::Setup prerequisites"
set -eu
mkdir bin
GOARCH=$(uname -m)
if [ "${GOARCH}" = "x86_64" ] ; then GOARCH="amd64" ; fi
GOGZ="go${GO_VERSION}.darwin-${GOARCH}.tar.gz"
wget https://go.dev/dl/${GOGZ}
gtar xzf ${GOGZ}
ln -s $(pwd)/go/bin/go $(pwd)/bin/go
ln -s $(which ggrep) $(pwd)/bin/grep
ln -s $(which gmake) $(pwd)/bin/make
ln -s $(which gsed) $(pwd)/bin/sed
@ -309,5 +324,5 @@ jobs:
echo "::group::Run End-to-End Tests"
git config --global --add safe.directory $(pwd)
make test-e2e
make test-e2e E2E_EXTRA_FLAGS='--collector.diskstats.device-include=disk[04]'
echo "::endgroup::"

@ -18,7 +18,9 @@ jobs:
if: github.repository_owner == 'prometheus' || github.repository_owner == 'prometheus-community' # Don't run this workflow on forks.
steps:
- name: git checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: Set docker hub repo name
run: echo "DOCKER_REPO_NAME=$(make docker-repo-name)" >> $GITHUB_ENV
- name: Push README to Dockerhub
@ -40,7 +42,9 @@ jobs:
if: github.repository_owner == 'prometheus' || github.repository_owner == 'prometheus-community' # Don't run this workflow on forks.
steps:
- name: git checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: Set quay.io org name
run: echo "DOCKER_REPO=$(echo quay.io/${GITHUB_REPOSITORY_OWNER} | tr -d '-')" >> $GITHUB_ENV
- name: Set quay.io repo name

@ -3,6 +3,7 @@
name: golangci-lint
on:
push:
branches: [main, master, 'release-*']
paths:
- "go.sum"
- "go.mod"
@ -10,6 +11,7 @@ on:
- "scripts/errcheck_excludes.txt"
- ".github/workflows/golangci-lint.yml"
- ".golangci.yml"
tags: ['v*']
pull_request:
permissions: # added using https://github.com/step-security/secure-repo
@ -24,16 +26,21 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: Install Go
uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0
uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
with:
go-version: 1.24.x
go-version: 1.26.x
- name: Install snmp_exporter/generator dependencies
run: sudo apt-get update && sudo apt-get -y install libsnmp-dev
if: github.repository == 'prometheus/snmp_exporter'
- name: Get golangci-lint version
id: golangci-lint-version
run: echo "version=$(make print-golangci-lint-version)" >> $GITHUB_OUTPUT
- name: Lint
uses: golangci/golangci-lint-action@55c2c1448f86e01eaae002a5a3a9624417608d84 # v6.5.2
uses: golangci/golangci-lint-action@1e7e51e771db61008b38414a730f564565cf7c20 # v9.2.0
with:
args: --verbose
version: v1.64.6
version: ${{ steps.golangci-lint-version.outputs.version }}

@ -1,32 +1,44 @@
version: "2"
linters:
enable:
- depguard
- goimports
- misspell
- revive
issues:
exclude-rules:
- path: _test.go
linters:
- errcheck
linters-settings:
depguard:
rules:
no_exec_policy:
files:
- "!$test"
deny:
- pkg: "os/exec"
desc: "Using os/exec to run sub processes it not allowed by policy"
errcheck:
exclude-functions:
settings:
depguard:
rules:
no_exec_policy:
files:
- '!$test'
deny:
- pkg: os/exec
desc: Using os/exec to run sub processes it not allowed by policy
errcheck:
# Used in HTTP handlers, any error is handled by the server itself.
- (net/http.ResponseWriter).Write
revive:
exclude-functions:
- (net/http.ResponseWriter).Write
revive:
rules:
- name: unused-parameter
severity: warning
disabled: true
exclusions:
generated: lax
presets:
- comments
- common-false-positives
- legacy
- std-error-handling
rules:
# https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unused-parameter
- name: unused-parameter
severity: warning
disabled: true
- linters:
- errcheck
path: _test.go
formatters:
enable:
- goimports
exclusions:
generated: lax
settings:
goimports:
local-prefixes:
- github.com/prometheus/node_exporter

@ -1,7 +1,7 @@
go:
# Whenever the Go version is updated here, .circle/config.yml and
# .promu.yml should also be updated.
version: 1.24
version: 1.25
cgo: true
repository:
path: github.com/prometheus/node_exporter

@ -1,7 +1,7 @@
go:
# Whenever the Go version is updated here, .circle/config.yml and
# .promu-cgo.yml should also be updated.
version: 1.24
version: 1.26
repository:
path: github.com/prometheus/node_exporter
build:

@ -2,6 +2,7 @@
extends: default
ignore: |
**/node_modules
web/api/v1/testdata/openapi_*_golden.yaml
rules:
braces:

@ -5,6 +5,44 @@
* [ENHANCEMENT]
* [BUGFIX]
## 1.10.2 / 2025-10-25
* [BUGFIX] meminfo: Fix typo in Zswap metric name #3455
## 1.10.1 / 2025-10-25
* [BUGFIX] filesystem: Fix mount points being collected multiple times #3376
* [BUGFIX] filesystem: Refactor mountinfo parsing #3452
* [BUGFIX] meminfo: Add Zswap/Zswapped metrics #3453
## 1.10.0 / 2025-10-24
* [CHANGE] mdadm: Use sysfs for RAID metrics #3031
* [CHANGE] filesystem: Add erofs in default excluded fs #3313
* [CHANGE] tcpstat: Use std lib binary.NativeEndian #3386
* [FEATURE] pcidevice: Add new collector for PCIe devices #3339
* [FEATURE] AIX: Add more metrics #3338
* [FEATURE] systemd: Add Virtualization metrics #3254
* [FEATURE] swaps: Add new collector #3428
* [ENHANCEMENT] wifi: Add packet received and transmitted metrics #3382
* [ENHANCEMENT] filesystem: Take super options into account for read-only #3387
* [ENHANCEMENT] pcidevice: Add additional metrics #3425
* [ENHANCEMENT] perf: Add `tlb_data` metrics #3436
* [BUGFIX] interrupts: Fix OpenBSD interrupt device parsing #3288
* [BUGFIX] diskstats: Simplify condition #3290
* [BUGFIX] thermal: Sanitize darwin thermal strings #3294
* [BUGFIX] filesystem: Fix Darwin collector cgo memory leak #3315
* [BUGFIX] cpufreq: Fix: collector enable #3318
* [BUGFIX] ethtool: Fix returning 0 for sanitized metrics #3335
* [BUGFIX] netdev: Fix Darwin netdev i/o bytes metric #3336
* [BUGFIX] systemd: Fix logging race #3364
* [BUGFIX] filesystem: Fix duplicate Darwin CGO import #3391
## 1.9.1 / 2025-04-01
* [BUGFIX] pressure: Fix missing IRQ on older kernels #3263
* [BUGFIX] Fix Darwin memory leak #3277
## 1.9.0 / 2025-02-17
* [CHANGE] meminfo: Convert linux implementation to use procfs lib #3049

@ -22,6 +22,7 @@ include Makefile.common
PROMTOOL_VERSION ?= 2.30.0
PROMTOOL_URL ?= https://github.com/prometheus/prometheus/releases/download/v$(PROMTOOL_VERSION)/prometheus-$(PROMTOOL_VERSION).$(GO_BUILD_PLATFORM).tar.gz
PROMTOOL ?= $(FIRST_GOPATH)/bin/promtool
E2E_EXTRA_FLAGS ?=
DOCKER_IMAGE_NAME ?= node-exporter
MACH ?= $(shell uname -m)
@ -121,7 +122,7 @@ tools:
.PHONY: test-e2e
test-e2e: build collector/fixtures/sys/.unpacked collector/fixtures/udev/.unpacked tools
@echo ">> running end-to-end tests"
./end-to-end-test.sh
./end-to-end-test.sh -e "$(E2E_EXTRA_FLAGS)"
.PHONY: skip-test-e2e
skip-test-e2e:

@ -1,4 +1,4 @@
# Copyright 2018 The Prometheus Authors
# Copyright The Prometheus Authors
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
@ -55,13 +55,14 @@ ifneq ($(shell command -v gotestsum 2> /dev/null),)
endif
endif
PROMU_VERSION ?= 0.17.0
PROMU_VERSION ?= 0.18.0
PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_VERSION)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM).tar.gz
SKIP_GOLANGCI_LINT :=
GOLANGCI_LINT :=
GOLANGCI_LINT_OPTS ?=
GOLANGCI_LINT_VERSION ?= v1.64.6
GOLANGCI_LINT_VERSION ?= v2.10.1
GOLANGCI_FMT_OPTS ?=
# golangci-lint only supports linux, darwin and windows platforms on i386/amd64/arm64.
# windows isn't included here because of the path separator being different.
ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux darwin))
@ -81,11 +82,50 @@ endif
PREFIX ?= $(shell pwd)
BIN_DIR ?= $(shell pwd)
DOCKER_IMAGE_TAG ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD))
DOCKERFILE_PATH ?= ./Dockerfile
DOCKERBUILD_CONTEXT ?= ./
DOCKER_REPO ?= prom
# Check if deprecated DOCKERFILE_PATH is set
ifdef DOCKERFILE_PATH
$(error DOCKERFILE_PATH is deprecated. Use DOCKERFILE_VARIANTS ?= $(DOCKERFILE_PATH) in the Makefile)
endif
DOCKER_ARCHS ?= amd64
DOCKERFILE_VARIANTS ?= Dockerfile $(wildcard Dockerfile.*)
# Function to extract variant from Dockerfile label.
# Returns the variant name from io.prometheus.image.variant label, or "default" if not found.
define dockerfile_variant
$(strip $(or $(shell sed -n 's/.*io\.prometheus\.image\.variant="\([^"]*\)".*/\1/p' $(1)),default))
endef
# Check for duplicate variant names (including default for Dockerfiles without labels).
DOCKERFILE_VARIANT_NAMES := $(foreach df,$(DOCKERFILE_VARIANTS),$(call dockerfile_variant,$(df)))
DOCKERFILE_VARIANT_NAMES_SORTED := $(sort $(DOCKERFILE_VARIANT_NAMES))
ifneq ($(words $(DOCKERFILE_VARIANT_NAMES)),$(words $(DOCKERFILE_VARIANT_NAMES_SORTED)))
$(error Duplicate variant names found. Each Dockerfile must have a unique io.prometheus.image.variant label, and only one can be without a label (default))
endif
# Build variant:dockerfile pairs for shell iteration.
DOCKERFILE_VARIANTS_WITH_NAMES := $(foreach df,$(DOCKERFILE_VARIANTS),$(call dockerfile_variant,$(df)):$(df))
# Shell helper to check whether a dockerfile/arch pair is excluded.
define dockerfile_arch_is_excluded
case " $(DOCKERFILE_ARCH_EXCLUSIONS) " in \
*" $$dockerfile:$(1) "*) true ;; \
*) false ;; \
esac
endef
# Shell helper to check whether a registry/arch pair is excluded.
# Extracts registry from DOCKER_REPO (e.g., quay.io/prometheus -> quay.io)
define registry_arch_is_excluded
registry=$$(echo "$(DOCKER_REPO)" | cut -d'/' -f1); \
case " $(DOCKER_REGISTRY_ARCH_EXCLUSIONS) " in \
*" $$registry:$(1) "*) true ;; \
*) false ;; \
esac
endef
BUILD_DOCKER_ARCHS = $(addprefix common-docker-,$(DOCKER_ARCHS))
PUBLISH_DOCKER_ARCHS = $(addprefix common-docker-publish-,$(DOCKER_ARCHS))
@ -111,7 +151,7 @@ common-all: precheck style check_license lint yamllint unused build test
.PHONY: common-style
common-style:
@echo ">> checking code style"
@fmtRes=$$($(GOFMT) -d $$(find . -path ./vendor -prune -o -name '*.go' -print)); \
@fmtRes=$$($(GOFMT) -d $$(git ls-files '*.go' ':!:vendor/*' || find . -path ./vendor -prune -o -name '*.go' -print)); \
if [ -n "$${fmtRes}" ]; then \
echo "gofmt checking failed!"; echo "$${fmtRes}"; echo; \
echo "Please ensure you are using $$($(GO) version) for formatting code."; \
@ -121,13 +161,19 @@ common-style:
.PHONY: common-check_license
common-check_license:
@echo ">> checking license header"
@licRes=$$(for file in $$(find . -type f -iname '*.go' ! -path './vendor/*') ; do \
@licRes=$$(for file in $$(git ls-files '*.go' ':!:vendor/*' || find . -path ./vendor -prune -o -type f -iname '*.go' -print) ; do \
awk 'NR<=3' $$file | grep -Eq "(Copyright|generated|GENERATED)" || echo $$file; \
done); \
if [ -n "$${licRes}" ]; then \
echo "license header checking failed:"; echo "$${licRes}"; \
exit 1; \
fi
@echo ">> checking for copyright years 2026 or later"
@futureYearRes=$$(git grep -E 'Copyright (202[6-9]|20[3-9][0-9])' -- '*.go' ':!:vendor/*' || true); \
if [ -n "$${futureYearRes}" ]; then \
echo "Files with copyright year 2026 or later found (should use 'Copyright The Prometheus Authors'):"; echo "$${futureYearRes}"; \
exit 1; \
fi
.PHONY: common-deps
common-deps:
@ -138,7 +184,7 @@ common-deps:
update-go-deps:
@echo ">> updating Go dependencies"
@for m in $$($(GO) list -mod=readonly -m -f '{{ if and (not .Indirect) (not .Main)}}{{.Path}}{{end}}' all); do \
$(GO) get -d $$m; \
$(GO) get $$m; \
done
$(GO) mod tidy
@ -156,9 +202,13 @@ $(GOTEST_DIR):
@mkdir -p $@
.PHONY: common-format
common-format:
common-format: $(GOLANGCI_LINT)
@echo ">> formatting code"
$(GO) fmt $(pkgs)
ifdef GOLANGCI_LINT
@echo ">> formatting code with golangci-lint"
$(GOLANGCI_LINT) fmt $(GOLANGCI_FMT_OPTS)
endif
.PHONY: common-vet
common-vet:
@ -215,28 +265,194 @@ common-docker-repo-name:
.PHONY: common-docker $(BUILD_DOCKER_ARCHS)
common-docker: $(BUILD_DOCKER_ARCHS)
$(BUILD_DOCKER_ARCHS): common-docker-%:
docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" \
-f $(DOCKERFILE_PATH) \
--build-arg ARCH="$*" \
--build-arg OS="linux" \
$(DOCKERBUILD_CONTEXT)
@for variant in $(DOCKERFILE_VARIANTS_WITH_NAMES); do \
dockerfile=$${variant#*:}; \
variant_name=$${variant%%:*}; \
if $(call dockerfile_arch_is_excluded,$*); then \
echo "Skipping $$variant_name variant for linux-$* (excluded by DOCKERFILE_ARCH_EXCLUSIONS)"; \
continue; \
fi; \
distroless_arch="$*"; \
if [ "$*" = "armv7" ]; then \
distroless_arch="arm"; \
fi; \
if [ "$$dockerfile" = "Dockerfile" ]; then \
echo "Building default variant ($$variant_name) for linux-$* using $$dockerfile"; \
docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" \
-f $$dockerfile \
--build-arg ARCH="$*" \
--build-arg OS="linux" \
--build-arg DISTROLESS_ARCH="$$distroless_arch" \
$(DOCKERBUILD_CONTEXT); \
if [ "$$variant_name" != "default" ]; then \
echo "Tagging default variant with $$variant_name suffix"; \
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" \
"$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name"; \
fi; \
else \
echo "Building $$variant_name variant for linux-$* using $$dockerfile"; \
docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name" \
-f $$dockerfile \
--build-arg ARCH="$*" \
--build-arg OS="linux" \
--build-arg DISTROLESS_ARCH="$$distroless_arch" \
$(DOCKERBUILD_CONTEXT); \
fi; \
done
.PHONY: common-docker-publish $(PUBLISH_DOCKER_ARCHS)
common-docker-publish: $(PUBLISH_DOCKER_ARCHS)
$(PUBLISH_DOCKER_ARCHS): common-docker-publish-%:
docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)"
@for variant in $(DOCKERFILE_VARIANTS_WITH_NAMES); do \
dockerfile=$${variant#*:}; \
variant_name=$${variant%%:*}; \
if $(call dockerfile_arch_is_excluded,$*); then \
echo "Skipping push for $$variant_name variant on linux-$* (excluded by DOCKERFILE_ARCH_EXCLUSIONS)"; \
continue; \
fi; \
if $(call registry_arch_is_excluded,$*); then \
echo "Skipping push for $$variant_name variant on linux-$* to $(DOCKER_REPO) (excluded by DOCKER_REGISTRY_ARCH_EXCLUSIONS)"; \
continue; \
fi; \
if [ "$$dockerfile" != "Dockerfile" ] || [ "$$variant_name" != "default" ]; then \
echo "Pushing $$variant_name variant for linux-$*"; \
docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name"; \
fi; \
if [ "$$dockerfile" = "Dockerfile" ]; then \
echo "Pushing default variant ($$variant_name) for linux-$*"; \
docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)"; \
fi; \
if [ "$(DOCKER_IMAGE_TAG)" = "latest" ]; then \
if [ "$$dockerfile" != "Dockerfile" ] || [ "$$variant_name" != "default" ]; then \
echo "Pushing $$variant_name variant version tags for linux-$*"; \
docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:v$(DOCKER_MAJOR_VERSION_TAG)-$$variant_name"; \
fi; \
if [ "$$dockerfile" = "Dockerfile" ]; then \
echo "Pushing default variant version tag for linux-$*"; \
docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:v$(DOCKER_MAJOR_VERSION_TAG)"; \
fi; \
fi; \
done
DOCKER_MAJOR_VERSION_TAG = $(firstword $(subst ., ,$(shell cat VERSION)))
.PHONY: common-docker-tag-latest $(TAG_DOCKER_ARCHS)
common-docker-tag-latest: $(TAG_DOCKER_ARCHS)
$(TAG_DOCKER_ARCHS): common-docker-tag-latest-%:
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:latest"
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:v$(DOCKER_MAJOR_VERSION_TAG)"
@for variant in $(DOCKERFILE_VARIANTS_WITH_NAMES); do \
dockerfile=$${variant#*:}; \
variant_name=$${variant%%:*}; \
if $(call dockerfile_arch_is_excluded,$*); then \
echo "Skipping tag for $$variant_name variant on linux-$* (excluded by DOCKERFILE_ARCH_EXCLUSIONS)"; \
continue; \
fi; \
if $(call registry_arch_is_excluded,$*); then \
echo "Skipping tag for $$variant_name variant on linux-$* for $(DOCKER_REPO) (excluded by DOCKER_REGISTRY_ARCH_EXCLUSIONS)"; \
continue; \
fi; \
if [ "$$dockerfile" != "Dockerfile" ] || [ "$$variant_name" != "default" ]; then \
echo "Tagging $$variant_name variant for linux-$* as latest"; \
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:latest-$$variant_name"; \
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:v$(DOCKER_MAJOR_VERSION_TAG)-$$variant_name"; \
fi; \
if [ "$$dockerfile" = "Dockerfile" ]; then \
echo "Tagging default variant ($$variant_name) for linux-$* as latest"; \
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:latest"; \
docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:v$(DOCKER_MAJOR_VERSION_TAG)"; \
fi; \
done
.PHONY: common-docker-manifest
common-docker-manifest:
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create -a "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG)" $(foreach ARCH,$(DOCKER_ARCHS),$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$(ARCH):$(SANITIZED_DOCKER_IMAGE_TAG))
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG)"
@for variant in $(DOCKERFILE_VARIANTS_WITH_NAMES); do \
dockerfile=$${variant#*:}; \
variant_name=$${variant%%:*}; \
if [ "$$dockerfile" != "Dockerfile" ] || [ "$$variant_name" != "default" ]; then \
echo "Creating manifest for $$variant_name variant"; \
refs=""; \
for arch in $(DOCKER_ARCHS); do \
if $(call dockerfile_arch_is_excluded,$$arch); then \
echo " Skipping $$arch for $$variant_name (excluded by DOCKERFILE_ARCH_EXCLUSIONS)"; \
continue; \
fi; \
if $(call registry_arch_is_excluded,$$arch); then \
echo " Skipping $$arch for $$variant_name on $(DOCKER_REPO) (excluded by DOCKER_REGISTRY_ARCH_EXCLUSIONS)"; \
continue; \
fi; \
refs="$$refs $(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$$arch:$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name"; \
done; \
if [ -z "$$refs" ]; then \
echo "Skipping manifest for $$variant_name variant (no supported architectures)"; \
continue; \
fi; \
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create -a "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name" $$refs; \
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG)-$$variant_name"; \
fi; \
if [ "$$dockerfile" = "Dockerfile" ]; then \
echo "Creating default variant ($$variant_name) manifest"; \
refs=""; \
for arch in $(DOCKER_ARCHS); do \
if $(call dockerfile_arch_is_excluded,$$arch); then \
echo " Skipping $$arch for default variant (excluded by DOCKERFILE_ARCH_EXCLUSIONS)"; \
continue; \
fi; \
if $(call registry_arch_is_excluded,$$arch); then \
echo " Skipping $$arch for default variant on $(DOCKER_REPO) (excluded by DOCKER_REGISTRY_ARCH_EXCLUSIONS)"; \
continue; \
fi; \
refs="$$refs $(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$$arch:$(SANITIZED_DOCKER_IMAGE_TAG)"; \
done; \
if [ -z "$$refs" ]; then \
echo "Skipping default variant manifest (no supported architectures)"; \
continue; \
fi; \
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create -a "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG)" $$refs; \
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG)"; \
fi; \
if [ "$(DOCKER_IMAGE_TAG)" = "latest" ]; then \
if [ "$$dockerfile" != "Dockerfile" ] || [ "$$variant_name" != "default" ]; then \
echo "Creating manifest for $$variant_name variant version tag"; \
refs=""; \
for arch in $(DOCKER_ARCHS); do \
if $(call dockerfile_arch_is_excluded,$$arch); then \
echo " Skipping $$arch for $$variant_name version tag (excluded by DOCKERFILE_ARCH_EXCLUSIONS)"; \
continue; \
fi; \
if $(call registry_arch_is_excluded,$$arch); then \
echo " Skipping $$arch for $$variant_name version tag on $(DOCKER_REPO) (excluded by DOCKER_REGISTRY_ARCH_EXCLUSIONS)"; \
continue; \
fi; \
refs="$$refs $(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$$arch:v$(DOCKER_MAJOR_VERSION_TAG)-$$variant_name"; \
done; \
if [ -z "$$refs" ]; then \
echo "Skipping version-tag manifest for $$variant_name variant (no supported architectures)"; \
continue; \
fi; \
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create -a "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):v$(DOCKER_MAJOR_VERSION_TAG)-$$variant_name" $$refs; \
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):v$(DOCKER_MAJOR_VERSION_TAG)-$$variant_name"; \
fi; \
if [ "$$dockerfile" = "Dockerfile" ]; then \
echo "Creating default variant version tag manifest"; \
refs=""; \
for arch in $(DOCKER_ARCHS); do \
if $(call dockerfile_arch_is_excluded,$$arch); then \
echo " Skipping $$arch for default variant version tag (excluded by DOCKERFILE_ARCH_EXCLUSIONS)"; \
continue; \
fi; \
if $(call registry_arch_is_excluded,$$arch); then \
echo " Skipping $$arch for default variant version tag on $(DOCKER_REPO) (excluded by DOCKER_REGISTRY_ARCH_EXCLUSIONS)"; \
continue; \
fi; \
refs="$$refs $(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$$arch:v$(DOCKER_MAJOR_VERSION_TAG)"; \
done; \
if [ -z "$$refs" ]; then \
echo "Skipping default variant version-tag manifest (no supported architectures)"; \
continue; \
fi; \
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create -a "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):v$(DOCKER_MAJOR_VERSION_TAG)" $$refs; \
DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):v$(DOCKER_MAJOR_VERSION_TAG)"; \
fi; \
fi; \
done
.PHONY: promu
promu: $(PROMU)
@ -248,8 +464,8 @@ $(PROMU):
cp $(PROMU_TMP)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM)/promu $(FIRST_GOPATH)/bin/promu
rm -r $(PROMU_TMP)
.PHONY: proto
proto:
.PHONY: common-proto
common-proto:
@echo ">> generating code from proto files"
@./scripts/genproto.sh
@ -261,6 +477,10 @@ $(GOLANGCI_LINT):
| sh -s -- -b $(FIRST_GOPATH)/bin $(GOLANGCI_LINT_VERSION)
endif
.PHONY: common-print-golangci-lint-version
common-print-golangci-lint-version:
@echo $(GOLANGCI_LINT_VERSION)
.PHONY: precheck
precheck::

@ -195,6 +195,7 @@ drm | Expose GPU metrics using sysfs / DRM, `amdgpu` is the only driver which ex
drbd | Exposes Distributed Replicated Block Device statistics (to version 8.4) | Linux
ethtool | Exposes network interface information and network driver statistics equivalent to `ethtool`, `ethtool -S`, and `ethtool -i`. | Linux
interrupts | Exposes detailed interrupts statistics. | Linux, OpenBSD
kernel_hung | Exposes number of tasks that have been detected as hung from `/proc/sys/kernel/hung_task_detect_count`. | Linux
ksmd | Exposes kernel and system statistics from `/sys/kernel/mm/ksm`. | Linux
lnstat | Exposes stats from `/proc/net/stat/`. | Linux
logind | Exposes session counts from [logind](http://www.freedesktop.org/wiki/Software/systemd/logind/). | Linux
@ -208,6 +209,7 @@ qdisc | Exposes [queuing discipline](https://en.wikipedia.org/wiki/Network_sched
slabinfo | Exposes slab statistics from `/proc/slabinfo`. Note that permission of `/proc/slabinfo` is usually 0400, so set it appropriately. | Linux
softirqs | Exposes detailed softirq statistics from `/proc/softirqs`. | Linux
sysctl | Expose sysctl values from `/proc/sys`. Use `--collector.sysctl.include(-info)` to configure. | Linux
swap | Expose swap information from `/proc/swaps`. | Linux
systemd | Exposes service and system status from [systemd](http://www.freedesktop.org/wiki/Software/systemd/). | Linux
tcpstat | Exposes TCP connection status information from `/proc/net/tcp` and `/proc/net/tcp6`. (Warning: the current version has potential performance issues in high load situations.) | Linux
wifi | Exposes WiFi device and station statistics. | Linux

@ -1 +1 @@
1.9.0
1.10.2

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !noarp
// +build !noarp
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nobcache
// +build !nobcache
package collector

@ -0,0 +1,275 @@
// Copyright The Prometheus Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//go:build !nobcachefs
package collector
import (
"fmt"
"log/slog"
"os"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/procfs/bcachefs"
)
const subsystem = "bcachefs"
var (
bcachefsInfoDesc = prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "info"),
"Filesystem information.",
[]string{"uuid"},
nil,
)
bcachefsBtreeCacheSizeBytes = prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "btree_cache_size_bytes"),
"Btree cache memory usage in bytes.",
[]string{"uuid"},
nil,
)
bcachefsCompressionCompressedBytesDesc = prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "compression_compressed_bytes"),
"Compressed size by algorithm.",
[]string{"uuid", "algorithm"},
nil,
)
bcachefsCompressionUncompressedBytesDesc = prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "compression_uncompressed_bytes"),
"Uncompressed size by algorithm.",
[]string{"uuid", "algorithm"},
nil,
)
bcachefsErrorsTotalDesc = prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "errors_total"),
"Error count by error type.",
[]string{"uuid", "error_type"},
nil,
)
bcachefsBtreeWritesTotalDesc = prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "btree_writes_total"),
"Number of btree writes by type.",
[]string{"uuid", "type"},
nil,
)
bcachefsBtreeWriteAverageSizeBytesDesc = prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "btree_write_average_size_bytes"),
"Average btree write size by type.",
[]string{"uuid", "type"},
nil,
)
bcachefsDeviceInfoDesc = prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "device_info"),
"Device information.",
[]string{"uuid", "device", "label", "state"},
nil,
)
bcachefsDeviceBucketSizeBytesDesc = prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "device_bucket_size_bytes"),
"Bucket size in bytes.",
[]string{"uuid", "device"},
nil,
)
bcachefsDeviceBucketsDesc = prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "device_buckets"),
"Total number of buckets.",
[]string{"uuid", "device"},
nil,
)
bcachefsDeviceDurabilityDesc = prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "device_durability"),
"Device durability setting.",
[]string{"uuid", "device"},
nil,
)
bcachefsDeviceIODoneBytesTotalDesc = prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "device_io_done_bytes_total"),
"IO bytes by operation type and data type.",
[]string{"uuid", "device", "operation", "data_type"},
nil,
)
bcachefsDeviceIOErrorsTotalDesc = prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, "device_io_errors_total"),
"IO errors by error type.",
[]string{"uuid", "device", "type"},
nil,
)
)
func init() {
registerCollector(subsystem, defaultEnabled, NewBcachefsCollector)
}
// bcachefsCollector collects metrics from bcachefs filesystems.
type bcachefsCollector struct {
fs bcachefs.FS
logger *slog.Logger
}
// NewBcachefsCollector returns a new Collector exposing bcachefs statistics.
func NewBcachefsCollector(logger *slog.Logger) (Collector, error) {
fs, err := bcachefs.NewFS(*sysPath)
if err != nil {
return nil, fmt.Errorf("failed to open sysfs: %w", err)
}
return &bcachefsCollector{
fs: fs,
logger: logger,
}, nil
}
// Update retrieves and exports bcachefs statistics.
func (c *bcachefsCollector) Update(ch chan<- prometheus.Metric) error {
stats, err := c.fs.Stats()
if err != nil {
if os.IsNotExist(err) {
c.logger.Debug("bcachefs sysfs path does not exist", "path", sysFilePath("fs/bcachefs"))
return ErrNoData
}
return fmt.Errorf("failed to retrieve bcachefs stats: %w", err)
}
if len(stats) == 0 {
return ErrNoData
}
for _, s := range stats {
uuid := s.UUID
ch <- prometheus.MustNewConstMetric(
bcachefsInfoDesc,
prometheus.GaugeValue,
1,
uuid,
)
ch <- prometheus.MustNewConstMetric(
bcachefsBtreeCacheSizeBytes,
prometheus.GaugeValue,
float64(s.BtreeCacheSizeBytes),
uuid,
)
for algorithm, comp := range s.Compression {
ch <- prometheus.MustNewConstMetric(
bcachefsCompressionCompressedBytesDesc,
prometheus.GaugeValue,
float64(comp.CompressedBytes),
uuid, algorithm,
)
ch <- prometheus.MustNewConstMetric(
bcachefsCompressionUncompressedBytesDesc,
prometheus.GaugeValue,
float64(comp.UncompressedBytes),
uuid, algorithm,
)
}
for errorType, errStats := range s.Errors {
ch <- prometheus.MustNewConstMetric(
bcachefsErrorsTotalDesc,
prometheus.CounterValue,
float64(errStats.Count),
uuid, errorType,
)
}
for counterName, counterStats := range s.Counters {
metricName := SanitizeMetricName(counterName) + "_total"
ch <- prometheus.MustNewConstMetric(
prometheus.NewDesc(
prometheus.BuildFQName(namespace, subsystem, metricName),
fmt.Sprintf("Bcachefs counter %s since filesystem creation.", counterName),
[]string{"uuid"},
nil,
),
prometheus.CounterValue,
float64(counterStats.SinceFilesystemCreation),
uuid,
)
}
for writeType, writeStats := range s.BtreeWrites {
ch <- prometheus.MustNewConstMetric(
bcachefsBtreeWritesTotalDesc,
prometheus.CounterValue,
float64(writeStats.Count),
uuid, writeType,
)
ch <- prometheus.MustNewConstMetric(
bcachefsBtreeWriteAverageSizeBytesDesc,
prometheus.GaugeValue,
float64(writeStats.SizeBytes),
uuid, writeType,
)
}
for device, devStats := range s.Devices {
if devStats == nil {
continue
}
ch <- prometheus.MustNewConstMetric(
bcachefsDeviceInfoDesc,
prometheus.GaugeValue,
1,
uuid, device, devStats.Label, devStats.State,
)
ch <- prometheus.MustNewConstMetric(
bcachefsDeviceBucketSizeBytesDesc,
prometheus.GaugeValue,
float64(devStats.BucketSizeBytes),
uuid, device,
)
ch <- prometheus.MustNewConstMetric(
bcachefsDeviceBucketsDesc,
prometheus.GaugeValue,
float64(devStats.Buckets),
uuid, device,
)
ch <- prometheus.MustNewConstMetric(
bcachefsDeviceDurabilityDesc,
prometheus.GaugeValue,
float64(devStats.Durability),
uuid, device,
)
for op, dataTypes := range devStats.IODone {
for dataType, value := range dataTypes {
ch <- prometheus.MustNewConstMetric(
bcachefsDeviceIODoneBytesTotalDesc,
prometheus.CounterValue,
float64(value),
uuid, device, op, dataType,
)
}
}
for errorType, value := range devStats.IOErrors {
ch <- prometheus.MustNewConstMetric(
bcachefsDeviceIOErrorsTotalDesc,
prometheus.CounterValue,
float64(value),
uuid, device, errorType,
)
}
}
}
return nil
}

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nobonding
// +build !nobonding
package collector
@ -78,13 +77,13 @@ func readBondingStats(root string) (status map[string][2]int, err error) {
if err != nil {
return nil, err
}
for _, master := range strings.Fields(string(masters)) {
for master := range strings.FieldsSeq(string(masters)) {
slaves, err := os.ReadFile(filepath.Join(root, master, "bonding", "slaves"))
if err != nil {
return nil, err
}
sstat := [2]int{0, 0}
for _, slave := range strings.Fields(string(slaves)) {
for slave := range strings.FieldsSeq(string(slaves)) {
state, err := os.ReadFile(filepath.Join(root, master, fmt.Sprintf("lower_%s", slave), "bonding_slave", "mii_status"))
if errors.Is(err, os.ErrNotExist) {
// some older? kernels use slave_ prefix

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nobonding
// +build !nobonding
package collector

@ -12,15 +12,14 @@
// limitations under the License.
//go:build (freebsd || dragonfly || openbsd || netbsd || darwin) && !noboottime
// +build freebsd dragonfly openbsd netbsd darwin
// +build !noboottime
package collector
import (
"log/slog"
"github.com/prometheus/client_golang/prometheus"
"golang.org/x/sys/unix"
"log/slog"
)
type bootTimeCollector struct {

@ -12,14 +12,14 @@
// limitations under the License.
//go:build !noboottime
// +build !noboottime
package collector
import (
"log/slog"
"github.com/illumos/go-kstat"
"github.com/prometheus/client_golang/prometheus"
"log/slog"
)
type bootTimeCollector struct {

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nobtrfs
// +build !nobtrfs
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nobtrfs
// +build !nobtrfs
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nobuddyinfo && !netbsd
// +build !nobuddyinfo,!netbsd
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nostat
// +build !nostat
package collector

@ -199,7 +199,7 @@ func IsNoDataError(err error) bool {
}
// pushMetric helps construct and convert a variety of value types into Prometheus float64 metrics.
func pushMetric(ch chan<- prometheus.Metric, fieldDesc *prometheus.Desc, name string, value interface{}, valueType prometheus.ValueType, labelValues ...string) {
func pushMetric(ch chan<- prometheus.Metric, fieldDesc *prometheus.Desc, name string, value any, valueType prometheus.ValueType, labelValues ...string) {
var fVal float64
switch val := value.(type) {
case uint8:

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !noconntrack
// +build !noconntrack
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nocpu
// +build !nocpu
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nocpu
// +build !nocpu
package collector

@ -15,7 +15,6 @@
// BSD. See https://github.com/shirou/gopsutil/blob/master/LICENSE for details.
//go:build !nocpu
// +build !nocpu
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nocpu
// +build !nocpu
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nocpu
// +build !nocpu
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nocpu
// +build !nocpu
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nocpu
// +build !nocpu
package collector
@ -20,6 +19,7 @@ import (
"errors"
"fmt"
"log/slog"
"maps"
"os"
"path/filepath"
"regexp"
@ -27,8 +27,6 @@ import (
"strconv"
"sync"
"golang.org/x/exp/maps"
"github.com/alecthomas/kingpin/v2"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/procfs"
@ -89,7 +87,7 @@ func NewCPUCollector(logger *slog.Logger) (Collector, error) {
if !os.IsNotExist(err) {
return nil, fmt.Errorf("unable to get isolated cpus: %w", err)
}
logger.Debug("Could not open isolated file", "error", err)
logger.Debug("couldn't open isolated file", "error", err)
}
c := &cpuCollector{
@ -224,7 +222,7 @@ func (c *cpuCollector) updateInfo(ch chan<- prometheus.Metric) error {
cpuFreqEnabled, ok := collectorState["cpufreq"]
if !ok || cpuFreqEnabled == nil {
c.logger.Debug("cpufreq key missing or nil value in collectorState map")
} else if !*cpuFreqEnabled {
} else if *cpuFreqEnabled {
for _, cpu := range info {
ch <- prometheus.MustNewConstMetric(c.cpuFrequencyHz,
prometheus.GaugeValue,
@ -489,7 +487,7 @@ func (c *cpuCollector) updateCPUStats(newStats map[int64]procfs.CPUStat) {
// Remove offline CPUs.
if len(newStats) != len(c.cpuStats) {
onlineCPUIds := maps.Keys(newStats)
onlineCPUIds := slices.Collect(maps.Keys(newStats))
maps.DeleteFunc(c.cpuStats, func(key int64, item procfs.CPUStat) bool {
return !slices.Contains(onlineCPUIds, key)
})

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nocpu
// +build !nocpu
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nocpu
// +build !nocpu
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nocpu
// +build !nocpu
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nocpu
// +build !nocpu
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nocpu
// +build !nocpu
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nocpu
// +build !nocpu
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nocpu
// +build !nocpu
package collector
@ -106,8 +105,8 @@ func (c *cpuFreqCollector) Update(ch chan<- prometheus.Metric) error {
)
}
if stats.Governor != "" {
availableGovernors := strings.Split(stats.AvailableGovernors, " ")
for _, g := range availableGovernors {
availableGovernors := strings.SplitSeq(stats.AvailableGovernors, " ")
for g := range availableGovernors {
state := 0
if g == stats.Governor {
state = 1

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nocpu
// +build !nocpu
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nodevstat
// +build !nodevstat
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nodevstat
// +build !nodevstat
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nodiskstats
// +build !nodiskstats
package collector

@ -12,8 +12,6 @@
// limitations under the License.
//go:build !nodiskstats && (openbsd || linux || darwin || aix)
// +build !nodiskstats
// +build openbsd linux darwin aix
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nodiskstats
// +build !nodiskstats
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nodiskstats
// +build !nodiskstats
package collector
@ -60,30 +59,22 @@ const (
udevIDModel = "ID_MODEL"
udevIDPath = "ID_PATH"
udevIDRevision = "ID_REVISION"
udevIDSerial = "ID_SERIAL"
udevIDSerialShort = "ID_SERIAL_SHORT"
udevIDWWN = "ID_WWN"
udevSCSIIdentSerial = "SCSI_IDENT_SERIAL"
)
type typedFactorDesc struct {
desc *prometheus.Desc
valueType prometheus.ValueType
}
type udevInfo map[string]string
func (d *typedFactorDesc) mustNewConstMetric(value float64, labels ...string) prometheus.Metric {
return prometheus.MustNewConstMetric(d.desc, d.valueType, value, labels...)
}
type diskstatsCollector struct {
deviceFilter deviceFilter
fs blockdevice.FS
infoDesc typedFactorDesc
descs []typedFactorDesc
filesystemInfoDesc typedFactorDesc
deviceMapperInfoDesc typedFactorDesc
ataDescs map[string]typedFactorDesc
infoDesc typedDesc
descs []typedDesc
filesystemInfoDesc typedDesc
deviceMapperInfoDesc typedDesc
ataDescs map[string]typedDesc
logger *slog.Logger
getUdevDeviceProperties func(uint32, uint32) (udevInfo, error)
}
@ -109,14 +100,14 @@ func NewDiskstatsCollector(logger *slog.Logger) (Collector, error) {
collector := diskstatsCollector{
deviceFilter: deviceFilter,
fs: fs,
infoDesc: typedFactorDesc{
infoDesc: typedDesc{
desc: prometheus.NewDesc(prometheus.BuildFQName(namespace, diskSubsystem, "info"),
"Info of /sys/block/<block_device>.",
[]string{"device", "major", "minor", "path", "wwn", "model", "serial", "revision", "rotational"},
nil,
), valueType: prometheus.GaugeValue,
},
descs: []typedFactorDesc{
descs: []typedDesc{
{
desc: readsCompletedDesc, valueType: prometheus.CounterValue,
},
@ -219,21 +210,21 @@ func NewDiskstatsCollector(logger *slog.Logger) (Collector, error) {
), valueType: prometheus.CounterValue,
},
},
filesystemInfoDesc: typedFactorDesc{
filesystemInfoDesc: typedDesc{
desc: prometheus.NewDesc(prometheus.BuildFQName(namespace, diskSubsystem, "filesystem_info"),
"Info about disk filesystem.",
[]string{"device", "type", "usage", "uuid", "version"},
nil,
), valueType: prometheus.GaugeValue,
},
deviceMapperInfoDesc: typedFactorDesc{
deviceMapperInfoDesc: typedDesc{
desc: prometheus.NewDesc(prometheus.BuildFQName(namespace, diskSubsystem, "device_mapper_info"),
"Info about disk device mapper.",
[]string{"device", "name", "uuid", "vg_name", "lv_name", "lv_layer"},
nil,
), valueType: prometheus.GaugeValue,
},
ataDescs: map[string]typedFactorDesc{
ataDescs: map[string]typedDesc{
udevIDATAWriteCache: {
desc: prometheus.NewDesc(prometheus.BuildFQName(namespace, diskSubsystem, "ata_write_cache"),
"ATA disk has a write cache.",
@ -294,6 +285,11 @@ func (c *diskstatsCollector) Update(ch chan<- prometheus.Metric) error {
serial = info[udevIDSerialShort]
}
// If still undefined, fallback to ID_SERIAL (used by virtio devices).
if serial == "" {
serial = info[udevIDSerial]
}
queueStats, err := c.fs.SysBlockDeviceQueueStats(dev)
// Block Device Queue stats may not exist for all devices.
if err != nil && !os.IsNotExist(err) {

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nodiskstats
// +build !nodiskstats
package collector
@ -119,9 +118,9 @@ node_disk_info{device="dm-2",major="252",minor="2",model="",path="",revision="",
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="mmcblk0",major="179",minor="0",model="",path="platform-df2969f3.mmc",revision="",rotational="0",serial="0x83e36d93",wwn=""} 1
node_disk_info{device="mmcblk0p1",major="179",minor="1",model="",path="platform-df2969f3.mmc",revision="",rotational="0",serial="0x83e36d93",wwn=""} 1
node_disk_info{device="mmcblk0p2",major="179",minor="2",model="",path="platform-df2969f3.mmc",revision="",rotational="0",serial="0x83e36d93",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

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nodiskstats && !amd64
// +build !nodiskstats,!amd64
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nodiskstats
// +build !nodiskstats
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build linux && !nodmi
// +build linux,!nodmi
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nodrbd
// +build !nodrbd
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nogpu
// +build !nogpu
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !noedac
// +build !noedac
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !noentropy
// +build !noentropy
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !noethtool
// +build !noethtool
// The hard work of collecting data from the kernel via the ethtool interfaces is done by
// https://github.com/safchain/ethtool/

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !noethtool
// +build !noethtool
package collector
@ -139,7 +138,7 @@ func (e *EthtoolFixture) Stats(intf string) (map[string]uint64, error) {
func readModes(modes string) uint32 {
var out uint32
for _, mode := range strings.Split(modes, " ") {
for mode := range strings.SplitSeq(modes, " ") {
switch mode {
case "10baseT/Half":
out |= (1 << unix.ETHTOOL_LINK_MODE_10baseT_Half_BIT)
@ -162,7 +161,7 @@ func readModes(modes string) uint32 {
func readPortTypes(portTypes string) uint32 {
var out uint32
for _, ptype := range strings.Split(portTypes, " ") {
for ptype := range strings.SplitSeq(portTypes, " ") {
ptype = strings.Trim(ptype, " \t")
if ptype == "TP" {
out |= (1 << unix.ETHTOOL_LINK_MODE_TP_BIT)

@ -12,14 +12,13 @@
// limitations under the License.
//go:build (freebsd || dragonfly) && !noexec
// +build freebsd dragonfly
// +build !noexec
package collector
import (
"github.com/prometheus/client_golang/prometheus"
"log/slog"
"github.com/prometheus/client_golang/prometheus"
)
type execCollector struct {

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nofibrechannel
// +build !nofibrechannel
package collector
@ -22,8 +21,9 @@ import (
"os"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/node_exporter/collector/utils"
"github.com/prometheus/procfs/sysfs"
"github.com/prometheus/node_exporter/collector/utils"
)
const maxUint64 = ^uint64(0)

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nofilefd
// +build !nofilefd
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nofilefd
// +build !nofilefd
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nofilesystem
// +build !nofilesystem
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build dragonfly && !nofilesystem
// +build dragonfly,!nofilesystem
package collector

@ -12,8 +12,6 @@
// limitations under the License.
//go:build !nofilesystem && (linux || freebsd || netbsd || openbsd || darwin || dragonfly || aix)
// +build !nofilesystem
// +build linux freebsd netbsd openbsd darwin dragonfly aix
package collector
@ -82,7 +80,7 @@ type filesystemCollector struct {
}
type filesystemLabels struct {
device, mountPoint, fsType, options, deviceError, major, minor string
device, mountPoint, fsType, mountOptions, superOptions, deviceError, major, minor string
}
type filesystemStats struct {

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nofilesystem
// +build !nofilesystem
package collector

@ -12,28 +12,30 @@
// limitations under the License.
//go:build !nofilesystem
// +build !nofilesystem
package collector
import (
"bufio"
"bytes"
"errors"
"fmt"
"io"
"log/slog"
"os"
"slices"
"strconv"
"strings"
"sync"
"time"
"github.com/alecthomas/kingpin/v2"
"golang.org/x/sys/unix"
"github.com/prometheus/procfs"
)
const (
defMountPointsExcluded = "^/(dev|proc|run/credentials/.+|sys|var/lib/docker/.+|var/lib/containers/storage/.+)($|/)"
defFSTypesExcluded = "^(autofs|binfmt_misc|bpf|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|iso9660|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|sysfs|tracefs)$"
defFSTypesExcluded = "^(autofs|binfmt_misc|bpf|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|iso9660|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|erofs|sysfs|tracefs)$"
)
var mountTimeout = kingpin.Flag("collector.filesystem.mount-timeout",
@ -56,10 +58,7 @@ func (c *filesystemCollector) GetStats() ([]filesystemStats, error) {
statChan := make(chan filesystemStats)
wg := sync.WaitGroup{}
workerCount := *statWorkerCount
if workerCount < 1 {
workerCount = 1
}
workerCount := max(*statWorkerCount, 1)
for i := 0; i < workerCount; i++ {
wg.Add(1)
@ -110,11 +109,8 @@ func (c *filesystemCollector) GetStats() ([]filesystemStats, error) {
func (c *filesystemCollector) processStat(labels filesystemLabels) filesystemStats {
var ro float64
for _, option := range strings.Split(labels.options, ",") {
if option == "ro" {
ro = 1
break
}
if isFilesystemReadOnly(labels) {
ro = 1
}
success := make(chan struct{})
@ -132,6 +128,12 @@ func (c *filesystemCollector) processStat(labels filesystemLabels) filesystemSta
}
stuckMountsMtx.Unlock()
// Remove options from labels because options will not be used from this point forward
// and keeping them can lead to errors when the same device is mounted to the same mountpoint
// twice, with different options (metrics would be recorded multiple times).
labels.mountOptions = ""
labels.superOptions = ""
if err != nil {
labels.deviceError = err.Error()
c.logger.Debug("Error on statfs() system call", "rootfs", rootfsFilePath(labels.mountPoint), "err", err)
@ -177,57 +179,71 @@ func stuckMountWatcher(mountPoint string, success chan struct{}, logger *slog.Lo
}
func mountPointDetails(logger *slog.Logger) ([]filesystemLabels, error) {
file, err := os.Open(procFilePath("1/mountinfo"))
fs, err := procfs.NewFS(*procPath)
if err != nil {
return nil, fmt.Errorf("failed to open procfs: %w", err)
}
mountInfo, err := fs.GetProcMounts(1)
if errors.Is(err, os.ErrNotExist) {
// Fallback to `/proc/self/mountinfo` if `/proc/1/mountinfo` is missing due hidepid.
logger.Debug("Reading root mounts failed, falling back to self mounts", "err", err)
file, err = os.Open(procFilePath("self/mountinfo"))
mountInfo, err = fs.GetMounts()
}
if err != nil {
return nil, err
}
defer file.Close()
return parseFilesystemLabels(file)
return parseFilesystemLabels(mountInfo)
}
func parseFilesystemLabels(r io.Reader) ([]filesystemLabels, error) {
func parseFilesystemLabels(mountInfo []*procfs.MountInfo) ([]filesystemLabels, error) {
var filesystems []filesystemLabels
scanner := bufio.NewScanner(r)
for scanner.Scan() {
parts := strings.Fields(scanner.Text())
if len(parts) < 10 {
return nil, fmt.Errorf("malformed mount point information: %q", scanner.Text())
}
for _, mount := range mountInfo {
major, minor := 0, 0
_, err := fmt.Sscanf(parts[2], "%d:%d", &major, &minor)
_, err := fmt.Sscanf(mount.MajorMinorVer, "%d:%d", &major, &minor)
if err != nil {
return nil, fmt.Errorf("malformed mount point information: %q", scanner.Text())
}
m := 5
for parts[m+1] != "-" {
m++
return nil, fmt.Errorf("malformed mount point MajorMinorVer: %q", mount.MajorMinorVer)
}
// Ensure we handle the translation of \040 and \011
// as per fstab(5).
parts[4] = strings.ReplaceAll(parts[4], "\\040", " ")
parts[4] = strings.ReplaceAll(parts[4], "\\011", "\t")
mount.MountPoint = strings.ReplaceAll(mount.MountPoint, "\\040", " ")
mount.MountPoint = strings.ReplaceAll(mount.MountPoint, "\\011", "\t")
filesystems = append(filesystems, filesystemLabels{
device: parts[m+3],
mountPoint: rootfsStripPrefix(parts[4]),
fsType: parts[m+2],
options: parts[5],
major: fmt.Sprint(major),
minor: fmt.Sprint(minor),
deviceError: "",
device: mount.Source,
mountPoint: rootfsStripPrefix(mount.MountPoint),
fsType: mount.FSType,
mountOptions: mountOptionsString(mount.Options),
superOptions: mountOptionsString(mount.SuperOptions),
major: strconv.Itoa(major),
minor: strconv.Itoa(minor),
deviceError: "",
})
}
return filesystems, scanner.Err()
return filesystems, nil
}
// see https://github.com/prometheus/node_exporter/issues/3157#issuecomment-2422761187
// if either mount or super options contain "ro" the filesystem is read-only
func isFilesystemReadOnly(labels filesystemLabels) bool {
if slices.Contains(strings.Split(labels.mountOptions, ","), "ro") || slices.Contains(strings.Split(labels.superOptions, ","), "ro") {
return true
}
return false
}
func mountOptionsString(m map[string]string) string {
b := new(bytes.Buffer)
for key, value := range m {
if value == "" {
fmt.Fprintf(b, "%s", key)
} else {
fmt.Fprintf(b, "%s=%s", key, value)
}
}
return b.String()
}

@ -12,39 +12,82 @@
// limitations under the License.
//go:build !nofilesystem
// +build !nofilesystem
package collector
import (
"io"
"log/slog"
"strings"
"testing"
"github.com/alecthomas/kingpin/v2"
"github.com/prometheus/procfs"
)
func Test_parseFilesystemLabelsError(t *testing.T) {
tests := []struct {
name string
in string
in []*procfs.MountInfo
}{
{
name: "too few fields",
in: "hello world",
name: "malformed Major:Minor",
in: []*procfs.MountInfo{
{
MajorMinorVer: "nope",
},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if _, err := parseFilesystemLabels(strings.NewReader(tt.in)); err == nil {
if _, err := parseFilesystemLabels(tt.in); err == nil {
t.Fatal("expected an error, but none occurred")
}
})
}
}
func Test_isFilesystemReadOnly(t *testing.T) {
tests := map[string]struct {
labels filesystemLabels
expected bool
}{
"/media/volume1": {
labels: filesystemLabels{
mountOptions: "rw,nosuid,nodev,noexec,relatime",
superOptions: "rw,devices",
},
expected: false,
},
"/media/volume2": {
labels: filesystemLabels{
mountOptions: "ro,relatime",
superOptions: "rw,fd=22,pgrp=1,timeout=300,minproto=5,maxproto=5,direct",
}, expected: true,
},
"/media/volume3": {
labels: filesystemLabels{
mountOptions: "rw,user_id=1000,group_id=1000",
superOptions: "ro",
}, expected: true,
},
"/media/volume4": {
labels: filesystemLabels{
mountOptions: "ro,nosuid,noexec",
superOptions: "ro,nodev",
}, expected: true,
},
}
for _, tt := range tests {
if got := isFilesystemReadOnly(tt.labels); got != tt.expected {
t.Errorf("Expected %t, got %t", tt.expected, got)
}
}
}
func TestMountPointDetails(t *testing.T) {
if _, err := kingpin.CommandLine.Parse([]string{"--path.procfs", "./fixtures/proc"}); err != nil {
t.Fatal(err)
@ -81,6 +124,7 @@ func TestMountPointDetails(t *testing.T) {
"/run/user/1000/gvfs": "",
"/var/lib/kubelet/plugins/kubernetes.io/vsphere-volume/mounts/[vsanDatastore] bafb9e5a-8856-7e6c-699c-801844e77a4a/kubernetes-dynamic-pvc-3eba5bba-48a3-11e8-89ab-005056b92113.vmdk": "",
"/var/lib/kubelet/plugins/kubernetes.io/vsphere-volume/mounts/[vsanDatastore] bafb9e5a-8856-7e6c-699c-801844e77a4a/kubernetes-dynamic-pvc-3eba5bba-48a3-11e8-89ab-005056b92113.vmdk": "",
"/var/lib/containers/storage/overlay": "",
}
filesystems, err := mountPointDetails(slog.New(slog.NewTextHandler(io.Discard, nil)))

@ -12,7 +12,6 @@
// limitations under the License.
//go:build darwin && !nofilesystem
// +build darwin,!nofilesystem
package collector
@ -20,8 +19,13 @@ package collector
#cgo CFLAGS: -x objective-c
#cgo LDFLAGS: -framework Foundation
#import <Foundation/Foundation.h>
Float64 purgeable(char *path) {
Float64 value = -1.0f;
#include <sys/param.h>
#include <sys/ucred.h>
#include <sys/mount.h>
#include <stdio.h>
double purgeable(char *path) {
double value = -1.0f;
@autoreleasepool {
NSError *error = nil;
@ -49,14 +53,6 @@ import (
"unsafe"
)
/*
#include <sys/param.h>
#include <sys/ucred.h>
#include <sys/mount.h>
#include <stdio.h>
*/
import "C"
const (
defMountPointsExcluded = "^/(dev)($|/)"
defFSTypesExcluded = "^devfs$"

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nofilesystem
// +build !nofilesystem
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nofilesystem
// +build !nofilesystem
package collector

@ -144,6 +144,597 @@ node_bcache_writeback_rate_proportional_term{backing_device="bdev0",uuid="deaddd
# HELP node_bcache_written_bytes_total Sum of all data that has been written to the cache.
# TYPE node_bcache_written_bytes_total counter
node_bcache_written_bytes_total{cache_device="cache0",uuid="deaddd54-c735-46d5-868e-f331c5fd7c74"} 0
# HELP node_bcachefs_accounting_key_to_wb_slowpath_total Bcachefs counter accounting_key_to_wb_slowpath since filesystem creation.
# TYPE node_bcachefs_accounting_key_to_wb_slowpath_total counter
node_bcachefs_accounting_key_to_wb_slowpath_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.4105502e+07
# HELP node_bcachefs_bkey_pack_pos_fail_total Bcachefs counter bkey_pack_pos_fail since filesystem creation.
# TYPE node_bcachefs_bkey_pack_pos_fail_total counter
node_bcachefs_bkey_pack_pos_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_btree_cache_cannibalize_lock_fail_total Bcachefs counter btree_cache_cannibalize_lock_fail since filesystem creation.
# TYPE node_bcachefs_btree_cache_cannibalize_lock_fail_total counter
node_bcachefs_btree_cache_cannibalize_lock_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 24213
# HELP node_bcachefs_btree_cache_cannibalize_lock_total Bcachefs counter btree_cache_cannibalize_lock since filesystem creation.
# TYPE node_bcachefs_btree_cache_cannibalize_lock_total counter
node_bcachefs_btree_cache_cannibalize_lock_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6.2061408e+07
# HELP node_bcachefs_btree_cache_cannibalize_total Bcachefs counter btree_cache_cannibalize since filesystem creation.
# TYPE node_bcachefs_btree_cache_cannibalize_total counter
node_bcachefs_btree_cache_cannibalize_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.6587339e+07
# HELP node_bcachefs_btree_cache_cannibalize_unlock_total Bcachefs counter btree_cache_cannibalize_unlock since filesystem creation.
# TYPE node_bcachefs_btree_cache_cannibalize_unlock_total counter
node_bcachefs_btree_cache_cannibalize_unlock_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.6260384e+07
# HELP node_bcachefs_btree_cache_reap_total Bcachefs counter btree_cache_reap since filesystem creation.
# TYPE node_bcachefs_btree_cache_reap_total counter
node_bcachefs_btree_cache_reap_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6.9068459e+07
# HELP node_bcachefs_btree_cache_scan_total Bcachefs counter btree_cache_scan since filesystem creation.
# TYPE node_bcachefs_btree_cache_scan_total counter
node_bcachefs_btree_cache_scan_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 427545
# HELP node_bcachefs_btree_cache_size_bytes Btree cache memory usage in bytes.
# TYPE node_bcachefs_btree_cache_size_bytes gauge
node_bcachefs_btree_cache_size_bytes{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.201170739e+09
# HELP node_bcachefs_btree_key_cache_fill_total Bcachefs counter btree_key_cache_fill since filesystem creation.
# TYPE node_bcachefs_btree_key_cache_fill_total counter
node_bcachefs_btree_key_cache_fill_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.69308144e+08
# HELP node_bcachefs_btree_node_alloc_total Bcachefs counter btree_node_alloc since filesystem creation.
# TYPE node_bcachefs_btree_node_alloc_total counter
node_bcachefs_btree_node_alloc_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 8.665587e+06
# HELP node_bcachefs_btree_node_compact_total Bcachefs counter btree_node_compact since filesystem creation.
# TYPE node_bcachefs_btree_node_compact_total counter
node_bcachefs_btree_node_compact_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 5.554425e+06
# HELP node_bcachefs_btree_node_free_total Bcachefs counter btree_node_free since filesystem creation.
# TYPE node_bcachefs_btree_node_free_total counter
node_bcachefs_btree_node_free_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.4112667e+07
# HELP node_bcachefs_btree_node_merge_attempt_total Bcachefs counter btree_node_merge_attempt since filesystem creation.
# TYPE node_bcachefs_btree_node_merge_attempt_total counter
node_bcachefs_btree_node_merge_attempt_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.5868895e+07
# HELP node_bcachefs_btree_node_merge_total Bcachefs counter btree_node_merge since filesystem creation.
# TYPE node_bcachefs_btree_node_merge_total counter
node_bcachefs_btree_node_merge_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 559684
# HELP node_bcachefs_btree_node_read_total Bcachefs counter btree_node_read since filesystem creation.
# TYPE node_bcachefs_btree_node_read_total counter
node_bcachefs_btree_node_read_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 7.0225874e+07
# HELP node_bcachefs_btree_node_rewrite_total Bcachefs counter btree_node_rewrite since filesystem creation.
# TYPE node_bcachefs_btree_node_rewrite_total counter
node_bcachefs_btree_node_rewrite_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.130316e+06
# HELP node_bcachefs_btree_node_set_root_total Bcachefs counter btree_node_set_root since filesystem creation.
# TYPE node_bcachefs_btree_node_set_root_total counter
node_bcachefs_btree_node_set_root_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 77958
# HELP node_bcachefs_btree_node_split_total Bcachefs counter btree_node_split since filesystem creation.
# TYPE node_bcachefs_btree_node_split_total counter
node_bcachefs_btree_node_split_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 710571
# HELP node_bcachefs_btree_node_write_total Bcachefs counter btree_node_write since filesystem creation.
# TYPE node_bcachefs_btree_node_write_total counter
node_bcachefs_btree_node_write_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.4796849e+08
# HELP node_bcachefs_btree_path_relock_fail_total Bcachefs counter btree_path_relock_fail since filesystem creation.
# TYPE node_bcachefs_btree_path_relock_fail_total counter
node_bcachefs_btree_path_relock_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 5.6213103e+07
# HELP node_bcachefs_btree_path_upgrade_fail_total Bcachefs counter btree_path_upgrade_fail since filesystem creation.
# TYPE node_bcachefs_btree_path_upgrade_fail_total counter
node_bcachefs_btree_path_upgrade_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.103667e+06
# HELP node_bcachefs_btree_reserve_get_fail_total Bcachefs counter btree_reserve_get_fail since filesystem creation.
# TYPE node_bcachefs_btree_reserve_get_fail_total counter
node_bcachefs_btree_reserve_get_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 11706
# HELP node_bcachefs_btree_write_average_size_bytes Average btree write size by type.
# TYPE node_bcachefs_btree_write_average_size_bytes gauge
node_bcachefs_btree_write_average_size_bytes{type="cache_reclaim",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 720
node_bcachefs_btree_write_average_size_bytes{type="init_next_bset",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 28876
node_bcachefs_btree_write_average_size_bytes{type="initial",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 102400
node_bcachefs_btree_write_average_size_bytes{type="interior",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1290
node_bcachefs_btree_write_average_size_bytes{type="journal_reclaim",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 697
# HELP node_bcachefs_btree_writes_total Number of btree writes by type.
# TYPE node_bcachefs_btree_writes_total counter
node_bcachefs_btree_writes_total{type="cache_reclaim",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 14401
node_bcachefs_btree_writes_total{type="init_next_bset",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.055926e+06
node_bcachefs_btree_writes_total{type="initial",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.298401e+06
node_bcachefs_btree_writes_total{type="interior",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.035363e+06
node_bcachefs_btree_writes_total{type="journal_reclaim",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6.6903805e+07
# HELP node_bcachefs_bucket_alloc_fail_total Bcachefs counter bucket_alloc_fail since filesystem creation.
# TYPE node_bcachefs_bucket_alloc_fail_total counter
node_bcachefs_bucket_alloc_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.1156091e+07
# HELP node_bcachefs_bucket_alloc_from_stripe_total Bcachefs counter bucket_alloc_from_stripe since filesystem creation.
# TYPE node_bcachefs_bucket_alloc_from_stripe_total counter
node_bcachefs_bucket_alloc_from_stripe_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_bucket_alloc_total Bcachefs counter bucket_alloc since filesystem creation.
# TYPE node_bcachefs_bucket_alloc_total counter
node_bcachefs_bucket_alloc_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.7363674e+07
# HELP node_bcachefs_bucket_discard_fast_total Bcachefs counter bucket_discard_fast since filesystem creation.
# TYPE node_bcachefs_bucket_discard_fast_total counter
node_bcachefs_bucket_discard_fast_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 10204
# HELP node_bcachefs_bucket_discard_fast_worker_total Bcachefs counter bucket_discard_fast_worker since filesystem creation.
# TYPE node_bcachefs_bucket_discard_fast_worker_total counter
node_bcachefs_bucket_discard_fast_worker_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4012
# HELP node_bcachefs_bucket_discard_total Bcachefs counter bucket_discard since filesystem creation.
# TYPE node_bcachefs_bucket_discard_total counter
node_bcachefs_bucket_discard_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.4751388e+07
# HELP node_bcachefs_bucket_discard_worker_total Bcachefs counter bucket_discard_worker since filesystem creation.
# TYPE node_bcachefs_bucket_discard_worker_total counter
node_bcachefs_bucket_discard_worker_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 7.021501e+06
# HELP node_bcachefs_bucket_invalidate_total Bcachefs counter bucket_invalidate since filesystem creation.
# TYPE node_bcachefs_bucket_invalidate_total counter
node_bcachefs_bucket_invalidate_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.483205e+06
# HELP node_bcachefs_cached_ptr_drop_total Bcachefs counter cached_ptr_drop since filesystem creation.
# TYPE node_bcachefs_cached_ptr_drop_total counter
node_bcachefs_cached_ptr_drop_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.201170739e+09
# HELP node_bcachefs_compression_compressed_bytes Compressed size by algorithm.
# TYPE node_bcachefs_compression_compressed_bytes gauge
node_bcachefs_compression_compressed_bytes{algorithm="gzip",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_compression_compressed_bytes{algorithm="incompressible",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.187472557998e+13
node_bcachefs_compression_compressed_bytes{algorithm="lz4",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 5.2505975193e+10
node_bcachefs_compression_compressed_bytes{algorithm="lz4_old",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_compression_compressed_bytes{algorithm="zstd",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.42665652224e+11
# HELP node_bcachefs_compression_uncompressed_bytes Uncompressed size by algorithm.
# TYPE node_bcachefs_compression_uncompressed_bytes gauge
node_bcachefs_compression_uncompressed_bytes{algorithm="gzip",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_compression_uncompressed_bytes{algorithm="incompressible",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.187472557998e+13
node_bcachefs_compression_uncompressed_bytes{algorithm="lz4",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 7.6450417868e+10
node_bcachefs_compression_uncompressed_bytes{algorithm="lz4_old",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_compression_uncompressed_bytes{algorithm="zstd",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6.47466319872e+11
# HELP node_bcachefs_copygc_total Bcachefs counter copygc since filesystem creation.
# TYPE node_bcachefs_copygc_total counter
node_bcachefs_copygc_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 424790
# HELP node_bcachefs_copygc_wait_obsolete_total Bcachefs counter copygc_wait_obsolete since filesystem creation.
# TYPE node_bcachefs_copygc_wait_obsolete_total counter
node_bcachefs_copygc_wait_obsolete_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 537321
# HELP node_bcachefs_data_read_bounce_total Bcachefs counter data_read_bounce since filesystem creation.
# TYPE node_bcachefs_data_read_bounce_total counter
node_bcachefs_data_read_bounce_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.5052058e+08
# HELP node_bcachefs_data_read_fail_and_poison_total Bcachefs counter data_read_fail_and_poison since filesystem creation.
# TYPE node_bcachefs_data_read_fail_and_poison_total counter
node_bcachefs_data_read_fail_and_poison_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_data_read_hole_total Bcachefs counter data_read_hole since filesystem creation.
# TYPE node_bcachefs_data_read_hole_total counter
node_bcachefs_data_read_hole_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.858174650941e+12
# HELP node_bcachefs_data_read_inline_total Bcachefs counter data_read_inline since filesystem creation.
# TYPE node_bcachefs_data_read_inline_total counter
node_bcachefs_data_read_inline_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.5998753177e+10
# HELP node_bcachefs_data_read_narrow_crcs_fail_total Bcachefs counter data_read_narrow_crcs_fail since filesystem creation.
# TYPE node_bcachefs_data_read_narrow_crcs_fail_total counter
node_bcachefs_data_read_narrow_crcs_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1779
# HELP node_bcachefs_data_read_narrow_crcs_total Bcachefs counter data_read_narrow_crcs since filesystem creation.
# TYPE node_bcachefs_data_read_narrow_crcs_total counter
node_bcachefs_data_read_narrow_crcs_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 18529
# HELP node_bcachefs_data_read_nopromote_already_promoted_total Bcachefs counter data_read_nopromote_already_promoted since filesystem creation.
# TYPE node_bcachefs_data_read_nopromote_already_promoted_total counter
node_bcachefs_data_read_nopromote_already_promoted_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.11037452e+08
# HELP node_bcachefs_data_read_nopromote_congested_total Bcachefs counter data_read_nopromote_congested since filesystem creation.
# TYPE node_bcachefs_data_read_nopromote_congested_total counter
node_bcachefs_data_read_nopromote_congested_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.913847e+06
# HELP node_bcachefs_data_read_nopromote_may_not_total Bcachefs counter data_read_nopromote_may_not since filesystem creation.
# TYPE node_bcachefs_data_read_nopromote_may_not_total counter
node_bcachefs_data_read_nopromote_may_not_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.0206095e+07
# HELP node_bcachefs_data_read_nopromote_total Bcachefs counter data_read_nopromote since filesystem creation.
# TYPE node_bcachefs_data_read_nopromote_total counter
node_bcachefs_data_read_nopromote_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.42468868e+08
# HELP node_bcachefs_data_read_nopromote_unwritten_total Bcachefs counter data_read_nopromote_unwritten since filesystem creation.
# TYPE node_bcachefs_data_read_nopromote_unwritten_total counter
node_bcachefs_data_read_nopromote_unwritten_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_data_read_promote_total Bcachefs counter data_read_promote since filesystem creation.
# TYPE node_bcachefs_data_read_promote_total counter
node_bcachefs_data_read_promote_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.19833053184e+11
# HELP node_bcachefs_data_read_retry_total Bcachefs counter data_read_retry since filesystem creation.
# TYPE node_bcachefs_data_read_retry_total counter
node_bcachefs_data_read_retry_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.2404675e+07
# HELP node_bcachefs_data_read_reuse_race_total Bcachefs counter data_read_reuse_race since filesystem creation.
# TYPE node_bcachefs_data_read_reuse_race_total counter
node_bcachefs_data_read_reuse_race_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 201095
# HELP node_bcachefs_data_read_split_total Bcachefs counter data_read_split since filesystem creation.
# TYPE node_bcachefs_data_read_split_total counter
node_bcachefs_data_read_split_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.18590695e+08
# HELP node_bcachefs_data_read_total Bcachefs counter data_read since filesystem creation.
# TYPE node_bcachefs_data_read_total counter
node_bcachefs_data_read_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.8928267436032e+13
# HELP node_bcachefs_data_update_fail_total Bcachefs counter data_update_fail since filesystem creation.
# TYPE node_bcachefs_data_update_fail_total counter
node_bcachefs_data_update_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.138166333e+09
# HELP node_bcachefs_data_update_in_flight_total Bcachefs counter data_update_in_flight since filesystem creation.
# TYPE node_bcachefs_data_update_in_flight_total counter
node_bcachefs_data_update_in_flight_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.978784e+06
# HELP node_bcachefs_data_update_key_fail_total Bcachefs counter data_update_key_fail since filesystem creation.
# TYPE node_bcachefs_data_update_key_fail_total counter
node_bcachefs_data_update_key_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.4373939404e+10
# HELP node_bcachefs_data_update_key_total Bcachefs counter data_update_key since filesystem creation.
# TYPE node_bcachefs_data_update_key_total counter
node_bcachefs_data_update_key_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.00275460453171e+14
# HELP node_bcachefs_data_update_no_io_total Bcachefs counter data_update_no_io since filesystem creation.
# TYPE node_bcachefs_data_update_no_io_total counter
node_bcachefs_data_update_no_io_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.00824357273e+11
# HELP node_bcachefs_data_update_noop_obsolete_total Bcachefs counter data_update_noop_obsolete since filesystem creation.
# TYPE node_bcachefs_data_update_noop_obsolete_total counter
node_bcachefs_data_update_noop_obsolete_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_data_update_pred_total Bcachefs counter data_update_pred since filesystem creation.
# TYPE node_bcachefs_data_update_pred_total counter
node_bcachefs_data_update_pred_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.947802324992e+13
# HELP node_bcachefs_data_update_read_total Bcachefs counter data_update_read since filesystem creation.
# TYPE node_bcachefs_data_update_read_total counter
node_bcachefs_data_update_read_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 8.9390295338188e+13
# HELP node_bcachefs_data_update_start_fail_obsolete_total Bcachefs counter data_update_start_fail_obsolete since filesystem creation.
# TYPE node_bcachefs_data_update_start_fail_obsolete_total counter
node_bcachefs_data_update_start_fail_obsolete_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.14018822443e+11
# HELP node_bcachefs_data_update_total Bcachefs counter data_update since filesystem creation.
# TYPE node_bcachefs_data_update_total counter
node_bcachefs_data_update_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.4206847997116416e+16
# HELP node_bcachefs_data_update_useless_write_fail_total Bcachefs counter data_update_useless_write_fail since filesystem creation.
# TYPE node_bcachefs_data_update_useless_write_fail_total counter
node_bcachefs_data_update_useless_write_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 5.30428461e+09
# HELP node_bcachefs_data_update_write_total Bcachefs counter data_update_write since filesystem creation.
# TYPE node_bcachefs_data_update_write_total counter
node_bcachefs_data_update_write_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.7163493018828e+13
# HELP node_bcachefs_data_write_total Bcachefs counter data_write since filesystem creation.
# TYPE node_bcachefs_data_write_total counter
node_bcachefs_data_write_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.0780769764966e+13
# HELP node_bcachefs_device_bucket_size_bytes Bucket size in bytes.
# TYPE node_bcachefs_device_bucket_size_bytes gauge
node_bcachefs_device_bucket_size_bytes{device="10",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 524288
node_bcachefs_device_bucket_size_bytes{device="4",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.097152e+06
node_bcachefs_device_bucket_size_bytes{device="6",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.097152e+06
node_bcachefs_device_bucket_size_bytes{device="7",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.097152e+06
node_bcachefs_device_bucket_size_bytes{device="8",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.097152e+06
# HELP node_bcachefs_device_buckets Total number of buckets.
# TYPE node_bcachefs_device_buckets gauge
node_bcachefs_device_buckets{device="10",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 953880
node_bcachefs_device_buckets{device="4",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 7.629824e+06
node_bcachefs_device_buckets{device="6",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 953864
node_bcachefs_device_buckets{device="7",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.907723e+06
node_bcachefs_device_buckets{device="8",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.384637e+06
# HELP node_bcachefs_device_durability Device durability setting.
# TYPE node_bcachefs_device_durability gauge
node_bcachefs_device_durability{device="10",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
node_bcachefs_device_durability{device="4",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
node_bcachefs_device_durability{device="6",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
node_bcachefs_device_durability{device="7",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
node_bcachefs_device_durability{device="8",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
# HELP node_bcachefs_device_info Device information.
# TYPE node_bcachefs_device_info gauge
node_bcachefs_device_info{device="10",label="disk-10",state="[rw] ro evacuating spare",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
node_bcachefs_device_info{device="4",label="disk-4",state="[rw] ro evacuating spare",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
node_bcachefs_device_info{device="6",label="disk-6",state="[rw] ro evacuating spare",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
node_bcachefs_device_info{device="7",label="disk-7",state="[rw] ro evacuating spare",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
node_bcachefs_device_info{device="8",label="disk-8",state="[rw] ro evacuating spare",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
# HELP node_bcachefs_device_io_done_bytes_total IO bytes by operation type and data type.
# TYPE node_bcachefs_device_io_done_bytes_total counter
node_bcachefs_device_io_done_bytes_total{data_type="btree",device="10",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 5.24288e+06
node_bcachefs_device_io_done_bytes_total{data_type="btree",device="10",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 16384
node_bcachefs_device_io_done_bytes_total{data_type="btree",device="4",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.193358848e+09
node_bcachefs_device_io_done_bytes_total{data_type="btree",device="4",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 589824
node_bcachefs_device_io_done_bytes_total{data_type="btree",device="6",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 8.912896e+06
node_bcachefs_device_io_done_bytes_total{data_type="btree",device="6",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="btree",device="7",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.767671263232e+12
node_bcachefs_device_io_done_bytes_total{data_type="btree",device="7",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 7.82753624064e+11
node_bcachefs_device_io_done_bytes_total{data_type="btree",device="8",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="btree",device="8",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="cached",device="10",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="cached",device="10",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="cached",device="4",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="cached",device="4",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="cached",device="6",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="cached",device="6",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="cached",device="7",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="cached",device="7",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="cached",device="8",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="cached",device="8",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="journal",device="10",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="journal",device="10",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="journal",device="4",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="journal",device="4",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="journal",device="6",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="journal",device="6",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="journal",device="7",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="journal",device="7",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.432028966912e+12
node_bcachefs_device_io_done_bytes_total{data_type="journal",device="8",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="journal",device="8",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_discard",device="10",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_discard",device="10",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_discard",device="4",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_discard",device="4",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_discard",device="6",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_discard",device="6",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_discard",device="7",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_discard",device="7",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_discard",device="8",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_discard",device="8",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_gc_gens",device="10",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_gc_gens",device="10",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_gc_gens",device="4",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_gc_gens",device="4",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_gc_gens",device="6",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_gc_gens",device="6",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_gc_gens",device="7",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_gc_gens",device="7",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_gc_gens",device="8",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_gc_gens",device="8",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="parity",device="10",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="parity",device="10",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="parity",device="4",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="parity",device="4",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="parity",device="6",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="parity",device="6",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="parity",device="7",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="parity",device="7",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="parity",device="8",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="parity",device="8",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="sb",device="10",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 86016
node_bcachefs_device_io_done_bytes_total{data_type="sb",device="10",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 645120
node_bcachefs_device_io_done_bytes_total{data_type="sb",device="4",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 86016
node_bcachefs_device_io_done_bytes_total{data_type="sb",device="4",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 645120
node_bcachefs_device_io_done_bytes_total{data_type="sb",device="6",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 86016
node_bcachefs_device_io_done_bytes_total{data_type="sb",device="6",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 677376
node_bcachefs_device_io_done_bytes_total{data_type="sb",device="7",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 86016
node_bcachefs_device_io_done_bytes_total{data_type="sb",device="7",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 645120
node_bcachefs_device_io_done_bytes_total{data_type="sb",device="8",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 86016
node_bcachefs_device_io_done_bytes_total{data_type="sb",device="8",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 645120
node_bcachefs_device_io_done_bytes_total{data_type="stripe",device="10",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="stripe",device="10",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="stripe",device="4",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="stripe",device="4",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="stripe",device="6",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="stripe",device="6",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="stripe",device="7",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="stripe",device="7",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="stripe",device="8",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="stripe",device="8",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="unstriped",device="10",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="unstriped",device="10",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="unstriped",device="4",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="unstriped",device="4",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="unstriped",device="6",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="unstriped",device="6",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="unstriped",device="7",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="unstriped",device="7",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="unstriped",device="8",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="unstriped",device="8",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="user",device="10",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.02313054208e+11
node_bcachefs_device_io_done_bytes_total{data_type="user",device="10",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.52377698304e+11
node_bcachefs_device_io_done_bytes_total{data_type="user",device="4",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.770452246528e+12
node_bcachefs_device_io_done_bytes_total{data_type="user",device="4",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6.258285805568e+12
node_bcachefs_device_io_done_bytes_total{data_type="user",device="6",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6.10019098624e+11
node_bcachefs_device_io_done_bytes_total{data_type="user",device="6",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 5.62070339584e+11
node_bcachefs_device_io_done_bytes_total{data_type="user",device="7",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 5.53932742656e+11
node_bcachefs_device_io_done_bytes_total{data_type="user",device="7",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.8382641152e+11
node_bcachefs_device_io_done_bytes_total{data_type="user",device="8",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.115020546048e+12
node_bcachefs_device_io_done_bytes_total{data_type="user",device="8",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6.072510210048e+12
# HELP node_bcachefs_device_io_errors_total IO errors by error type.
# TYPE node_bcachefs_device_io_errors_total counter
node_bcachefs_device_io_errors_total{device="10",type="checksum",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_errors_total{device="10",type="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_errors_total{device="10",type="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_errors_total{device="4",type="checksum",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_errors_total{device="4",type="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 197416
node_bcachefs_device_io_errors_total{device="4",type="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 205
node_bcachefs_device_io_errors_total{device="6",type="checksum",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 5
node_bcachefs_device_io_errors_total{device="6",type="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 18828
node_bcachefs_device_io_errors_total{device="6",type="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
node_bcachefs_device_io_errors_total{device="7",type="checksum",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 18
node_bcachefs_device_io_errors_total{device="7",type="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_errors_total{device="7",type="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_errors_total{device="8",type="checksum",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_errors_total{device="8",type="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_errors_total{device="8",type="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_error_throw_total Bcachefs counter error_throw since filesystem creation.
# TYPE node_bcachefs_error_throw_total counter
node_bcachefs_error_throw_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.719910958e+09
# HELP node_bcachefs_errors_total Error count by error type.
# TYPE node_bcachefs_errors_total counter
node_bcachefs_errors_total{error_type="accounting_mismatch",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6
node_bcachefs_errors_total{error_type="alloc_key_cached_sectors_wrong",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4537
node_bcachefs_errors_total{error_type="alloc_key_data_type_wrong",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4415
node_bcachefs_errors_total{error_type="alloc_key_dirty_sectors_wrong",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4538
node_bcachefs_errors_total{error_type="alloc_key_to_missing_lru_entry",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4517
node_bcachefs_errors_total{error_type="backpointer_to_missing_ptr",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 45480
node_bcachefs_errors_total{error_type="bset_bad_csum",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2
node_bcachefs_errors_total{error_type="btree_node_data_missing",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2
node_bcachefs_errors_total{error_type="btree_node_topology_bad_max_key",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2
node_bcachefs_errors_total{error_type="extent_io_opts_not_set",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.1299659571772285e+19
node_bcachefs_errors_total{error_type="extent_ptrs_all_invalid",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2
node_bcachefs_errors_total{error_type="extent_ptrs_all_invalid_but_cached",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 44612
node_bcachefs_errors_total{error_type="lru_entry_bad",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4537
node_bcachefs_errors_total{error_type="ptr_to_missing_backpointer",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 44112
node_bcachefs_errors_total{error_type="reconcile_work_incorrectly_set",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 113913
node_bcachefs_errors_total{error_type="subvol_missing",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 194
node_bcachefs_errors_total{error_type="validate_error_in_commit",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2
node_bcachefs_errors_total{error_type="vfs_bad_inode_rm",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 121
# HELP node_bcachefs_evacuate_bucket_total Bcachefs counter evacuate_bucket since filesystem creation.
# TYPE node_bcachefs_evacuate_bucket_total counter
node_bcachefs_evacuate_bucket_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6.735247e+06
# HELP node_bcachefs_fsync_total Bcachefs counter fsync since filesystem creation.
# TYPE node_bcachefs_fsync_total counter
node_bcachefs_fsync_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.515147e+06
# HELP node_bcachefs_gc_gens_end_total Bcachefs counter gc_gens_end since filesystem creation.
# TYPE node_bcachefs_gc_gens_end_total counter
node_bcachefs_gc_gens_end_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3
# HELP node_bcachefs_gc_gens_start_total Bcachefs counter gc_gens_start since filesystem creation.
# TYPE node_bcachefs_gc_gens_start_total counter
node_bcachefs_gc_gens_start_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3
# HELP node_bcachefs_info Filesystem information.
# TYPE node_bcachefs_info gauge
node_bcachefs_info{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
# HELP node_bcachefs_journal_full_total Bcachefs counter journal_full since filesystem creation.
# TYPE node_bcachefs_journal_full_total counter
node_bcachefs_journal_full_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 94587
# HELP node_bcachefs_journal_reclaim_finish_total Bcachefs counter journal_reclaim_finish since filesystem creation.
# TYPE node_bcachefs_journal_reclaim_finish_total counter
node_bcachefs_journal_reclaim_finish_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.06994135e+08
# HELP node_bcachefs_journal_reclaim_start_total Bcachefs counter journal_reclaim_start since filesystem creation.
# TYPE node_bcachefs_journal_reclaim_start_total counter
node_bcachefs_journal_reclaim_start_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.06994135e+08
# HELP node_bcachefs_journal_res_get_blocked_total Bcachefs counter journal_res_get_blocked since filesystem creation.
# TYPE node_bcachefs_journal_res_get_blocked_total counter
node_bcachefs_journal_res_get_blocked_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 74696
# HELP node_bcachefs_journal_write_total Bcachefs counter journal_write since filesystem creation.
# TYPE node_bcachefs_journal_write_total counter
node_bcachefs_journal_write_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.5458801e+07
# HELP node_bcachefs_open_bucket_alloc_fail_total Bcachefs counter open_bucket_alloc_fail since filesystem creation.
# TYPE node_bcachefs_open_bucket_alloc_fail_total counter
node_bcachefs_open_bucket_alloc_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_reconcile_btree_total Bcachefs counter reconcile_btree since filesystem creation.
# TYPE node_bcachefs_reconcile_btree_total counter
node_bcachefs_reconcile_btree_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.158221066e+09
# HELP node_bcachefs_reconcile_clear_scan_total Bcachefs counter reconcile_clear_scan since filesystem creation.
# TYPE node_bcachefs_reconcile_clear_scan_total counter
node_bcachefs_reconcile_clear_scan_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 11
# HELP node_bcachefs_reconcile_data_total Bcachefs counter reconcile_data since filesystem creation.
# TYPE node_bcachefs_reconcile_data_total counter
node_bcachefs_reconcile_data_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_reconcile_phys_total Bcachefs counter reconcile_phys since filesystem creation.
# TYPE node_bcachefs_reconcile_phys_total counter
node_bcachefs_reconcile_phys_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6.9928939526553e+13
# HELP node_bcachefs_reconcile_scan_device_total Bcachefs counter reconcile_scan_device since filesystem creation.
# TYPE node_bcachefs_reconcile_scan_device_total counter
node_bcachefs_reconcile_scan_device_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 8.3562883710976e+13
# HELP node_bcachefs_reconcile_scan_fs_total Bcachefs counter reconcile_scan_fs since filesystem creation.
# TYPE node_bcachefs_reconcile_scan_fs_total counter
node_bcachefs_reconcile_scan_fs_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_reconcile_scan_inum_total Bcachefs counter reconcile_scan_inum since filesystem creation.
# TYPE node_bcachefs_reconcile_scan_inum_total counter
node_bcachefs_reconcile_scan_inum_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_reconcile_scan_metadata_total Bcachefs counter reconcile_scan_metadata since filesystem creation.
# TYPE node_bcachefs_reconcile_scan_metadata_total counter
node_bcachefs_reconcile_scan_metadata_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_reconcile_scan_pending_total Bcachefs counter reconcile_scan_pending since filesystem creation.
# TYPE node_bcachefs_reconcile_scan_pending_total counter
node_bcachefs_reconcile_scan_pending_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_reconcile_set_pending_total Bcachefs counter reconcile_set_pending since filesystem creation.
# TYPE node_bcachefs_reconcile_set_pending_total counter
node_bcachefs_reconcile_set_pending_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.1138512896e+10
# HELP node_bcachefs_sectors_alloc_total Bcachefs counter sectors_alloc since filesystem creation.
# TYPE node_bcachefs_sectors_alloc_total counter
node_bcachefs_sectors_alloc_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.2534432556646e+13
# HELP node_bcachefs_stripe_alloc_total Bcachefs counter stripe_alloc since filesystem creation.
# TYPE node_bcachefs_stripe_alloc_total counter
node_bcachefs_stripe_alloc_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_stripe_create_fail_total Bcachefs counter stripe_create_fail since filesystem creation.
# TYPE node_bcachefs_stripe_create_fail_total counter
node_bcachefs_stripe_create_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_stripe_create_total Bcachefs counter stripe_create since filesystem creation.
# TYPE node_bcachefs_stripe_create_total counter
node_bcachefs_stripe_create_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_stripe_delete_total Bcachefs counter stripe_delete since filesystem creation.
# TYPE node_bcachefs_stripe_delete_total counter
node_bcachefs_stripe_delete_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_stripe_reuse_total Bcachefs counter stripe_reuse since filesystem creation.
# TYPE node_bcachefs_stripe_reuse_total counter
node_bcachefs_stripe_reuse_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_stripe_update_bucket_total Bcachefs counter stripe_update_bucket since filesystem creation.
# TYPE node_bcachefs_stripe_update_bucket_total counter
node_bcachefs_stripe_update_bucket_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_stripe_update_extent_fail_total Bcachefs counter stripe_update_extent_fail since filesystem creation.
# TYPE node_bcachefs_stripe_update_extent_fail_total counter
node_bcachefs_stripe_update_extent_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_stripe_update_extent_total Bcachefs counter stripe_update_extent since filesystem creation.
# TYPE node_bcachefs_stripe_update_extent_total counter
node_bcachefs_stripe_update_extent_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_sync_fs_total Bcachefs counter sync_fs since filesystem creation.
# TYPE node_bcachefs_sync_fs_total counter
node_bcachefs_sync_fs_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 42023
# HELP node_bcachefs_trans_blocked_journal_reclaim_total Bcachefs counter trans_blocked_journal_reclaim since filesystem creation.
# TYPE node_bcachefs_trans_blocked_journal_reclaim_total counter
node_bcachefs_trans_blocked_journal_reclaim_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 78
# HELP node_bcachefs_trans_restart_btree_node_reused_total Bcachefs counter trans_restart_btree_node_reused since filesystem creation.
# TYPE node_bcachefs_trans_restart_btree_node_reused_total counter
node_bcachefs_trans_restart_btree_node_reused_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 53354
# HELP node_bcachefs_trans_restart_btree_node_split_total Bcachefs counter trans_restart_btree_node_split since filesystem creation.
# TYPE node_bcachefs_trans_restart_btree_node_split_total counter
node_bcachefs_trans_restart_btree_node_split_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 100190
# HELP node_bcachefs_trans_restart_fault_inject_total Bcachefs counter trans_restart_fault_inject since filesystem creation.
# TYPE node_bcachefs_trans_restart_fault_inject_total counter
node_bcachefs_trans_restart_fault_inject_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_injected_total Bcachefs counter trans_restart_injected since filesystem creation.
# TYPE node_bcachefs_trans_restart_injected_total counter
node_bcachefs_trans_restart_injected_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_iter_upgrade_total Bcachefs counter trans_restart_iter_upgrade since filesystem creation.
# TYPE node_bcachefs_trans_restart_iter_upgrade_total counter
node_bcachefs_trans_restart_iter_upgrade_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_journal_preres_get_total Bcachefs counter trans_restart_journal_preres_get since filesystem creation.
# TYPE node_bcachefs_trans_restart_journal_preres_get_total counter
node_bcachefs_trans_restart_journal_preres_get_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_journal_reclaim_total Bcachefs counter trans_restart_journal_reclaim since filesystem creation.
# TYPE node_bcachefs_trans_restart_journal_reclaim_total counter
node_bcachefs_trans_restart_journal_reclaim_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_journal_res_get_total Bcachefs counter trans_restart_journal_res_get since filesystem creation.
# TYPE node_bcachefs_trans_restart_journal_res_get_total counter
node_bcachefs_trans_restart_journal_res_get_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_key_cache_key_realloced_total Bcachefs counter trans_restart_key_cache_key_realloced since filesystem creation.
# TYPE node_bcachefs_trans_restart_key_cache_key_realloced_total counter
node_bcachefs_trans_restart_key_cache_key_realloced_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_key_cache_raced_total Bcachefs counter trans_restart_key_cache_raced since filesystem creation.
# TYPE node_bcachefs_trans_restart_key_cache_raced_total counter
node_bcachefs_trans_restart_key_cache_raced_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_key_cache_upgrade_total Bcachefs counter trans_restart_key_cache_upgrade since filesystem creation.
# TYPE node_bcachefs_trans_restart_key_cache_upgrade_total counter
node_bcachefs_trans_restart_key_cache_upgrade_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_mark_replicas_total Bcachefs counter trans_restart_mark_replicas since filesystem creation.
# TYPE node_bcachefs_trans_restart_mark_replicas_total counter
node_bcachefs_trans_restart_mark_replicas_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_mem_realloced_total Bcachefs counter trans_restart_mem_realloced since filesystem creation.
# TYPE node_bcachefs_trans_restart_mem_realloced_total counter
node_bcachefs_trans_restart_mem_realloced_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6111
# HELP node_bcachefs_trans_restart_memory_allocation_failure_total Bcachefs counter trans_restart_memory_allocation_failure since filesystem creation.
# TYPE node_bcachefs_trans_restart_memory_allocation_failure_total counter
node_bcachefs_trans_restart_memory_allocation_failure_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.7513334e+07
# HELP node_bcachefs_trans_restart_relock_after_fill_total Bcachefs counter trans_restart_relock_after_fill since filesystem creation.
# TYPE node_bcachefs_trans_restart_relock_after_fill_total counter
node_bcachefs_trans_restart_relock_after_fill_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_relock_key_cache_fill_obsolete_total Bcachefs counter trans_restart_relock_key_cache_fill_obsolete since filesystem creation.
# TYPE node_bcachefs_trans_restart_relock_key_cache_fill_obsolete_total counter
node_bcachefs_trans_restart_relock_key_cache_fill_obsolete_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_relock_next_node_total Bcachefs counter trans_restart_relock_next_node since filesystem creation.
# TYPE node_bcachefs_trans_restart_relock_next_node_total counter
node_bcachefs_trans_restart_relock_next_node_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 22087
# HELP node_bcachefs_trans_restart_relock_parent_for_fill_obsolete_total Bcachefs counter trans_restart_relock_parent_for_fill_obsolete since filesystem creation.
# TYPE node_bcachefs_trans_restart_relock_parent_for_fill_obsolete_total counter
node_bcachefs_trans_restart_relock_parent_for_fill_obsolete_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2581
# HELP node_bcachefs_trans_restart_relock_path_intent_total Bcachefs counter trans_restart_relock_path_intent since filesystem creation.
# TYPE node_bcachefs_trans_restart_relock_path_intent_total counter
node_bcachefs_trans_restart_relock_path_intent_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 298090
# HELP node_bcachefs_trans_restart_relock_path_total Bcachefs counter trans_restart_relock_path since filesystem creation.
# TYPE node_bcachefs_trans_restart_relock_path_total counter
node_bcachefs_trans_restart_relock_path_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.752728e+07
# HELP node_bcachefs_trans_restart_relock_total Bcachefs counter trans_restart_relock since filesystem creation.
# TYPE node_bcachefs_trans_restart_relock_total counter
node_bcachefs_trans_restart_relock_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.806875e+06
# HELP node_bcachefs_trans_restart_split_race_total Bcachefs counter trans_restart_split_race since filesystem creation.
# TYPE node_bcachefs_trans_restart_split_race_total counter
node_bcachefs_trans_restart_split_race_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_too_many_iters_total Bcachefs counter trans_restart_too_many_iters since filesystem creation.
# TYPE node_bcachefs_trans_restart_too_many_iters_total counter
node_bcachefs_trans_restart_too_many_iters_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_traverse_total Bcachefs counter trans_restart_traverse since filesystem creation.
# TYPE node_bcachefs_trans_restart_traverse_total counter
node_bcachefs_trans_restart_traverse_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_upgrade_total Bcachefs counter trans_restart_upgrade since filesystem creation.
# TYPE node_bcachefs_trans_restart_upgrade_total counter
node_bcachefs_trans_restart_upgrade_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.055154e+06
# HELP node_bcachefs_trans_restart_would_deadlock_recursion_limit_total Bcachefs counter trans_restart_would_deadlock_recursion_limit since filesystem creation.
# TYPE node_bcachefs_trans_restart_would_deadlock_recursion_limit_total counter
node_bcachefs_trans_restart_would_deadlock_recursion_limit_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_would_deadlock_total Bcachefs counter trans_restart_would_deadlock since filesystem creation.
# TYPE node_bcachefs_trans_restart_would_deadlock_total counter
node_bcachefs_trans_restart_would_deadlock_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.025983e+06
# HELP node_bcachefs_trans_restart_would_deadlock_write_total Bcachefs counter trans_restart_would_deadlock_write since filesystem creation.
# TYPE node_bcachefs_trans_restart_would_deadlock_write_total counter
node_bcachefs_trans_restart_would_deadlock_write_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2
# HELP node_bcachefs_trans_restart_write_buffer_flush_total Bcachefs counter trans_restart_write_buffer_flush since filesystem creation.
# TYPE node_bcachefs_trans_restart_write_buffer_flush_total counter
node_bcachefs_trans_restart_write_buffer_flush_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 5.1706894e+07
# HELP node_bcachefs_trans_traverse_all_total Bcachefs counter trans_traverse_all since filesystem creation.
# TYPE node_bcachefs_trans_traverse_all_total counter
node_bcachefs_trans_traverse_all_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 7.8477746e+07
# HELP node_bcachefs_transaction_commit_total Bcachefs counter transaction_commit since filesystem creation.
# TYPE node_bcachefs_transaction_commit_total counter
node_bcachefs_transaction_commit_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.338059022e+09
# HELP node_bcachefs_write_buffer_flush_slowpath_total Bcachefs counter write_buffer_flush_slowpath since filesystem creation.
# TYPE node_bcachefs_write_buffer_flush_slowpath_total counter
node_bcachefs_write_buffer_flush_slowpath_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 21031
# HELP node_bcachefs_write_buffer_flush_sync_total Bcachefs counter write_buffer_flush_sync since filesystem creation.
# TYPE node_bcachefs_write_buffer_flush_sync_total counter
node_bcachefs_write_buffer_flush_sync_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6.024402e+06
# HELP node_bcachefs_write_buffer_flush_total Bcachefs counter write_buffer_flush since filesystem creation.
# TYPE node_bcachefs_write_buffer_flush_total counter
node_bcachefs_write_buffer_flush_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.8370568e+07
# HELP node_bcachefs_write_buffer_maybe_flush_total Bcachefs counter write_buffer_maybe_flush since filesystem creation.
# TYPE node_bcachefs_write_buffer_maybe_flush_total counter
node_bcachefs_write_buffer_maybe_flush_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.7412849e+07
# HELP node_bcachefs_write_super_total Bcachefs counter write_super since filesystem creation.
# TYPE node_bcachefs_write_super_total counter
node_bcachefs_write_super_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 30277
# HELP node_bonding_active Number of active slaves per bonding interface.
# TYPE node_bonding_active gauge
node_bonding_active{master="bond0"} 0
@ -494,9 +1085,9 @@ node_disk_info{device="dm-2",major="252",minor="2",model="",path="",revision="",
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="mmcblk0",major="179",minor="0",model="",path="platform-df2969f3.mmc",revision="",rotational="0",serial="0x83e36d93",wwn=""} 1
node_disk_info{device="mmcblk0p1",major="179",minor="1",model="",path="platform-df2969f3.mmc",revision="",rotational="0",serial="0x83e36d93",wwn=""} 1
node_disk_info{device="mmcblk0p2",major="179",minor="2",model="",path="platform-df2969f3.mmc",revision="",rotational="0",serial="0x83e36d93",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
@ -2267,44 +2858,44 @@ node_mountstats_nfs_total_write_bytes_total{export="192.168.1.1:/srv/test",mount
node_mountstats_nfs_total_write_bytes_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 0
# HELP node_mountstats_nfs_transport_backlog_queue_total Total number of items added to the RPC backlog queue.
# TYPE node_mountstats_nfs_transport_backlog_queue_total counter
node_mountstats_nfs_transport_backlog_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 0
node_mountstats_nfs_transport_backlog_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 0
node_mountstats_nfs_transport_backlog_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp",transport="0"} 0
node_mountstats_nfs_transport_backlog_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp",transport="0"} 0
# HELP node_mountstats_nfs_transport_bad_transaction_ids_total Number of times the NFS server sent a response with a transaction ID unknown to this client.
# TYPE node_mountstats_nfs_transport_bad_transaction_ids_total counter
node_mountstats_nfs_transport_bad_transaction_ids_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 0
node_mountstats_nfs_transport_bad_transaction_ids_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 0
node_mountstats_nfs_transport_bad_transaction_ids_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp",transport="0"} 0
node_mountstats_nfs_transport_bad_transaction_ids_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp",transport="0"} 0
# HELP node_mountstats_nfs_transport_bind_total Number of times the client has had to establish a connection from scratch to the NFS server.
# TYPE node_mountstats_nfs_transport_bind_total counter
node_mountstats_nfs_transport_bind_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 0
node_mountstats_nfs_transport_bind_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 0
node_mountstats_nfs_transport_bind_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp",transport="0"} 0
node_mountstats_nfs_transport_bind_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp",transport="0"} 0
# HELP node_mountstats_nfs_transport_connect_total Number of times the client has made a TCP connection to the NFS server.
# TYPE node_mountstats_nfs_transport_connect_total counter
node_mountstats_nfs_transport_connect_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 1
node_mountstats_nfs_transport_connect_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 0
node_mountstats_nfs_transport_connect_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp",transport="0"} 1
node_mountstats_nfs_transport_connect_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp",transport="0"} 0
# HELP node_mountstats_nfs_transport_idle_time_seconds Duration since the NFS mount last saw any RPC traffic, in seconds.
# TYPE node_mountstats_nfs_transport_idle_time_seconds gauge
node_mountstats_nfs_transport_idle_time_seconds{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 11
node_mountstats_nfs_transport_idle_time_seconds{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 0
node_mountstats_nfs_transport_idle_time_seconds{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp",transport="0"} 11
node_mountstats_nfs_transport_idle_time_seconds{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp",transport="0"} 0
# HELP node_mountstats_nfs_transport_maximum_rpc_slots Maximum number of simultaneously active RPC requests ever used.
# TYPE node_mountstats_nfs_transport_maximum_rpc_slots gauge
node_mountstats_nfs_transport_maximum_rpc_slots{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 24
node_mountstats_nfs_transport_maximum_rpc_slots{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 24
node_mountstats_nfs_transport_maximum_rpc_slots{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp",transport="0"} 24
node_mountstats_nfs_transport_maximum_rpc_slots{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp",transport="0"} 24
# HELP node_mountstats_nfs_transport_pending_queue_total Total number of items added to the RPC transmission pending queue.
# TYPE node_mountstats_nfs_transport_pending_queue_total counter
node_mountstats_nfs_transport_pending_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 5726
node_mountstats_nfs_transport_pending_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 5726
node_mountstats_nfs_transport_pending_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp",transport="0"} 5726
node_mountstats_nfs_transport_pending_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp",transport="0"} 5726
# HELP node_mountstats_nfs_transport_receives_total Number of RPC responses for this mount received from the NFS server.
# TYPE node_mountstats_nfs_transport_receives_total counter
node_mountstats_nfs_transport_receives_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 6428
node_mountstats_nfs_transport_receives_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 6428
node_mountstats_nfs_transport_receives_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp",transport="0"} 6428
node_mountstats_nfs_transport_receives_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp",transport="0"} 6428
# HELP node_mountstats_nfs_transport_sending_queue_total Total number of items added to the RPC transmission sending queue.
# TYPE node_mountstats_nfs_transport_sending_queue_total counter
node_mountstats_nfs_transport_sending_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 26
node_mountstats_nfs_transport_sending_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 26
node_mountstats_nfs_transport_sending_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp",transport="0"} 26
node_mountstats_nfs_transport_sending_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp",transport="0"} 26
# HELP node_mountstats_nfs_transport_sends_total Number of RPC requests for this mount sent to the NFS server.
# TYPE node_mountstats_nfs_transport_sends_total counter
node_mountstats_nfs_transport_sends_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 6428
node_mountstats_nfs_transport_sends_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 6428
node_mountstats_nfs_transport_sends_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp",transport="0"} 6428
node_mountstats_nfs_transport_sends_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp",transport="0"} 6428
# HELP node_mountstats_nfs_write_bytes_total Number of bytes written using the write() syscall.
# TYPE node_mountstats_nfs_write_bytes_total counter
node_mountstats_nfs_write_bytes_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 0
@ -2825,7 +3416,22 @@ node_nfsd_server_rpcs_total 18628
node_nfsd_server_threads 8
# HELP node_nvme_info Non-numeric data from /sys/class/nvme/<device>, value is always 1.
# TYPE node_nvme_info gauge
node_nvme_info{device="nvme0",firmware_revision="1B2QEXP7",model="Samsung SSD 970 PRO 512GB",serial="S680HF8N190894I",state="live"} 1
node_nvme_info{cntlid="1997",device="nvme0",firmware_revision="1B2QEXP7",model="Samsung SSD 970 PRO 512GB",serial="S680HF8N190894I",state="live"} 1
# HELP node_nvme_namespace_capacity_bytes Capacity of the NVMe namespace in bytes. Computed as namespace_size * namespace_logical_block_size
# TYPE node_nvme_namespace_capacity_bytes gauge
node_nvme_namespace_capacity_bytes{device="nvme0",nsid="0"} 1.6e+13
# HELP node_nvme_namespace_info Information about NVMe namespaces. Value is always 1
# TYPE node_nvme_namespace_info gauge
node_nvme_namespace_info{ana_state="optimized",device="nvme0",nsid="0"} 1
# HELP node_nvme_namespace_logical_block_size_bytes Logical block size of the NVMe namespace in bytes. Usually 4Kb. Available in /sys/class/nvme/<device>/<namespace>/queue/logical_block_size
# TYPE node_nvme_namespace_logical_block_size_bytes gauge
node_nvme_namespace_logical_block_size_bytes{device="nvme0",nsid="0"} 4096
# HELP node_nvme_namespace_size_bytes Size of the NVMe namespace in bytes. Available in /sys/class/nvme/<device>/<namespace>/size
# TYPE node_nvme_namespace_size_bytes gauge
node_nvme_namespace_size_bytes{device="nvme0",nsid="0"} 1.6e+13
# HELP node_nvme_namespace_used_bytes Used space of the NVMe namespace in bytes. Available in /sys/class/nvme/<device>/<namespace>/nuse
# TYPE node_nvme_namespace_used_bytes gauge
node_nvme_namespace_used_bytes{device="nvme0",nsid="0"} 2e+12
# HELP node_os_info A metric with a constant '1' value labeled by build_id, id, id_like, image_id, image_version, name, pretty_name, variant, variant_id, version, version_codename, version_id.
# TYPE node_os_info gauge
node_os_info{build_id="",id="ubuntu",id_like="debian",image_id="",image_version="",name="Ubuntu",pretty_name="Ubuntu 20.04.2 LTS",variant="",variant_id="",version="20.04.2 LTS (Focal Fossa)",version_codename="focal",version_id="20.04"} 1
@ -2836,22 +3442,78 @@ node_os_version{id="ubuntu",id_like="debian",name="Ubuntu"} 20.04
# TYPE node_pcidevice_current_link_transfers_per_second gauge
node_pcidevice_current_link_transfers_per_second{bus="00",device="02",function="1",segment="0000"} 8e+09
node_pcidevice_current_link_transfers_per_second{bus="01",device="00",function="0",segment="0000"} 8e+09
node_pcidevice_current_link_transfers_per_second{bus="45",device="00",function="0",segment="0000"} 5e+09
# HELP node_pcidevice_current_link_width Value of current link's width (number of lanes)
# TYPE node_pcidevice_current_link_width gauge
node_pcidevice_current_link_width{bus="00",device="02",function="1",segment="0000"} 4
node_pcidevice_current_link_width{bus="01",device="00",function="0",segment="0000"} 4
node_pcidevice_current_link_width{bus="45",device="00",function="0",segment="0000"} 4
# HELP node_pcidevice_d3cold_allowed Whether the PCIe device supports D3cold power state (0/1).
# TYPE node_pcidevice_d3cold_allowed gauge
node_pcidevice_d3cold_allowed{bus="00",device="02",function="1",segment="0000"} 1
node_pcidevice_d3cold_allowed{bus="01",device="00",function="0",segment="0000"} 1
node_pcidevice_d3cold_allowed{bus="45",device="00",function="0",segment="0000"} 1
# HELP node_pcidevice_info Non-numeric data from /sys/bus/pci/devices/<location>, value is always 1.
# TYPE node_pcidevice_info gauge
node_pcidevice_info{bus="00",class_id="0x060400",device="02",function="1",parent_bus="*",parent_device="*",parent_function="*",parent_segment="*",revision="0x00",segment="0000",subsystem_device_id="0x5095",subsystem_vendor_id="0x17aa",vendor_id="0x1634"} 1
node_pcidevice_info{bus="01",class_id="0x010802",device="00",function="0",parent_bus="00",parent_device="02",parent_function="1",parent_segment="0000",revision="0x01",segment="0000",subsystem_device_id="0x5021",subsystem_vendor_id="0xc0a9",vendor_id="0x540a"} 1
node_pcidevice_info{bus="00",class_id="0x060400",device="02",device_id="0x1634",function="1",parent_bus="*",parent_device="*",parent_function="*",parent_segment="*",revision="0x00",segment="0000",subsystem_device_id="0x5095",subsystem_vendor_id="0x17aa",vendor_id="0x1022"} 1
node_pcidevice_info{bus="01",class_id="0x010802",device="00",device_id="0x540a",function="0",parent_bus="00",parent_device="02",parent_function="1",parent_segment="0000",revision="0x01",segment="0000",subsystem_device_id="0x5021",subsystem_vendor_id="0xc0a9",vendor_id="0xc0a9"} 1
node_pcidevice_info{bus="45",class_id="0x020000",device="00",device_id="0x1521",function="0",parent_bus="40",parent_device="01",parent_function="3",parent_segment="0000",revision="0x01",segment="0000",subsystem_device_id="0x00a3",subsystem_vendor_id="0x8086",vendor_id="0x8086"} 1
# HELP node_pcidevice_max_link_transfers_per_second Value of maximum link's transfers per second (T/s)
# TYPE node_pcidevice_max_link_transfers_per_second gauge
node_pcidevice_max_link_transfers_per_second{bus="00",device="02",function="1",segment="0000"} 8e+09
node_pcidevice_max_link_transfers_per_second{bus="01",device="00",function="0",segment="0000"} 1.6e+10
node_pcidevice_max_link_transfers_per_second{bus="45",device="00",function="0",segment="0000"} 5e+09
# HELP node_pcidevice_max_link_width Value of maximum link's width (number of lanes)
# TYPE node_pcidevice_max_link_width gauge
node_pcidevice_max_link_width{bus="00",device="02",function="1",segment="0000"} 8
node_pcidevice_max_link_width{bus="01",device="00",function="0",segment="0000"} 4
node_pcidevice_max_link_width{bus="45",device="00",function="0",segment="0000"} 4
# HELP node_pcidevice_numa_node NUMA node number for the PCI device. -1 indicates unknown or not available.
# TYPE node_pcidevice_numa_node gauge
node_pcidevice_numa_node{bus="45",device="00",function="0",segment="0000"} 0
# HELP node_pcidevice_power_state PCIe device power state, one of: D0, D1, D2, D3hot, D3cold, unknown or error.
# TYPE node_pcidevice_power_state gauge
node_pcidevice_power_state{bus="00",device="02",function="1",segment="0000",state="D0"} 1
node_pcidevice_power_state{bus="00",device="02",function="1",segment="0000",state="D1"} 0
node_pcidevice_power_state{bus="00",device="02",function="1",segment="0000",state="D2"} 0
node_pcidevice_power_state{bus="00",device="02",function="1",segment="0000",state="D3cold"} 0
node_pcidevice_power_state{bus="00",device="02",function="1",segment="0000",state="D3hot"} 0
node_pcidevice_power_state{bus="00",device="02",function="1",segment="0000",state="error"} 0
node_pcidevice_power_state{bus="00",device="02",function="1",segment="0000",state="unknown"} 0
node_pcidevice_power_state{bus="01",device="00",function="0",segment="0000",state="D0"} 1
node_pcidevice_power_state{bus="01",device="00",function="0",segment="0000",state="D1"} 0
node_pcidevice_power_state{bus="01",device="00",function="0",segment="0000",state="D2"} 0
node_pcidevice_power_state{bus="01",device="00",function="0",segment="0000",state="D3cold"} 0
node_pcidevice_power_state{bus="01",device="00",function="0",segment="0000",state="D3hot"} 0
node_pcidevice_power_state{bus="01",device="00",function="0",segment="0000",state="error"} 0
node_pcidevice_power_state{bus="01",device="00",function="0",segment="0000",state="unknown"} 0
node_pcidevice_power_state{bus="45",device="00",function="0",segment="0000",state="D0"} 1
node_pcidevice_power_state{bus="45",device="00",function="0",segment="0000",state="D1"} 0
node_pcidevice_power_state{bus="45",device="00",function="0",segment="0000",state="D2"} 0
node_pcidevice_power_state{bus="45",device="00",function="0",segment="0000",state="D3cold"} 0
node_pcidevice_power_state{bus="45",device="00",function="0",segment="0000",state="D3hot"} 0
node_pcidevice_power_state{bus="45",device="00",function="0",segment="0000",state="error"} 0
node_pcidevice_power_state{bus="45",device="00",function="0",segment="0000",state="unknown"} 0
# HELP node_pcidevice_sriov_drivers_autoprobe Whether SR-IOV drivers autoprobe is enabled for the device (0/1).
# TYPE node_pcidevice_sriov_drivers_autoprobe gauge
node_pcidevice_sriov_drivers_autoprobe{bus="00",device="02",function="1",segment="0000"} 0
node_pcidevice_sriov_drivers_autoprobe{bus="01",device="00",function="0",segment="0000"} 1
node_pcidevice_sriov_drivers_autoprobe{bus="45",device="00",function="0",segment="0000"} 1
# HELP node_pcidevice_sriov_numvfs Number of Virtual Functions (VFs) currently enabled for SR-IOV.
# TYPE node_pcidevice_sriov_numvfs gauge
node_pcidevice_sriov_numvfs{bus="00",device="02",function="1",segment="0000"} 0
node_pcidevice_sriov_numvfs{bus="01",device="00",function="0",segment="0000"} 4
node_pcidevice_sriov_numvfs{bus="45",device="00",function="0",segment="0000"} 0
# HELP node_pcidevice_sriov_totalvfs Total number of Virtual Functions (VFs) supported by the device.
# TYPE node_pcidevice_sriov_totalvfs gauge
node_pcidevice_sriov_totalvfs{bus="00",device="02",function="1",segment="0000"} 0
node_pcidevice_sriov_totalvfs{bus="01",device="00",function="0",segment="0000"} 8
node_pcidevice_sriov_totalvfs{bus="45",device="00",function="0",segment="0000"} 7
# HELP node_pcidevice_sriov_vf_total_msix Total number of MSI-X vectors for Virtual Functions.
# TYPE node_pcidevice_sriov_vf_total_msix gauge
node_pcidevice_sriov_vf_total_msix{bus="00",device="02",function="1",segment="0000"} 0
node_pcidevice_sriov_vf_total_msix{bus="01",device="00",function="0",segment="0000"} 16
node_pcidevice_sriov_vf_total_msix{bus="45",device="00",function="0",segment="0000"} 0
# HELP node_power_supply_capacity capacity value of /sys/class/power_supply/<power_supply>.
# TYPE node_power_supply_capacity gauge
node_power_supply_capacity{power_supply="BAT0"} 81
@ -2978,6 +3640,7 @@ node_schedstat_waiting_seconds_total{cpu="1"} 364107.263788241
# TYPE node_scrape_collector_success gauge
node_scrape_collector_success{collector="arp"} 1
node_scrape_collector_success{collector="bcache"} 1
node_scrape_collector_success{collector="bcachefs"} 1
node_scrape_collector_success{collector="bonding"} 1
node_scrape_collector_success{collector="btrfs"} 1
node_scrape_collector_success{collector="buddyinfo"} 1
@ -3356,6 +4019,10 @@ node_wifi_station_receive_bits_per_second{device="wlan0",mac_address="aa:bb:cc:d
# TYPE node_wifi_station_receive_bytes_total counter
node_wifi_station_receive_bytes_total{device="wlan0",mac_address="01:02:03:04:05:06"} 0
node_wifi_station_receive_bytes_total{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 0
# HELP node_wifi_station_received_packets_total The total number of packets received by a station.
# TYPE node_wifi_station_received_packets_total counter
node_wifi_station_received_packets_total{device="wlan0",mac_address="01:02:03:04:05:06"} 0
node_wifi_station_received_packets_total{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 0
# HELP node_wifi_station_signal_dbm The current WiFi signal strength, in decibel-milliwatts (dBm).
# TYPE node_wifi_station_signal_dbm gauge
node_wifi_station_signal_dbm{device="wlan0",mac_address="01:02:03:04:05:06"} -26
@ -3376,6 +4043,10 @@ node_wifi_station_transmit_failed_total{device="wlan0",mac_address="aa:bb:cc:dd:
# TYPE node_wifi_station_transmit_retries_total counter
node_wifi_station_transmit_retries_total{device="wlan0",mac_address="01:02:03:04:05:06"} 20
node_wifi_station_transmit_retries_total{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 10
# HELP node_wifi_station_transmitted_packets_total The total number of packets transmitted by a station.
# TYPE node_wifi_station_transmitted_packets_total counter
node_wifi_station_transmitted_packets_total{device="wlan0",mac_address="01:02:03:04:05:06"} 0
node_wifi_station_transmitted_packets_total{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 0
# HELP node_xfrm_acquire_error_packets_total State hasn’t been fully acquired before use
# TYPE node_xfrm_acquire_error_packets_total counter
node_xfrm_acquire_error_packets_total 24532

@ -94,15 +94,19 @@ node_buddyinfo_blocks{node="0",size="9",zone="Normal"} 0
# HELP node_disk_read_errors_total The total number of read errors.
# TYPE node_disk_read_errors_total counter
node_disk_read_errors_total{device="disk0"} 0
node_disk_read_errors_total{device="disk4"} 0
# HELP node_disk_read_retries_total The total number of read retries.
# TYPE node_disk_read_retries_total counter
node_disk_read_retries_total{device="disk0"} 0
node_disk_read_retries_total{device="disk4"} 0
# HELP node_disk_write_errors_total The total number of write errors.
# TYPE node_disk_write_errors_total counter
node_disk_write_errors_total{device="disk0"} 0
node_disk_write_errors_total{device="disk4"} 0
# HELP node_disk_write_retries_total The total number of write retries.
# TYPE node_disk_write_retries_total counter
node_disk_write_retries_total{device="disk0"} 0
node_disk_write_retries_total{device="disk4"} 0
# HELP node_exporter_build_info A metric with a constant '1' value labeled by version, revision, branch, goversion from which node_exporter was built, and the goos and goarch for the build.
# TYPE node_exporter_build_info gauge
# HELP node_memory_swap_total_bytes Memory information field swap_total_bytes.

@ -261,6 +261,18 @@ node_xfrm_out_state_proto_error_packets_total 4542
# HELP node_xfrm_out_state_seq_error_packets_total Sequence error i.e. Sequence number overflow
# TYPE node_xfrm_out_state_seq_error_packets_total counter
node_xfrm_out_state_seq_error_packets_total 543
# HELP node_zfs_arcstats_c_min_bytes ZFS ARC minimum size
# TYPE node_zfs_arcstats_c_min_bytes gauge
node_zfs_arcstats_c_min_bytes 1.99743232e+08
# HELP node_zfs_arcstats_mfu_ghost_size ZFS ARC MFU ghost size
# TYPE node_zfs_arcstats_mfu_ghost_size gauge
node_zfs_arcstats_mfu_ghost_size 0
# HELP node_zfs_arcstats_mru_ghost_hits_total ZFS ARC MRU ghost hits
# TYPE node_zfs_arcstats_mru_ghost_hits_total counter
node_zfs_arcstats_mru_ghost_hits_total 0
# HELP node_zfs_arcstats_pm_bytes ZFS ARC meta MRU target frac
# TYPE node_zfs_arcstats_pm_bytes gauge
node_zfs_arcstats_pm_bytes 2.147483648e+09
# HELP promhttp_metric_handler_errors_total Total number of internal errors encountered by the promhttp metric handler.
# TYPE promhttp_metric_handler_errors_total counter
promhttp_metric_handler_errors_total{cause="encoding"} 0

@ -144,6 +144,597 @@ node_bcache_writeback_rate_proportional_term{backing_device="bdev0",uuid="deaddd
# HELP node_bcache_written_bytes_total Sum of all data that has been written to the cache.
# TYPE node_bcache_written_bytes_total counter
node_bcache_written_bytes_total{cache_device="cache0",uuid="deaddd54-c735-46d5-868e-f331c5fd7c74"} 0
# HELP node_bcachefs_accounting_key_to_wb_slowpath_total Bcachefs counter accounting_key_to_wb_slowpath since filesystem creation.
# TYPE node_bcachefs_accounting_key_to_wb_slowpath_total counter
node_bcachefs_accounting_key_to_wb_slowpath_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.4105502e+07
# HELP node_bcachefs_bkey_pack_pos_fail_total Bcachefs counter bkey_pack_pos_fail since filesystem creation.
# TYPE node_bcachefs_bkey_pack_pos_fail_total counter
node_bcachefs_bkey_pack_pos_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_btree_cache_cannibalize_lock_fail_total Bcachefs counter btree_cache_cannibalize_lock_fail since filesystem creation.
# TYPE node_bcachefs_btree_cache_cannibalize_lock_fail_total counter
node_bcachefs_btree_cache_cannibalize_lock_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 24213
# HELP node_bcachefs_btree_cache_cannibalize_lock_total Bcachefs counter btree_cache_cannibalize_lock since filesystem creation.
# TYPE node_bcachefs_btree_cache_cannibalize_lock_total counter
node_bcachefs_btree_cache_cannibalize_lock_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6.2061408e+07
# HELP node_bcachefs_btree_cache_cannibalize_total Bcachefs counter btree_cache_cannibalize since filesystem creation.
# TYPE node_bcachefs_btree_cache_cannibalize_total counter
node_bcachefs_btree_cache_cannibalize_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.6587339e+07
# HELP node_bcachefs_btree_cache_cannibalize_unlock_total Bcachefs counter btree_cache_cannibalize_unlock since filesystem creation.
# TYPE node_bcachefs_btree_cache_cannibalize_unlock_total counter
node_bcachefs_btree_cache_cannibalize_unlock_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.6260384e+07
# HELP node_bcachefs_btree_cache_reap_total Bcachefs counter btree_cache_reap since filesystem creation.
# TYPE node_bcachefs_btree_cache_reap_total counter
node_bcachefs_btree_cache_reap_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6.9068459e+07
# HELP node_bcachefs_btree_cache_scan_total Bcachefs counter btree_cache_scan since filesystem creation.
# TYPE node_bcachefs_btree_cache_scan_total counter
node_bcachefs_btree_cache_scan_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 427545
# HELP node_bcachefs_btree_cache_size_bytes Btree cache memory usage in bytes.
# TYPE node_bcachefs_btree_cache_size_bytes gauge
node_bcachefs_btree_cache_size_bytes{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.201170739e+09
# HELP node_bcachefs_btree_key_cache_fill_total Bcachefs counter btree_key_cache_fill since filesystem creation.
# TYPE node_bcachefs_btree_key_cache_fill_total counter
node_bcachefs_btree_key_cache_fill_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.69308144e+08
# HELP node_bcachefs_btree_node_alloc_total Bcachefs counter btree_node_alloc since filesystem creation.
# TYPE node_bcachefs_btree_node_alloc_total counter
node_bcachefs_btree_node_alloc_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 8.665587e+06
# HELP node_bcachefs_btree_node_compact_total Bcachefs counter btree_node_compact since filesystem creation.
# TYPE node_bcachefs_btree_node_compact_total counter
node_bcachefs_btree_node_compact_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 5.554425e+06
# HELP node_bcachefs_btree_node_free_total Bcachefs counter btree_node_free since filesystem creation.
# TYPE node_bcachefs_btree_node_free_total counter
node_bcachefs_btree_node_free_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.4112667e+07
# HELP node_bcachefs_btree_node_merge_attempt_total Bcachefs counter btree_node_merge_attempt since filesystem creation.
# TYPE node_bcachefs_btree_node_merge_attempt_total counter
node_bcachefs_btree_node_merge_attempt_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.5868895e+07
# HELP node_bcachefs_btree_node_merge_total Bcachefs counter btree_node_merge since filesystem creation.
# TYPE node_bcachefs_btree_node_merge_total counter
node_bcachefs_btree_node_merge_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 559684
# HELP node_bcachefs_btree_node_read_total Bcachefs counter btree_node_read since filesystem creation.
# TYPE node_bcachefs_btree_node_read_total counter
node_bcachefs_btree_node_read_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 7.0225874e+07
# HELP node_bcachefs_btree_node_rewrite_total Bcachefs counter btree_node_rewrite since filesystem creation.
# TYPE node_bcachefs_btree_node_rewrite_total counter
node_bcachefs_btree_node_rewrite_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.130316e+06
# HELP node_bcachefs_btree_node_set_root_total Bcachefs counter btree_node_set_root since filesystem creation.
# TYPE node_bcachefs_btree_node_set_root_total counter
node_bcachefs_btree_node_set_root_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 77958
# HELP node_bcachefs_btree_node_split_total Bcachefs counter btree_node_split since filesystem creation.
# TYPE node_bcachefs_btree_node_split_total counter
node_bcachefs_btree_node_split_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 710571
# HELP node_bcachefs_btree_node_write_total Bcachefs counter btree_node_write since filesystem creation.
# TYPE node_bcachefs_btree_node_write_total counter
node_bcachefs_btree_node_write_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.4796849e+08
# HELP node_bcachefs_btree_path_relock_fail_total Bcachefs counter btree_path_relock_fail since filesystem creation.
# TYPE node_bcachefs_btree_path_relock_fail_total counter
node_bcachefs_btree_path_relock_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 5.6213103e+07
# HELP node_bcachefs_btree_path_upgrade_fail_total Bcachefs counter btree_path_upgrade_fail since filesystem creation.
# TYPE node_bcachefs_btree_path_upgrade_fail_total counter
node_bcachefs_btree_path_upgrade_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.103667e+06
# HELP node_bcachefs_btree_reserve_get_fail_total Bcachefs counter btree_reserve_get_fail since filesystem creation.
# TYPE node_bcachefs_btree_reserve_get_fail_total counter
node_bcachefs_btree_reserve_get_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 11706
# HELP node_bcachefs_btree_write_average_size_bytes Average btree write size by type.
# TYPE node_bcachefs_btree_write_average_size_bytes gauge
node_bcachefs_btree_write_average_size_bytes{type="cache_reclaim",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 720
node_bcachefs_btree_write_average_size_bytes{type="init_next_bset",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 28876
node_bcachefs_btree_write_average_size_bytes{type="initial",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 102400
node_bcachefs_btree_write_average_size_bytes{type="interior",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1290
node_bcachefs_btree_write_average_size_bytes{type="journal_reclaim",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 697
# HELP node_bcachefs_btree_writes_total Number of btree writes by type.
# TYPE node_bcachefs_btree_writes_total counter
node_bcachefs_btree_writes_total{type="cache_reclaim",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 14401
node_bcachefs_btree_writes_total{type="init_next_bset",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.055926e+06
node_bcachefs_btree_writes_total{type="initial",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.298401e+06
node_bcachefs_btree_writes_total{type="interior",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.035363e+06
node_bcachefs_btree_writes_total{type="journal_reclaim",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6.6903805e+07
# HELP node_bcachefs_bucket_alloc_fail_total Bcachefs counter bucket_alloc_fail since filesystem creation.
# TYPE node_bcachefs_bucket_alloc_fail_total counter
node_bcachefs_bucket_alloc_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.1156091e+07
# HELP node_bcachefs_bucket_alloc_from_stripe_total Bcachefs counter bucket_alloc_from_stripe since filesystem creation.
# TYPE node_bcachefs_bucket_alloc_from_stripe_total counter
node_bcachefs_bucket_alloc_from_stripe_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_bucket_alloc_total Bcachefs counter bucket_alloc since filesystem creation.
# TYPE node_bcachefs_bucket_alloc_total counter
node_bcachefs_bucket_alloc_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.7363674e+07
# HELP node_bcachefs_bucket_discard_fast_total Bcachefs counter bucket_discard_fast since filesystem creation.
# TYPE node_bcachefs_bucket_discard_fast_total counter
node_bcachefs_bucket_discard_fast_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 10204
# HELP node_bcachefs_bucket_discard_fast_worker_total Bcachefs counter bucket_discard_fast_worker since filesystem creation.
# TYPE node_bcachefs_bucket_discard_fast_worker_total counter
node_bcachefs_bucket_discard_fast_worker_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4012
# HELP node_bcachefs_bucket_discard_total Bcachefs counter bucket_discard since filesystem creation.
# TYPE node_bcachefs_bucket_discard_total counter
node_bcachefs_bucket_discard_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.4751388e+07
# HELP node_bcachefs_bucket_discard_worker_total Bcachefs counter bucket_discard_worker since filesystem creation.
# TYPE node_bcachefs_bucket_discard_worker_total counter
node_bcachefs_bucket_discard_worker_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 7.021501e+06
# HELP node_bcachefs_bucket_invalidate_total Bcachefs counter bucket_invalidate since filesystem creation.
# TYPE node_bcachefs_bucket_invalidate_total counter
node_bcachefs_bucket_invalidate_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.483205e+06
# HELP node_bcachefs_cached_ptr_drop_total Bcachefs counter cached_ptr_drop since filesystem creation.
# TYPE node_bcachefs_cached_ptr_drop_total counter
node_bcachefs_cached_ptr_drop_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.201170739e+09
# HELP node_bcachefs_compression_compressed_bytes Compressed size by algorithm.
# TYPE node_bcachefs_compression_compressed_bytes gauge
node_bcachefs_compression_compressed_bytes{algorithm="gzip",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_compression_compressed_bytes{algorithm="incompressible",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.187472557998e+13
node_bcachefs_compression_compressed_bytes{algorithm="lz4",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 5.2505975193e+10
node_bcachefs_compression_compressed_bytes{algorithm="lz4_old",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_compression_compressed_bytes{algorithm="zstd",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.42665652224e+11
# HELP node_bcachefs_compression_uncompressed_bytes Uncompressed size by algorithm.
# TYPE node_bcachefs_compression_uncompressed_bytes gauge
node_bcachefs_compression_uncompressed_bytes{algorithm="gzip",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_compression_uncompressed_bytes{algorithm="incompressible",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.187472557998e+13
node_bcachefs_compression_uncompressed_bytes{algorithm="lz4",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 7.6450417868e+10
node_bcachefs_compression_uncompressed_bytes{algorithm="lz4_old",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_compression_uncompressed_bytes{algorithm="zstd",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6.47466319872e+11
# HELP node_bcachefs_copygc_total Bcachefs counter copygc since filesystem creation.
# TYPE node_bcachefs_copygc_total counter
node_bcachefs_copygc_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 424790
# HELP node_bcachefs_copygc_wait_obsolete_total Bcachefs counter copygc_wait_obsolete since filesystem creation.
# TYPE node_bcachefs_copygc_wait_obsolete_total counter
node_bcachefs_copygc_wait_obsolete_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 537321
# HELP node_bcachefs_data_read_bounce_total Bcachefs counter data_read_bounce since filesystem creation.
# TYPE node_bcachefs_data_read_bounce_total counter
node_bcachefs_data_read_bounce_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.5052058e+08
# HELP node_bcachefs_data_read_fail_and_poison_total Bcachefs counter data_read_fail_and_poison since filesystem creation.
# TYPE node_bcachefs_data_read_fail_and_poison_total counter
node_bcachefs_data_read_fail_and_poison_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_data_read_hole_total Bcachefs counter data_read_hole since filesystem creation.
# TYPE node_bcachefs_data_read_hole_total counter
node_bcachefs_data_read_hole_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.858174650941e+12
# HELP node_bcachefs_data_read_inline_total Bcachefs counter data_read_inline since filesystem creation.
# TYPE node_bcachefs_data_read_inline_total counter
node_bcachefs_data_read_inline_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.5998753177e+10
# HELP node_bcachefs_data_read_narrow_crcs_fail_total Bcachefs counter data_read_narrow_crcs_fail since filesystem creation.
# TYPE node_bcachefs_data_read_narrow_crcs_fail_total counter
node_bcachefs_data_read_narrow_crcs_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1779
# HELP node_bcachefs_data_read_narrow_crcs_total Bcachefs counter data_read_narrow_crcs since filesystem creation.
# TYPE node_bcachefs_data_read_narrow_crcs_total counter
node_bcachefs_data_read_narrow_crcs_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 18529
# HELP node_bcachefs_data_read_nopromote_already_promoted_total Bcachefs counter data_read_nopromote_already_promoted since filesystem creation.
# TYPE node_bcachefs_data_read_nopromote_already_promoted_total counter
node_bcachefs_data_read_nopromote_already_promoted_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.11037452e+08
# HELP node_bcachefs_data_read_nopromote_congested_total Bcachefs counter data_read_nopromote_congested since filesystem creation.
# TYPE node_bcachefs_data_read_nopromote_congested_total counter
node_bcachefs_data_read_nopromote_congested_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.913847e+06
# HELP node_bcachefs_data_read_nopromote_may_not_total Bcachefs counter data_read_nopromote_may_not since filesystem creation.
# TYPE node_bcachefs_data_read_nopromote_may_not_total counter
node_bcachefs_data_read_nopromote_may_not_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.0206095e+07
# HELP node_bcachefs_data_read_nopromote_total Bcachefs counter data_read_nopromote since filesystem creation.
# TYPE node_bcachefs_data_read_nopromote_total counter
node_bcachefs_data_read_nopromote_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.42468868e+08
# HELP node_bcachefs_data_read_nopromote_unwritten_total Bcachefs counter data_read_nopromote_unwritten since filesystem creation.
# TYPE node_bcachefs_data_read_nopromote_unwritten_total counter
node_bcachefs_data_read_nopromote_unwritten_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_data_read_promote_total Bcachefs counter data_read_promote since filesystem creation.
# TYPE node_bcachefs_data_read_promote_total counter
node_bcachefs_data_read_promote_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.19833053184e+11
# HELP node_bcachefs_data_read_retry_total Bcachefs counter data_read_retry since filesystem creation.
# TYPE node_bcachefs_data_read_retry_total counter
node_bcachefs_data_read_retry_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.2404675e+07
# HELP node_bcachefs_data_read_reuse_race_total Bcachefs counter data_read_reuse_race since filesystem creation.
# TYPE node_bcachefs_data_read_reuse_race_total counter
node_bcachefs_data_read_reuse_race_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 201095
# HELP node_bcachefs_data_read_split_total Bcachefs counter data_read_split since filesystem creation.
# TYPE node_bcachefs_data_read_split_total counter
node_bcachefs_data_read_split_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.18590695e+08
# HELP node_bcachefs_data_read_total Bcachefs counter data_read since filesystem creation.
# TYPE node_bcachefs_data_read_total counter
node_bcachefs_data_read_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.8928267436032e+13
# HELP node_bcachefs_data_update_fail_total Bcachefs counter data_update_fail since filesystem creation.
# TYPE node_bcachefs_data_update_fail_total counter
node_bcachefs_data_update_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.138166333e+09
# HELP node_bcachefs_data_update_in_flight_total Bcachefs counter data_update_in_flight since filesystem creation.
# TYPE node_bcachefs_data_update_in_flight_total counter
node_bcachefs_data_update_in_flight_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.978784e+06
# HELP node_bcachefs_data_update_key_fail_total Bcachefs counter data_update_key_fail since filesystem creation.
# TYPE node_bcachefs_data_update_key_fail_total counter
node_bcachefs_data_update_key_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.4373939404e+10
# HELP node_bcachefs_data_update_key_total Bcachefs counter data_update_key since filesystem creation.
# TYPE node_bcachefs_data_update_key_total counter
node_bcachefs_data_update_key_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.00275460453171e+14
# HELP node_bcachefs_data_update_no_io_total Bcachefs counter data_update_no_io since filesystem creation.
# TYPE node_bcachefs_data_update_no_io_total counter
node_bcachefs_data_update_no_io_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.00824357273e+11
# HELP node_bcachefs_data_update_noop_obsolete_total Bcachefs counter data_update_noop_obsolete since filesystem creation.
# TYPE node_bcachefs_data_update_noop_obsolete_total counter
node_bcachefs_data_update_noop_obsolete_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_data_update_pred_total Bcachefs counter data_update_pred since filesystem creation.
# TYPE node_bcachefs_data_update_pred_total counter
node_bcachefs_data_update_pred_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.947802324992e+13
# HELP node_bcachefs_data_update_read_total Bcachefs counter data_update_read since filesystem creation.
# TYPE node_bcachefs_data_update_read_total counter
node_bcachefs_data_update_read_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 8.9390295338188e+13
# HELP node_bcachefs_data_update_start_fail_obsolete_total Bcachefs counter data_update_start_fail_obsolete since filesystem creation.
# TYPE node_bcachefs_data_update_start_fail_obsolete_total counter
node_bcachefs_data_update_start_fail_obsolete_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.14018822443e+11
# HELP node_bcachefs_data_update_total Bcachefs counter data_update since filesystem creation.
# TYPE node_bcachefs_data_update_total counter
node_bcachefs_data_update_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.4206847997116416e+16
# HELP node_bcachefs_data_update_useless_write_fail_total Bcachefs counter data_update_useless_write_fail since filesystem creation.
# TYPE node_bcachefs_data_update_useless_write_fail_total counter
node_bcachefs_data_update_useless_write_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 5.30428461e+09
# HELP node_bcachefs_data_update_write_total Bcachefs counter data_update_write since filesystem creation.
# TYPE node_bcachefs_data_update_write_total counter
node_bcachefs_data_update_write_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.7163493018828e+13
# HELP node_bcachefs_data_write_total Bcachefs counter data_write since filesystem creation.
# TYPE node_bcachefs_data_write_total counter
node_bcachefs_data_write_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.0780769764966e+13
# HELP node_bcachefs_device_bucket_size_bytes Bucket size in bytes.
# TYPE node_bcachefs_device_bucket_size_bytes gauge
node_bcachefs_device_bucket_size_bytes{device="10",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 524288
node_bcachefs_device_bucket_size_bytes{device="4",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.097152e+06
node_bcachefs_device_bucket_size_bytes{device="6",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.097152e+06
node_bcachefs_device_bucket_size_bytes{device="7",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.097152e+06
node_bcachefs_device_bucket_size_bytes{device="8",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.097152e+06
# HELP node_bcachefs_device_buckets Total number of buckets.
# TYPE node_bcachefs_device_buckets gauge
node_bcachefs_device_buckets{device="10",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 953880
node_bcachefs_device_buckets{device="4",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 7.629824e+06
node_bcachefs_device_buckets{device="6",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 953864
node_bcachefs_device_buckets{device="7",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.907723e+06
node_bcachefs_device_buckets{device="8",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.384637e+06
# HELP node_bcachefs_device_durability Device durability setting.
# TYPE node_bcachefs_device_durability gauge
node_bcachefs_device_durability{device="10",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
node_bcachefs_device_durability{device="4",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
node_bcachefs_device_durability{device="6",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
node_bcachefs_device_durability{device="7",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
node_bcachefs_device_durability{device="8",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
# HELP node_bcachefs_device_info Device information.
# TYPE node_bcachefs_device_info gauge
node_bcachefs_device_info{device="10",label="disk-10",state="[rw] ro evacuating spare",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
node_bcachefs_device_info{device="4",label="disk-4",state="[rw] ro evacuating spare",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
node_bcachefs_device_info{device="6",label="disk-6",state="[rw] ro evacuating spare",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
node_bcachefs_device_info{device="7",label="disk-7",state="[rw] ro evacuating spare",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
node_bcachefs_device_info{device="8",label="disk-8",state="[rw] ro evacuating spare",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
# HELP node_bcachefs_device_io_done_bytes_total IO bytes by operation type and data type.
# TYPE node_bcachefs_device_io_done_bytes_total counter
node_bcachefs_device_io_done_bytes_total{data_type="btree",device="10",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 5.24288e+06
node_bcachefs_device_io_done_bytes_total{data_type="btree",device="10",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 16384
node_bcachefs_device_io_done_bytes_total{data_type="btree",device="4",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.193358848e+09
node_bcachefs_device_io_done_bytes_total{data_type="btree",device="4",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 589824
node_bcachefs_device_io_done_bytes_total{data_type="btree",device="6",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 8.912896e+06
node_bcachefs_device_io_done_bytes_total{data_type="btree",device="6",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="btree",device="7",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.767671263232e+12
node_bcachefs_device_io_done_bytes_total{data_type="btree",device="7",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 7.82753624064e+11
node_bcachefs_device_io_done_bytes_total{data_type="btree",device="8",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="btree",device="8",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="cached",device="10",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="cached",device="10",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="cached",device="4",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="cached",device="4",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="cached",device="6",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="cached",device="6",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="cached",device="7",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="cached",device="7",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="cached",device="8",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="cached",device="8",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="journal",device="10",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="journal",device="10",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="journal",device="4",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="journal",device="4",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="journal",device="6",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="journal",device="6",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="journal",device="7",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="journal",device="7",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.432028966912e+12
node_bcachefs_device_io_done_bytes_total{data_type="journal",device="8",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="journal",device="8",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_discard",device="10",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_discard",device="10",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_discard",device="4",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_discard",device="4",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_discard",device="6",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_discard",device="6",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_discard",device="7",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_discard",device="7",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_discard",device="8",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_discard",device="8",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_gc_gens",device="10",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_gc_gens",device="10",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_gc_gens",device="4",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_gc_gens",device="4",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_gc_gens",device="6",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_gc_gens",device="6",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_gc_gens",device="7",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_gc_gens",device="7",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_gc_gens",device="8",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="need_gc_gens",device="8",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="parity",device="10",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="parity",device="10",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="parity",device="4",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="parity",device="4",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="parity",device="6",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="parity",device="6",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="parity",device="7",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="parity",device="7",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="parity",device="8",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="parity",device="8",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="sb",device="10",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 86016
node_bcachefs_device_io_done_bytes_total{data_type="sb",device="10",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 645120
node_bcachefs_device_io_done_bytes_total{data_type="sb",device="4",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 86016
node_bcachefs_device_io_done_bytes_total{data_type="sb",device="4",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 645120
node_bcachefs_device_io_done_bytes_total{data_type="sb",device="6",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 86016
node_bcachefs_device_io_done_bytes_total{data_type="sb",device="6",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 677376
node_bcachefs_device_io_done_bytes_total{data_type="sb",device="7",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 86016
node_bcachefs_device_io_done_bytes_total{data_type="sb",device="7",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 645120
node_bcachefs_device_io_done_bytes_total{data_type="sb",device="8",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 86016
node_bcachefs_device_io_done_bytes_total{data_type="sb",device="8",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 645120
node_bcachefs_device_io_done_bytes_total{data_type="stripe",device="10",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="stripe",device="10",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="stripe",device="4",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="stripe",device="4",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="stripe",device="6",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="stripe",device="6",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="stripe",device="7",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="stripe",device="7",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="stripe",device="8",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="stripe",device="8",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="unstriped",device="10",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="unstriped",device="10",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="unstriped",device="4",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="unstriped",device="4",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="unstriped",device="6",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="unstriped",device="6",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="unstriped",device="7",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="unstriped",device="7",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="unstriped",device="8",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="unstriped",device="8",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_done_bytes_total{data_type="user",device="10",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.02313054208e+11
node_bcachefs_device_io_done_bytes_total{data_type="user",device="10",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.52377698304e+11
node_bcachefs_device_io_done_bytes_total{data_type="user",device="4",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.770452246528e+12
node_bcachefs_device_io_done_bytes_total{data_type="user",device="4",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6.258285805568e+12
node_bcachefs_device_io_done_bytes_total{data_type="user",device="6",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6.10019098624e+11
node_bcachefs_device_io_done_bytes_total{data_type="user",device="6",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 5.62070339584e+11
node_bcachefs_device_io_done_bytes_total{data_type="user",device="7",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 5.53932742656e+11
node_bcachefs_device_io_done_bytes_total{data_type="user",device="7",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.8382641152e+11
node_bcachefs_device_io_done_bytes_total{data_type="user",device="8",operation="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.115020546048e+12
node_bcachefs_device_io_done_bytes_total{data_type="user",device="8",operation="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6.072510210048e+12
# HELP node_bcachefs_device_io_errors_total IO errors by error type.
# TYPE node_bcachefs_device_io_errors_total counter
node_bcachefs_device_io_errors_total{device="10",type="checksum",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_errors_total{device="10",type="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_errors_total{device="10",type="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_errors_total{device="4",type="checksum",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_errors_total{device="4",type="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 197416
node_bcachefs_device_io_errors_total{device="4",type="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 205
node_bcachefs_device_io_errors_total{device="6",type="checksum",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 5
node_bcachefs_device_io_errors_total{device="6",type="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 18828
node_bcachefs_device_io_errors_total{device="6",type="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
node_bcachefs_device_io_errors_total{device="7",type="checksum",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 18
node_bcachefs_device_io_errors_total{device="7",type="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_errors_total{device="7",type="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_errors_total{device="8",type="checksum",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_errors_total{device="8",type="read",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
node_bcachefs_device_io_errors_total{device="8",type="write",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_error_throw_total Bcachefs counter error_throw since filesystem creation.
# TYPE node_bcachefs_error_throw_total counter
node_bcachefs_error_throw_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.719910958e+09
# HELP node_bcachefs_errors_total Error count by error type.
# TYPE node_bcachefs_errors_total counter
node_bcachefs_errors_total{error_type="accounting_mismatch",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6
node_bcachefs_errors_total{error_type="alloc_key_cached_sectors_wrong",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4537
node_bcachefs_errors_total{error_type="alloc_key_data_type_wrong",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4415
node_bcachefs_errors_total{error_type="alloc_key_dirty_sectors_wrong",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4538
node_bcachefs_errors_total{error_type="alloc_key_to_missing_lru_entry",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4517
node_bcachefs_errors_total{error_type="backpointer_to_missing_ptr",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 45480
node_bcachefs_errors_total{error_type="bset_bad_csum",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2
node_bcachefs_errors_total{error_type="btree_node_data_missing",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2
node_bcachefs_errors_total{error_type="btree_node_topology_bad_max_key",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2
node_bcachefs_errors_total{error_type="extent_io_opts_not_set",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.1299659571772285e+19
node_bcachefs_errors_total{error_type="extent_ptrs_all_invalid",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2
node_bcachefs_errors_total{error_type="extent_ptrs_all_invalid_but_cached",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 44612
node_bcachefs_errors_total{error_type="lru_entry_bad",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4537
node_bcachefs_errors_total{error_type="ptr_to_missing_backpointer",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 44112
node_bcachefs_errors_total{error_type="reconcile_work_incorrectly_set",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 113913
node_bcachefs_errors_total{error_type="subvol_missing",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 194
node_bcachefs_errors_total{error_type="validate_error_in_commit",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2
node_bcachefs_errors_total{error_type="vfs_bad_inode_rm",uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 121
# HELP node_bcachefs_evacuate_bucket_total Bcachefs counter evacuate_bucket since filesystem creation.
# TYPE node_bcachefs_evacuate_bucket_total counter
node_bcachefs_evacuate_bucket_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6.735247e+06
# HELP node_bcachefs_fsync_total Bcachefs counter fsync since filesystem creation.
# TYPE node_bcachefs_fsync_total counter
node_bcachefs_fsync_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.515147e+06
# HELP node_bcachefs_gc_gens_end_total Bcachefs counter gc_gens_end since filesystem creation.
# TYPE node_bcachefs_gc_gens_end_total counter
node_bcachefs_gc_gens_end_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3
# HELP node_bcachefs_gc_gens_start_total Bcachefs counter gc_gens_start since filesystem creation.
# TYPE node_bcachefs_gc_gens_start_total counter
node_bcachefs_gc_gens_start_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3
# HELP node_bcachefs_info Filesystem information.
# TYPE node_bcachefs_info gauge
node_bcachefs_info{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1
# HELP node_bcachefs_journal_full_total Bcachefs counter journal_full since filesystem creation.
# TYPE node_bcachefs_journal_full_total counter
node_bcachefs_journal_full_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 94587
# HELP node_bcachefs_journal_reclaim_finish_total Bcachefs counter journal_reclaim_finish since filesystem creation.
# TYPE node_bcachefs_journal_reclaim_finish_total counter
node_bcachefs_journal_reclaim_finish_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.06994135e+08
# HELP node_bcachefs_journal_reclaim_start_total Bcachefs counter journal_reclaim_start since filesystem creation.
# TYPE node_bcachefs_journal_reclaim_start_total counter
node_bcachefs_journal_reclaim_start_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.06994135e+08
# HELP node_bcachefs_journal_res_get_blocked_total Bcachefs counter journal_res_get_blocked since filesystem creation.
# TYPE node_bcachefs_journal_res_get_blocked_total counter
node_bcachefs_journal_res_get_blocked_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 74696
# HELP node_bcachefs_journal_write_total Bcachefs counter journal_write since filesystem creation.
# TYPE node_bcachefs_journal_write_total counter
node_bcachefs_journal_write_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.5458801e+07
# HELP node_bcachefs_open_bucket_alloc_fail_total Bcachefs counter open_bucket_alloc_fail since filesystem creation.
# TYPE node_bcachefs_open_bucket_alloc_fail_total counter
node_bcachefs_open_bucket_alloc_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_reconcile_btree_total Bcachefs counter reconcile_btree since filesystem creation.
# TYPE node_bcachefs_reconcile_btree_total counter
node_bcachefs_reconcile_btree_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.158221066e+09
# HELP node_bcachefs_reconcile_clear_scan_total Bcachefs counter reconcile_clear_scan since filesystem creation.
# TYPE node_bcachefs_reconcile_clear_scan_total counter
node_bcachefs_reconcile_clear_scan_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 11
# HELP node_bcachefs_reconcile_data_total Bcachefs counter reconcile_data since filesystem creation.
# TYPE node_bcachefs_reconcile_data_total counter
node_bcachefs_reconcile_data_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_reconcile_phys_total Bcachefs counter reconcile_phys since filesystem creation.
# TYPE node_bcachefs_reconcile_phys_total counter
node_bcachefs_reconcile_phys_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6.9928939526553e+13
# HELP node_bcachefs_reconcile_scan_device_total Bcachefs counter reconcile_scan_device since filesystem creation.
# TYPE node_bcachefs_reconcile_scan_device_total counter
node_bcachefs_reconcile_scan_device_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 8.3562883710976e+13
# HELP node_bcachefs_reconcile_scan_fs_total Bcachefs counter reconcile_scan_fs since filesystem creation.
# TYPE node_bcachefs_reconcile_scan_fs_total counter
node_bcachefs_reconcile_scan_fs_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_reconcile_scan_inum_total Bcachefs counter reconcile_scan_inum since filesystem creation.
# TYPE node_bcachefs_reconcile_scan_inum_total counter
node_bcachefs_reconcile_scan_inum_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_reconcile_scan_metadata_total Bcachefs counter reconcile_scan_metadata since filesystem creation.
# TYPE node_bcachefs_reconcile_scan_metadata_total counter
node_bcachefs_reconcile_scan_metadata_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_reconcile_scan_pending_total Bcachefs counter reconcile_scan_pending since filesystem creation.
# TYPE node_bcachefs_reconcile_scan_pending_total counter
node_bcachefs_reconcile_scan_pending_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_reconcile_set_pending_total Bcachefs counter reconcile_set_pending since filesystem creation.
# TYPE node_bcachefs_reconcile_set_pending_total counter
node_bcachefs_reconcile_set_pending_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 3.1138512896e+10
# HELP node_bcachefs_sectors_alloc_total Bcachefs counter sectors_alloc since filesystem creation.
# TYPE node_bcachefs_sectors_alloc_total counter
node_bcachefs_sectors_alloc_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.2534432556646e+13
# HELP node_bcachefs_stripe_alloc_total Bcachefs counter stripe_alloc since filesystem creation.
# TYPE node_bcachefs_stripe_alloc_total counter
node_bcachefs_stripe_alloc_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_stripe_create_fail_total Bcachefs counter stripe_create_fail since filesystem creation.
# TYPE node_bcachefs_stripe_create_fail_total counter
node_bcachefs_stripe_create_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_stripe_create_total Bcachefs counter stripe_create since filesystem creation.
# TYPE node_bcachefs_stripe_create_total counter
node_bcachefs_stripe_create_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_stripe_delete_total Bcachefs counter stripe_delete since filesystem creation.
# TYPE node_bcachefs_stripe_delete_total counter
node_bcachefs_stripe_delete_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_stripe_reuse_total Bcachefs counter stripe_reuse since filesystem creation.
# TYPE node_bcachefs_stripe_reuse_total counter
node_bcachefs_stripe_reuse_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_stripe_update_bucket_total Bcachefs counter stripe_update_bucket since filesystem creation.
# TYPE node_bcachefs_stripe_update_bucket_total counter
node_bcachefs_stripe_update_bucket_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_stripe_update_extent_fail_total Bcachefs counter stripe_update_extent_fail since filesystem creation.
# TYPE node_bcachefs_stripe_update_extent_fail_total counter
node_bcachefs_stripe_update_extent_fail_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_stripe_update_extent_total Bcachefs counter stripe_update_extent since filesystem creation.
# TYPE node_bcachefs_stripe_update_extent_total counter
node_bcachefs_stripe_update_extent_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_sync_fs_total Bcachefs counter sync_fs since filesystem creation.
# TYPE node_bcachefs_sync_fs_total counter
node_bcachefs_sync_fs_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 42023
# HELP node_bcachefs_trans_blocked_journal_reclaim_total Bcachefs counter trans_blocked_journal_reclaim since filesystem creation.
# TYPE node_bcachefs_trans_blocked_journal_reclaim_total counter
node_bcachefs_trans_blocked_journal_reclaim_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 78
# HELP node_bcachefs_trans_restart_btree_node_reused_total Bcachefs counter trans_restart_btree_node_reused since filesystem creation.
# TYPE node_bcachefs_trans_restart_btree_node_reused_total counter
node_bcachefs_trans_restart_btree_node_reused_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 53354
# HELP node_bcachefs_trans_restart_btree_node_split_total Bcachefs counter trans_restart_btree_node_split since filesystem creation.
# TYPE node_bcachefs_trans_restart_btree_node_split_total counter
node_bcachefs_trans_restart_btree_node_split_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 100190
# HELP node_bcachefs_trans_restart_fault_inject_total Bcachefs counter trans_restart_fault_inject since filesystem creation.
# TYPE node_bcachefs_trans_restart_fault_inject_total counter
node_bcachefs_trans_restart_fault_inject_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_injected_total Bcachefs counter trans_restart_injected since filesystem creation.
# TYPE node_bcachefs_trans_restart_injected_total counter
node_bcachefs_trans_restart_injected_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_iter_upgrade_total Bcachefs counter trans_restart_iter_upgrade since filesystem creation.
# TYPE node_bcachefs_trans_restart_iter_upgrade_total counter
node_bcachefs_trans_restart_iter_upgrade_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_journal_preres_get_total Bcachefs counter trans_restart_journal_preres_get since filesystem creation.
# TYPE node_bcachefs_trans_restart_journal_preres_get_total counter
node_bcachefs_trans_restart_journal_preres_get_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_journal_reclaim_total Bcachefs counter trans_restart_journal_reclaim since filesystem creation.
# TYPE node_bcachefs_trans_restart_journal_reclaim_total counter
node_bcachefs_trans_restart_journal_reclaim_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_journal_res_get_total Bcachefs counter trans_restart_journal_res_get since filesystem creation.
# TYPE node_bcachefs_trans_restart_journal_res_get_total counter
node_bcachefs_trans_restart_journal_res_get_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_key_cache_key_realloced_total Bcachefs counter trans_restart_key_cache_key_realloced since filesystem creation.
# TYPE node_bcachefs_trans_restart_key_cache_key_realloced_total counter
node_bcachefs_trans_restart_key_cache_key_realloced_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_key_cache_raced_total Bcachefs counter trans_restart_key_cache_raced since filesystem creation.
# TYPE node_bcachefs_trans_restart_key_cache_raced_total counter
node_bcachefs_trans_restart_key_cache_raced_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_key_cache_upgrade_total Bcachefs counter trans_restart_key_cache_upgrade since filesystem creation.
# TYPE node_bcachefs_trans_restart_key_cache_upgrade_total counter
node_bcachefs_trans_restart_key_cache_upgrade_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_mark_replicas_total Bcachefs counter trans_restart_mark_replicas since filesystem creation.
# TYPE node_bcachefs_trans_restart_mark_replicas_total counter
node_bcachefs_trans_restart_mark_replicas_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_mem_realloced_total Bcachefs counter trans_restart_mem_realloced since filesystem creation.
# TYPE node_bcachefs_trans_restart_mem_realloced_total counter
node_bcachefs_trans_restart_mem_realloced_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6111
# HELP node_bcachefs_trans_restart_memory_allocation_failure_total Bcachefs counter trans_restart_memory_allocation_failure since filesystem creation.
# TYPE node_bcachefs_trans_restart_memory_allocation_failure_total counter
node_bcachefs_trans_restart_memory_allocation_failure_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.7513334e+07
# HELP node_bcachefs_trans_restart_relock_after_fill_total Bcachefs counter trans_restart_relock_after_fill since filesystem creation.
# TYPE node_bcachefs_trans_restart_relock_after_fill_total counter
node_bcachefs_trans_restart_relock_after_fill_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_relock_key_cache_fill_obsolete_total Bcachefs counter trans_restart_relock_key_cache_fill_obsolete since filesystem creation.
# TYPE node_bcachefs_trans_restart_relock_key_cache_fill_obsolete_total counter
node_bcachefs_trans_restart_relock_key_cache_fill_obsolete_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_relock_next_node_total Bcachefs counter trans_restart_relock_next_node since filesystem creation.
# TYPE node_bcachefs_trans_restart_relock_next_node_total counter
node_bcachefs_trans_restart_relock_next_node_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 22087
# HELP node_bcachefs_trans_restart_relock_parent_for_fill_obsolete_total Bcachefs counter trans_restart_relock_parent_for_fill_obsolete since filesystem creation.
# TYPE node_bcachefs_trans_restart_relock_parent_for_fill_obsolete_total counter
node_bcachefs_trans_restart_relock_parent_for_fill_obsolete_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2581
# HELP node_bcachefs_trans_restart_relock_path_intent_total Bcachefs counter trans_restart_relock_path_intent since filesystem creation.
# TYPE node_bcachefs_trans_restart_relock_path_intent_total counter
node_bcachefs_trans_restart_relock_path_intent_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 298090
# HELP node_bcachefs_trans_restart_relock_path_total Bcachefs counter trans_restart_relock_path since filesystem creation.
# TYPE node_bcachefs_trans_restart_relock_path_total counter
node_bcachefs_trans_restart_relock_path_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.752728e+07
# HELP node_bcachefs_trans_restart_relock_total Bcachefs counter trans_restart_relock since filesystem creation.
# TYPE node_bcachefs_trans_restart_relock_total counter
node_bcachefs_trans_restart_relock_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2.806875e+06
# HELP node_bcachefs_trans_restart_split_race_total Bcachefs counter trans_restart_split_race since filesystem creation.
# TYPE node_bcachefs_trans_restart_split_race_total counter
node_bcachefs_trans_restart_split_race_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_too_many_iters_total Bcachefs counter trans_restart_too_many_iters since filesystem creation.
# TYPE node_bcachefs_trans_restart_too_many_iters_total counter
node_bcachefs_trans_restart_too_many_iters_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_traverse_total Bcachefs counter trans_restart_traverse since filesystem creation.
# TYPE node_bcachefs_trans_restart_traverse_total counter
node_bcachefs_trans_restart_traverse_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_upgrade_total Bcachefs counter trans_restart_upgrade since filesystem creation.
# TYPE node_bcachefs_trans_restart_upgrade_total counter
node_bcachefs_trans_restart_upgrade_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.055154e+06
# HELP node_bcachefs_trans_restart_would_deadlock_recursion_limit_total Bcachefs counter trans_restart_would_deadlock_recursion_limit since filesystem creation.
# TYPE node_bcachefs_trans_restart_would_deadlock_recursion_limit_total counter
node_bcachefs_trans_restart_would_deadlock_recursion_limit_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 0
# HELP node_bcachefs_trans_restart_would_deadlock_total Bcachefs counter trans_restart_would_deadlock since filesystem creation.
# TYPE node_bcachefs_trans_restart_would_deadlock_total counter
node_bcachefs_trans_restart_would_deadlock_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 1.025983e+06
# HELP node_bcachefs_trans_restart_would_deadlock_write_total Bcachefs counter trans_restart_would_deadlock_write since filesystem creation.
# TYPE node_bcachefs_trans_restart_would_deadlock_write_total counter
node_bcachefs_trans_restart_would_deadlock_write_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 2
# HELP node_bcachefs_trans_restart_write_buffer_flush_total Bcachefs counter trans_restart_write_buffer_flush since filesystem creation.
# TYPE node_bcachefs_trans_restart_write_buffer_flush_total counter
node_bcachefs_trans_restart_write_buffer_flush_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 5.1706894e+07
# HELP node_bcachefs_trans_traverse_all_total Bcachefs counter trans_traverse_all since filesystem creation.
# TYPE node_bcachefs_trans_traverse_all_total counter
node_bcachefs_trans_traverse_all_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 7.8477746e+07
# HELP node_bcachefs_transaction_commit_total Bcachefs counter transaction_commit since filesystem creation.
# TYPE node_bcachefs_transaction_commit_total counter
node_bcachefs_transaction_commit_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.338059022e+09
# HELP node_bcachefs_write_buffer_flush_slowpath_total Bcachefs counter write_buffer_flush_slowpath since filesystem creation.
# TYPE node_bcachefs_write_buffer_flush_slowpath_total counter
node_bcachefs_write_buffer_flush_slowpath_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 21031
# HELP node_bcachefs_write_buffer_flush_sync_total Bcachefs counter write_buffer_flush_sync since filesystem creation.
# TYPE node_bcachefs_write_buffer_flush_sync_total counter
node_bcachefs_write_buffer_flush_sync_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 6.024402e+06
# HELP node_bcachefs_write_buffer_flush_total Bcachefs counter write_buffer_flush since filesystem creation.
# TYPE node_bcachefs_write_buffer_flush_total counter
node_bcachefs_write_buffer_flush_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.8370568e+07
# HELP node_bcachefs_write_buffer_maybe_flush_total Bcachefs counter write_buffer_maybe_flush since filesystem creation.
# TYPE node_bcachefs_write_buffer_maybe_flush_total counter
node_bcachefs_write_buffer_maybe_flush_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 4.7412849e+07
# HELP node_bcachefs_write_super_total Bcachefs counter write_super since filesystem creation.
# TYPE node_bcachefs_write_super_total counter
node_bcachefs_write_super_total{uuid="deadbeef-1234-5678-9012-abcdefabcdef"} 30277
# HELP node_bonding_active Number of active slaves per bonding interface.
# TYPE node_bonding_active gauge
node_bonding_active{master="bond0"} 0
@ -311,6 +902,16 @@ node_cpu_flag_info{flag="aes"} 1
node_cpu_flag_info{flag="avx"} 1
node_cpu_flag_info{flag="avx2"} 1
node_cpu_flag_info{flag="constant_tsc"} 1
# HELP node_cpu_frequency_hertz CPU frequency in hertz from /proc/cpuinfo.
# TYPE node_cpu_frequency_hertz gauge
node_cpu_frequency_hertz{core="0",cpu="0",package="0"} 7.99998e+08
node_cpu_frequency_hertz{core="0",cpu="4",package="0"} 7.99989e+08
node_cpu_frequency_hertz{core="1",cpu="1",package="0"} 8.00037e+08
node_cpu_frequency_hertz{core="1",cpu="5",package="0"} 8.00083e+08
node_cpu_frequency_hertz{core="2",cpu="2",package="0"} 8.0001e+08
node_cpu_frequency_hertz{core="2",cpu="6",package="0"} 8.00017e+08
node_cpu_frequency_hertz{core="3",cpu="3",package="0"} 8.00028e+08
node_cpu_frequency_hertz{core="3",cpu="7",package="0"} 8.0003e+08
# HELP node_cpu_guest_seconds_total Seconds the CPUs spent in guests (VMs) for each mode.
# TYPE node_cpu_guest_seconds_total counter
node_cpu_guest_seconds_total{cpu="0",mode="nice"} 0.01
@ -516,9 +1117,9 @@ node_disk_info{device="dm-2",major="252",minor="2",model="",path="",revision="",
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="mmcblk0",major="179",minor="0",model="",path="platform-df2969f3.mmc",revision="",rotational="0",serial="0x83e36d93",wwn=""} 1
node_disk_info{device="mmcblk0p1",major="179",minor="1",model="",path="platform-df2969f3.mmc",revision="",rotational="0",serial="0x83e36d93",wwn=""} 1
node_disk_info{device="mmcblk0p2",major="179",minor="2",model="",path="platform-df2969f3.mmc",revision="",rotational="0",serial="0x83e36d93",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
@ -2289,44 +2890,44 @@ node_mountstats_nfs_total_write_bytes_total{export="192.168.1.1:/srv/test",mount
node_mountstats_nfs_total_write_bytes_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 0
# HELP node_mountstats_nfs_transport_backlog_queue_total Total number of items added to the RPC backlog queue.
# TYPE node_mountstats_nfs_transport_backlog_queue_total counter
node_mountstats_nfs_transport_backlog_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 0
node_mountstats_nfs_transport_backlog_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 0
node_mountstats_nfs_transport_backlog_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp",transport="0"} 0
node_mountstats_nfs_transport_backlog_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp",transport="0"} 0
# HELP node_mountstats_nfs_transport_bad_transaction_ids_total Number of times the NFS server sent a response with a transaction ID unknown to this client.
# TYPE node_mountstats_nfs_transport_bad_transaction_ids_total counter
node_mountstats_nfs_transport_bad_transaction_ids_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 0
node_mountstats_nfs_transport_bad_transaction_ids_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 0
node_mountstats_nfs_transport_bad_transaction_ids_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp",transport="0"} 0
node_mountstats_nfs_transport_bad_transaction_ids_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp",transport="0"} 0
# HELP node_mountstats_nfs_transport_bind_total Number of times the client has had to establish a connection from scratch to the NFS server.
# TYPE node_mountstats_nfs_transport_bind_total counter
node_mountstats_nfs_transport_bind_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 0
node_mountstats_nfs_transport_bind_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 0
node_mountstats_nfs_transport_bind_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp",transport="0"} 0
node_mountstats_nfs_transport_bind_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp",transport="0"} 0
# HELP node_mountstats_nfs_transport_connect_total Number of times the client has made a TCP connection to the NFS server.
# TYPE node_mountstats_nfs_transport_connect_total counter
node_mountstats_nfs_transport_connect_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 1
node_mountstats_nfs_transport_connect_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 0
node_mountstats_nfs_transport_connect_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp",transport="0"} 1
node_mountstats_nfs_transport_connect_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp",transport="0"} 0
# HELP node_mountstats_nfs_transport_idle_time_seconds Duration since the NFS mount last saw any RPC traffic, in seconds.
# TYPE node_mountstats_nfs_transport_idle_time_seconds gauge
node_mountstats_nfs_transport_idle_time_seconds{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 11
node_mountstats_nfs_transport_idle_time_seconds{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 0
node_mountstats_nfs_transport_idle_time_seconds{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp",transport="0"} 11
node_mountstats_nfs_transport_idle_time_seconds{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp",transport="0"} 0
# HELP node_mountstats_nfs_transport_maximum_rpc_slots Maximum number of simultaneously active RPC requests ever used.
# TYPE node_mountstats_nfs_transport_maximum_rpc_slots gauge
node_mountstats_nfs_transport_maximum_rpc_slots{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 24
node_mountstats_nfs_transport_maximum_rpc_slots{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 24
node_mountstats_nfs_transport_maximum_rpc_slots{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp",transport="0"} 24
node_mountstats_nfs_transport_maximum_rpc_slots{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp",transport="0"} 24
# HELP node_mountstats_nfs_transport_pending_queue_total Total number of items added to the RPC transmission pending queue.
# TYPE node_mountstats_nfs_transport_pending_queue_total counter
node_mountstats_nfs_transport_pending_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 5726
node_mountstats_nfs_transport_pending_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 5726
node_mountstats_nfs_transport_pending_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp",transport="0"} 5726
node_mountstats_nfs_transport_pending_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp",transport="0"} 5726
# HELP node_mountstats_nfs_transport_receives_total Number of RPC responses for this mount received from the NFS server.
# TYPE node_mountstats_nfs_transport_receives_total counter
node_mountstats_nfs_transport_receives_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 6428
node_mountstats_nfs_transport_receives_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 6428
node_mountstats_nfs_transport_receives_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp",transport="0"} 6428
node_mountstats_nfs_transport_receives_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp",transport="0"} 6428
# HELP node_mountstats_nfs_transport_sending_queue_total Total number of items added to the RPC transmission sending queue.
# TYPE node_mountstats_nfs_transport_sending_queue_total counter
node_mountstats_nfs_transport_sending_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 26
node_mountstats_nfs_transport_sending_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 26
node_mountstats_nfs_transport_sending_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp",transport="0"} 26
node_mountstats_nfs_transport_sending_queue_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp",transport="0"} 26
# HELP node_mountstats_nfs_transport_sends_total Number of RPC requests for this mount sent to the NFS server.
# TYPE node_mountstats_nfs_transport_sends_total counter
node_mountstats_nfs_transport_sends_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 6428
node_mountstats_nfs_transport_sends_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp"} 6428
node_mountstats_nfs_transport_sends_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp",transport="0"} 6428
node_mountstats_nfs_transport_sends_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="udp",transport="0"} 6428
# HELP node_mountstats_nfs_write_bytes_total Number of bytes written using the write() syscall.
# TYPE node_mountstats_nfs_write_bytes_total counter
node_mountstats_nfs_write_bytes_total{export="192.168.1.1:/srv/test",mountaddr="192.168.1.1",protocol="tcp"} 0
@ -2847,7 +3448,22 @@ node_nfsd_server_rpcs_total 18628
node_nfsd_server_threads 8
# HELP node_nvme_info Non-numeric data from /sys/class/nvme/<device>, value is always 1.
# TYPE node_nvme_info gauge
node_nvme_info{device="nvme0",firmware_revision="1B2QEXP7",model="Samsung SSD 970 PRO 512GB",serial="S680HF8N190894I",state="live"} 1
node_nvme_info{cntlid="1997",device="nvme0",firmware_revision="1B2QEXP7",model="Samsung SSD 970 PRO 512GB",serial="S680HF8N190894I",state="live"} 1
# HELP node_nvme_namespace_capacity_bytes Capacity of the NVMe namespace in bytes. Computed as namespace_size * namespace_logical_block_size
# TYPE node_nvme_namespace_capacity_bytes gauge
node_nvme_namespace_capacity_bytes{device="nvme0",nsid="0"} 1.6e+13
# HELP node_nvme_namespace_info Information about NVMe namespaces. Value is always 1
# TYPE node_nvme_namespace_info gauge
node_nvme_namespace_info{ana_state="optimized",device="nvme0",nsid="0"} 1
# HELP node_nvme_namespace_logical_block_size_bytes Logical block size of the NVMe namespace in bytes. Usually 4Kb. Available in /sys/class/nvme/<device>/<namespace>/queue/logical_block_size
# TYPE node_nvme_namespace_logical_block_size_bytes gauge
node_nvme_namespace_logical_block_size_bytes{device="nvme0",nsid="0"} 4096
# HELP node_nvme_namespace_size_bytes Size of the NVMe namespace in bytes. Available in /sys/class/nvme/<device>/<namespace>/size
# TYPE node_nvme_namespace_size_bytes gauge
node_nvme_namespace_size_bytes{device="nvme0",nsid="0"} 1.6e+13
# HELP node_nvme_namespace_used_bytes Used space of the NVMe namespace in bytes. Available in /sys/class/nvme/<device>/<namespace>/nuse
# TYPE node_nvme_namespace_used_bytes gauge
node_nvme_namespace_used_bytes{device="nvme0",nsid="0"} 2e+12
# HELP node_os_info A metric with a constant '1' value labeled by build_id, id, id_like, image_id, image_version, name, pretty_name, variant, variant_id, version, version_codename, version_id.
# TYPE node_os_info gauge
node_os_info{build_id="",id="ubuntu",id_like="debian",image_id="",image_version="",name="Ubuntu",pretty_name="Ubuntu 20.04.2 LTS",variant="",variant_id="",version="20.04.2 LTS (Focal Fossa)",version_codename="focal",version_id="20.04"} 1
@ -2858,22 +3474,78 @@ node_os_version{id="ubuntu",id_like="debian",name="Ubuntu"} 20.04
# TYPE node_pcidevice_current_link_transfers_per_second gauge
node_pcidevice_current_link_transfers_per_second{bus="00",device="02",function="1",segment="0000"} 8e+09
node_pcidevice_current_link_transfers_per_second{bus="01",device="00",function="0",segment="0000"} 8e+09
node_pcidevice_current_link_transfers_per_second{bus="45",device="00",function="0",segment="0000"} 5e+09
# HELP node_pcidevice_current_link_width Value of current link's width (number of lanes)
# TYPE node_pcidevice_current_link_width gauge
node_pcidevice_current_link_width{bus="00",device="02",function="1",segment="0000"} 4
node_pcidevice_current_link_width{bus="01",device="00",function="0",segment="0000"} 4
node_pcidevice_current_link_width{bus="45",device="00",function="0",segment="0000"} 4
# HELP node_pcidevice_d3cold_allowed Whether the PCIe device supports D3cold power state (0/1).
# TYPE node_pcidevice_d3cold_allowed gauge
node_pcidevice_d3cold_allowed{bus="00",device="02",function="1",segment="0000"} 1
node_pcidevice_d3cold_allowed{bus="01",device="00",function="0",segment="0000"} 1
node_pcidevice_d3cold_allowed{bus="45",device="00",function="0",segment="0000"} 1
# HELP node_pcidevice_info Non-numeric data from /sys/bus/pci/devices/<location>, value is always 1.
# TYPE node_pcidevice_info gauge
node_pcidevice_info{bus="00",class_id="0x060400",device="02",function="1",parent_bus="*",parent_device="*",parent_function="*",parent_segment="*",revision="0x00",segment="0000",subsystem_device_id="0x5095",subsystem_vendor_id="0x17aa",vendor_id="0x1634"} 1
node_pcidevice_info{bus="01",class_id="0x010802",device="00",function="0",parent_bus="00",parent_device="02",parent_function="1",parent_segment="0000",revision="0x01",segment="0000",subsystem_device_id="0x5021",subsystem_vendor_id="0xc0a9",vendor_id="0x540a"} 1
node_pcidevice_info{bus="00",class_id="0x060400",device="02",device_id="0x1634",function="1",parent_bus="*",parent_device="*",parent_function="*",parent_segment="*",revision="0x00",segment="0000",subsystem_device_id="0x5095",subsystem_vendor_id="0x17aa",vendor_id="0x1022"} 1
node_pcidevice_info{bus="01",class_id="0x010802",device="00",device_id="0x540a",function="0",parent_bus="00",parent_device="02",parent_function="1",parent_segment="0000",revision="0x01",segment="0000",subsystem_device_id="0x5021",subsystem_vendor_id="0xc0a9",vendor_id="0xc0a9"} 1
node_pcidevice_info{bus="45",class_id="0x020000",device="00",device_id="0x1521",function="0",parent_bus="40",parent_device="01",parent_function="3",parent_segment="0000",revision="0x01",segment="0000",subsystem_device_id="0x00a3",subsystem_vendor_id="0x8086",vendor_id="0x8086"} 1
# HELP node_pcidevice_max_link_transfers_per_second Value of maximum link's transfers per second (T/s)
# TYPE node_pcidevice_max_link_transfers_per_second gauge
node_pcidevice_max_link_transfers_per_second{bus="00",device="02",function="1",segment="0000"} 8e+09
node_pcidevice_max_link_transfers_per_second{bus="01",device="00",function="0",segment="0000"} 1.6e+10
node_pcidevice_max_link_transfers_per_second{bus="45",device="00",function="0",segment="0000"} 5e+09
# HELP node_pcidevice_max_link_width Value of maximum link's width (number of lanes)
# TYPE node_pcidevice_max_link_width gauge
node_pcidevice_max_link_width{bus="00",device="02",function="1",segment="0000"} 8
node_pcidevice_max_link_width{bus="01",device="00",function="0",segment="0000"} 4
node_pcidevice_max_link_width{bus="45",device="00",function="0",segment="0000"} 4
# HELP node_pcidevice_numa_node NUMA node number for the PCI device. -1 indicates unknown or not available.
# TYPE node_pcidevice_numa_node gauge
node_pcidevice_numa_node{bus="45",device="00",function="0",segment="0000"} 0
# HELP node_pcidevice_power_state PCIe device power state, one of: D0, D1, D2, D3hot, D3cold, unknown or error.
# TYPE node_pcidevice_power_state gauge
node_pcidevice_power_state{bus="00",device="02",function="1",segment="0000",state="D0"} 1
node_pcidevice_power_state{bus="00",device="02",function="1",segment="0000",state="D1"} 0
node_pcidevice_power_state{bus="00",device="02",function="1",segment="0000",state="D2"} 0
node_pcidevice_power_state{bus="00",device="02",function="1",segment="0000",state="D3cold"} 0
node_pcidevice_power_state{bus="00",device="02",function="1",segment="0000",state="D3hot"} 0
node_pcidevice_power_state{bus="00",device="02",function="1",segment="0000",state="error"} 0
node_pcidevice_power_state{bus="00",device="02",function="1",segment="0000",state="unknown"} 0
node_pcidevice_power_state{bus="01",device="00",function="0",segment="0000",state="D0"} 1
node_pcidevice_power_state{bus="01",device="00",function="0",segment="0000",state="D1"} 0
node_pcidevice_power_state{bus="01",device="00",function="0",segment="0000",state="D2"} 0
node_pcidevice_power_state{bus="01",device="00",function="0",segment="0000",state="D3cold"} 0
node_pcidevice_power_state{bus="01",device="00",function="0",segment="0000",state="D3hot"} 0
node_pcidevice_power_state{bus="01",device="00",function="0",segment="0000",state="error"} 0
node_pcidevice_power_state{bus="01",device="00",function="0",segment="0000",state="unknown"} 0
node_pcidevice_power_state{bus="45",device="00",function="0",segment="0000",state="D0"} 1
node_pcidevice_power_state{bus="45",device="00",function="0",segment="0000",state="D1"} 0
node_pcidevice_power_state{bus="45",device="00",function="0",segment="0000",state="D2"} 0
node_pcidevice_power_state{bus="45",device="00",function="0",segment="0000",state="D3cold"} 0
node_pcidevice_power_state{bus="45",device="00",function="0",segment="0000",state="D3hot"} 0
node_pcidevice_power_state{bus="45",device="00",function="0",segment="0000",state="error"} 0
node_pcidevice_power_state{bus="45",device="00",function="0",segment="0000",state="unknown"} 0
# HELP node_pcidevice_sriov_drivers_autoprobe Whether SR-IOV drivers autoprobe is enabled for the device (0/1).
# TYPE node_pcidevice_sriov_drivers_autoprobe gauge
node_pcidevice_sriov_drivers_autoprobe{bus="00",device="02",function="1",segment="0000"} 0
node_pcidevice_sriov_drivers_autoprobe{bus="01",device="00",function="0",segment="0000"} 1
node_pcidevice_sriov_drivers_autoprobe{bus="45",device="00",function="0",segment="0000"} 1
# HELP node_pcidevice_sriov_numvfs Number of Virtual Functions (VFs) currently enabled for SR-IOV.
# TYPE node_pcidevice_sriov_numvfs gauge
node_pcidevice_sriov_numvfs{bus="00",device="02",function="1",segment="0000"} 0
node_pcidevice_sriov_numvfs{bus="01",device="00",function="0",segment="0000"} 4
node_pcidevice_sriov_numvfs{bus="45",device="00",function="0",segment="0000"} 0
# HELP node_pcidevice_sriov_totalvfs Total number of Virtual Functions (VFs) supported by the device.
# TYPE node_pcidevice_sriov_totalvfs gauge
node_pcidevice_sriov_totalvfs{bus="00",device="02",function="1",segment="0000"} 0
node_pcidevice_sriov_totalvfs{bus="01",device="00",function="0",segment="0000"} 8
node_pcidevice_sriov_totalvfs{bus="45",device="00",function="0",segment="0000"} 7
# HELP node_pcidevice_sriov_vf_total_msix Total number of MSI-X vectors for Virtual Functions.
# TYPE node_pcidevice_sriov_vf_total_msix gauge
node_pcidevice_sriov_vf_total_msix{bus="00",device="02",function="1",segment="0000"} 0
node_pcidevice_sriov_vf_total_msix{bus="01",device="00",function="0",segment="0000"} 16
node_pcidevice_sriov_vf_total_msix{bus="45",device="00",function="0",segment="0000"} 0
# HELP node_power_supply_capacity capacity value of /sys/class/power_supply/<power_supply>.
# TYPE node_power_supply_capacity gauge
node_power_supply_capacity{power_supply="BAT0"} 81
@ -3000,6 +3672,7 @@ node_schedstat_waiting_seconds_total{cpu="1"} 364107.263788241
# TYPE node_scrape_collector_success gauge
node_scrape_collector_success{collector="arp"} 1
node_scrape_collector_success{collector="bcache"} 1
node_scrape_collector_success{collector="bcachefs"} 1
node_scrape_collector_success{collector="bonding"} 1
node_scrape_collector_success{collector="btrfs"} 1
node_scrape_collector_success{collector="buddyinfo"} 1
@ -3378,6 +4051,10 @@ node_wifi_station_receive_bits_per_second{device="wlan0",mac_address="aa:bb:cc:d
# TYPE node_wifi_station_receive_bytes_total counter
node_wifi_station_receive_bytes_total{device="wlan0",mac_address="01:02:03:04:05:06"} 0
node_wifi_station_receive_bytes_total{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 0
# HELP node_wifi_station_received_packets_total The total number of packets received by a station.
# TYPE node_wifi_station_received_packets_total counter
node_wifi_station_received_packets_total{device="wlan0",mac_address="01:02:03:04:05:06"} 0
node_wifi_station_received_packets_total{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 0
# HELP node_wifi_station_signal_dbm The current WiFi signal strength, in decibel-milliwatts (dBm).
# TYPE node_wifi_station_signal_dbm gauge
node_wifi_station_signal_dbm{device="wlan0",mac_address="01:02:03:04:05:06"} -26
@ -3398,6 +4075,10 @@ node_wifi_station_transmit_failed_total{device="wlan0",mac_address="aa:bb:cc:dd:
# TYPE node_wifi_station_transmit_retries_total counter
node_wifi_station_transmit_retries_total{device="wlan0",mac_address="01:02:03:04:05:06"} 20
node_wifi_station_transmit_retries_total{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 10
# HELP node_wifi_station_transmitted_packets_total The total number of packets transmitted by a station.
# TYPE node_wifi_station_transmitted_packets_total counter
node_wifi_station_transmitted_packets_total{device="wlan0",mac_address="01:02:03:04:05:06"} 0
node_wifi_station_transmitted_packets_total{device="wlan0",mac_address="aa:bb:cc:dd:ee:ff"} 0
# HELP node_xfrm_acquire_error_packets_total State hasn’t been fully acquired before use
# TYPE node_xfrm_acquire_error_packets_total counter
node_xfrm_acquire_error_packets_total 24532

@ -0,0 +1,26 @@
# Test PCI IDs file for node_exporter testing
# This file contains sample entries for testing PCI name resolution
# Classes
C 06 Bridge device
04 PCI bridge
C 01 Mass storage controller
08 Non-Volatile memory controller
02 NVM Express
C 02 Network controller
00 Ethernet controller
# Vendors
1022 Advanced Micro Devices, Inc. [AMD]
1634 Renoir/Cezanne PCIe GPP Bridge
17aa 5095 T540-5095 Unified Wire Ethernet Controller
c0a9 Micron/Crucial Technology
540a P2 [Nick P2] / P3 / P3 Plus NVMe PCIe SSD (DRAM-less)
c0a9 5021 PS5021-E21 PCIe4 NVMe Controller (DRAM-less)
8086 Intel Corporation
1521 I350 Gigabit Network Connection
8086 00a3 Ethernet Network Adapter I350-T4 for OCP NIC 3.0
17aa Lenovo

@ -0,0 +1,95 @@
# Test output for PCI device collector with name resolution enabled
# This file demonstrates the --collector.pcidevice.names=true functionality
# HELP node_pcidevice_current_link_transfers_per_second Value of current link's transfers per second (T/s)
# TYPE node_pcidevice_current_link_transfers_per_second gauge
node_pcidevice_current_link_transfers_per_second{bus="00",device="02",function="1",segment="0000"} 8e+09
node_pcidevice_current_link_transfers_per_second{bus="01",device="00",function="0",segment="0000"} 8e+09
node_pcidevice_current_link_transfers_per_second{bus="45",device="00",function="0",segment="0000"} 5e+09
# HELP node_pcidevice_current_link_width Value of current link's width (number of lanes)
# TYPE node_pcidevice_current_link_width gauge
node_pcidevice_current_link_width{bus="00",device="02",function="1",segment="0000"} 4
node_pcidevice_current_link_width{bus="01",device="00",function="0",segment="0000"} 4
node_pcidevice_current_link_width{bus="45",device="00",function="0",segment="0000"} 4
# HELP node_pcidevice_d3cold_allowed Whether the PCIe device supports D3cold power state (0/1).
# TYPE node_pcidevice_d3cold_allowed gauge
node_pcidevice_d3cold_allowed{bus="00",device="02",function="1",segment="0000"} 1
node_pcidevice_d3cold_allowed{bus="01",device="00",function="0",segment="0000"} 1
node_pcidevice_d3cold_allowed{bus="45",device="00",function="0",segment="0000"} 1
# HELP node_pcidevice_info Non-numeric data from /sys/bus/pci/devices/<location>, value is always 1.
# TYPE node_pcidevice_info gauge
# Example 1: AMD PCIe Bridge with Lenovo subsystem
node_pcidevice_info{bus="00",class_id="0x060400",class_name="PCI bridge",device="02",device_id="0x1634",device_name="Renoir/Cezanne PCIe GPP Bridge",function="1",parent_bus="*",parent_device="*",parent_function="*",parent_segment="*",revision="0x00",segment="0000",subsystem_device_id="0x5095",subsystem_device_name="T540-5095 Unified Wire Ethernet Controller",subsystem_vendor_id="0x17aa",subsystem_vendor_name="Lenovo",vendor_id="0x1022",vendor_name="Advanced Micro Devices, Inc. [AMD]"} 1
# Example 2: Micron/Crucial NVMe Controller
node_pcidevice_info{bus="01",class_id="0x010802",class_name="NVM Express",device="00",device_id="0x540a",device_name="P2 [Nick P2] / P3 / P3 Plus NVMe PCIe SSD (DRAM-less)",function="0",parent_bus="00",parent_device="02",parent_function="1",parent_segment="0000",revision="0x01",segment="0000",subsystem_device_id="0x5021",subsystem_device_name="PS5021-E21 PCIe4 NVMe Controller (DRAM-less)",subsystem_vendor_id="0xc0a9",subsystem_vendor_name="Micron/Crucial Technology",vendor_id="0xc0a9",vendor_name="Micron/Crucial Technology"} 1
# Example 3: Intel Network Controller
node_pcidevice_info{bus="45",class_id="0x020000",class_name="Ethernet controller",device="00",device_id="0x1521",device_name="I350 Gigabit Network Connection",function="0",parent_bus="40",parent_device="01",parent_function="3",parent_segment="0000",revision="0x01",segment="0000",subsystem_device_id="0x00a3",subsystem_device_name="Ethernet Network Adapter I350-T4 for OCP NIC 3.0",subsystem_vendor_id="0x8086",subsystem_vendor_name="Intel Corporation",vendor_id="0x8086",vendor_name="Intel Corporation"} 1
# HELP node_pcidevice_numa_node NUMA node number for the PCI device. -1 indicates unknown or not available.
# TYPE node_pcidevice_numa_node gauge
node_pcidevice_numa_node{bus="45",device="00",function="0",segment="0000"} 0
# HELP node_pcidevice_max_link_transfers_per_second Value of maximum link's transfers per second (T/s)
# TYPE node_pcidevice_max_link_transfers_per_second gauge
node_pcidevice_max_link_transfers_per_second{bus="00",device="02",function="1",segment="0000"} 8e+09
node_pcidevice_max_link_transfers_per_second{bus="01",device="00",function="0",segment="0000"} 1.6e+10
node_pcidevice_max_link_transfers_per_second{bus="45",device="00",function="0",segment="0000"} 5e+09
# HELP node_pcidevice_max_link_width Value of maximum link's width (number of lanes)
# TYPE node_pcidevice_max_link_width gauge
node_pcidevice_max_link_width{bus="00",device="02",function="1",segment="0000"} 8
node_pcidevice_max_link_width{bus="01",device="00",function="0",segment="0000"} 4
node_pcidevice_max_link_width{bus="45",device="00",function="0",segment="0000"} 4
# HELP node_pcidevice_power_state PCIe device power state, one of: D0, D1, D2, D3hot, D3cold, unknown or error.
# TYPE node_pcidevice_power_state gauge
node_pcidevice_power_state{bus="00",device="02",function="1",segment="0000",state="D0"} 1
node_pcidevice_power_state{bus="00",device="02",function="1",segment="0000",state="D1"} 0
node_pcidevice_power_state{bus="00",device="02",function="1",segment="0000",state="D2"} 0
node_pcidevice_power_state{bus="00",device="02",function="1",segment="0000",state="D3cold"} 0
node_pcidevice_power_state{bus="00",device="02",function="1",segment="0000",state="D3hot"} 0
node_pcidevice_power_state{bus="00",device="02",function="1",segment="0000",state="error"} 0
node_pcidevice_power_state{bus="00",device="02",function="1",segment="0000",state="unknown"} 0
node_pcidevice_power_state{bus="01",device="00",function="0",segment="0000",state="D0"} 1
node_pcidevice_power_state{bus="01",device="00",function="0",segment="0000",state="D1"} 0
node_pcidevice_power_state{bus="01",device="00",function="0",segment="0000",state="D2"} 0
node_pcidevice_power_state{bus="01",device="00",function="0",segment="0000",state="D3cold"} 0
node_pcidevice_power_state{bus="01",device="00",function="0",segment="0000",state="D3hot"} 0
node_pcidevice_power_state{bus="01",device="00",function="0",segment="0000",state="error"} 0
node_pcidevice_power_state{bus="01",device="00",function="0",segment="0000",state="unknown"} 0
node_pcidevice_power_state{bus="45",device="00",function="0",segment="0000",state="D0"} 1
node_pcidevice_power_state{bus="45",device="00",function="0",segment="0000",state="D1"} 0
node_pcidevice_power_state{bus="45",device="00",function="0",segment="0000",state="D2"} 0
node_pcidevice_power_state{bus="45",device="00",function="0",segment="0000",state="D3cold"} 0
node_pcidevice_power_state{bus="45",device="00",function="0",segment="0000",state="D3hot"} 0
node_pcidevice_power_state{bus="45",device="00",function="0",segment="0000",state="error"} 0
node_pcidevice_power_state{bus="45",device="00",function="0",segment="0000",state="unknown"} 0
# HELP node_pcidevice_sriov_drivers_autoprobe Whether SR-IOV drivers autoprobe is enabled for the device (0/1).
# TYPE node_pcidevice_sriov_drivers_autoprobe gauge
node_pcidevice_sriov_drivers_autoprobe{bus="00",device="02",function="1",segment="0000"} 0
node_pcidevice_sriov_drivers_autoprobe{bus="01",device="00",function="0",segment="0000"} 1
node_pcidevice_sriov_drivers_autoprobe{bus="45",device="00",function="0",segment="0000"} 1
# HELP node_pcidevice_sriov_numvfs Number of Virtual Functions (VFs) currently enabled for SR-IOV.
# TYPE node_pcidevice_sriov_numvfs gauge
node_pcidevice_sriov_numvfs{bus="00",device="02",function="1",segment="0000"} 0
node_pcidevice_sriov_numvfs{bus="01",device="00",function="0",segment="0000"} 4
node_pcidevice_sriov_numvfs{bus="45",device="00",function="0",segment="0000"} 0
# HELP node_pcidevice_sriov_totalvfs Total number of Virtual Functions (VFs) supported by the device.
# TYPE node_pcidevice_sriov_totalvfs gauge
node_pcidevice_sriov_totalvfs{bus="00",device="02",function="1",segment="0000"} 0
node_pcidevice_sriov_totalvfs{bus="01",device="00",function="0",segment="0000"} 8
node_pcidevice_sriov_totalvfs{bus="45",device="00",function="0",segment="0000"} 7
# HELP node_pcidevice_sriov_vf_total_msix Total number of MSI-X vectors for Virtual Functions.
# TYPE node_pcidevice_sriov_vf_total_msix gauge
node_pcidevice_sriov_vf_total_msix{bus="00",device="02",function="1",segment="0000"} 0
node_pcidevice_sriov_vf_total_msix{bus="01",device="00",function="0",segment="0000"} 16
node_pcidevice_sriov_vf_total_msix{bus="45",device="00",function="0",segment="0000"} 0

@ -29,3 +29,4 @@
3147 3002 0:81 / /run/user/1000/gvfs rw,nosuid,nodev,relatime shared:1290 - fuse.gvfsd-fuse gvfsd-fuse rw,user_id=1000,group_id=1000
3148 3003 260:0 / /var/lib/kubelet/plugins/kubernetes.io/vsphere-volume/mounts/[vsanDatastore]\040bafb9e5a-8856-7e6c-699c-801844e77a4a/kubernetes-dynamic-pvc-3eba5bba-48a3-11e8-89ab-005056b92113.vmdk rw,relatime shared:31 - ext4 /dev/sda rw,data=ordered
3149 3004 260:0 / /var/lib/kubelet/plugins/kubernetes.io/vsphere-volume/mounts/[vsanDatastore]\011bafb9e5a-8856-7e6c-699c-801844e77a4a/kubernetes-dynamic-pvc-3eba5bba-48a3-11e8-89ab-005056b92113.vmdk rw,relatime shared:32 - ext4 /dev/sda rw,data=ordered
1128 67 253:0 /var/lib/containers/storage/overlay /var/lib/containers/storage/overlay rw,relatime - xfs /dev/mapper/rhel-root rw,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota

@ -0,0 +1,2 @@
Filename Type Size Used Priority
/dev/zram0 partition 8388604 76 100

File diff suppressed because it is too large Load Diff

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nohwmon
// +build !nohwmon
package collector
@ -23,6 +22,7 @@ import (
"os"
"path/filepath"
"regexp"
"slices"
"strconv"
"strings"
@ -154,11 +154,8 @@ func collectSensorData(dir string, data map[string]map[string]string) error {
continue
}
for _, t := range hwmonSensorTypes {
if t == sensorType {
addValueFile(data, sensorType+strconv.Itoa(sensorNum), sensorProperty, filepath.Join(dir, file.Name()))
break
}
if slices.Contains(hwmonSensorTypes, sensorType) {
addValueFile(data, sensorType+strconv.Itoa(sensorNum), sensorProperty, filepath.Join(dir, file.Name()))
}
}
return nil

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !noinfiniband
// +build !noinfiniband
package collector
@ -84,6 +83,38 @@ func NewInfiniBandCollector(logger *slog.Logger) (Collector, error) {
"port_receive_switch_relay_errors_total": "Number of packets that could not be forwarded by the switch.",
"symbol_error_total": "Number of minor link errors detected on one or more physical lanes.",
"vl15_dropped_total": "Number of incoming VL15 packets dropped due to resource limitations.",
// https://enterprise-support.nvidia.com/s/article/understanding-mlx5-linux-counters-and-status-parameters
"duplicate_requests_packets_total": "The number of received packets. A duplicate request is a request that had been previously executed.",
"implied_nak_seq_errors_total": "The number of time the requested decided an ACK. with a PSN larger than the expected PSN for an RDMA read or response.",
"lifespan_seconds": "The maximum period in ms which defines the aging of the counter reads. Two consecutive reads within this period might return the same values.",
"local_ack_timeout_errors_total": "The number of times QP's ack timer expired for RC, XRC, DCT QPs at the sender side. The QP retry limit was not exceed, therefore it is still recoverable error.",
"np_cnp_packets_sent_total": "The number of CNP packets sent by the Notification Point when it noticed congestion experienced in the RoCEv2 IP header (ECN bits). The counters was added in MLNX_OFED 4.1",
"np_ecn_marked_roce_packets_received_total": "The number of RoCEv2 packets received by the notification point which were marked for experiencing the congestion (ECN bits where '11' on the ingress RoCE traffic) . The counters was added in MLNX_OFED 4.1",
"out_of_buffer_drops_total": "The number of drops occurred due to lack of WQE for the associated QPs.",
"out_of_sequence_packets_received_total": "The number of out of sequence packets received.",
"packet_sequence_errors_total": "The number of received NAK sequence error packets. The QP retry limit was not exceeded.",
"req_cqes_errors_total": "The number of times requester detected CQEs completed with errors. The counters was added in MLNX_OFED 4.1",
"req_cqes_flush_errors_total": "The number of times requester detected CQEs completed with flushed errors. The counters was added in MLNX_OFED 4.1",
"req_remote_access_errors_total": "The number of times requester detected remote access errors. The counters was added in MLNX_OFED 4.1",
"req_remote_invalid_request_errors_total": "The number of times requester detected remote invalid request errors. The counters was added in MLNX_OFED 4.1",
"resp_cqes_errors_total": "The number of times responder detected CQEs completed with errors. The counters was added in MLNX_OFED 4.1",
"resp_cqes_flush_errors_total": "The number of times responder detected CQEs completed with flushed errors. The counters was added in MLNX_OFED 4.1",
"resp_local_length_errors_total": "The number of times responder detected local length errors. The counters was added in MLNX_OFED 4.1",
"resp_remote_access_errors_total": "The number of times responder detected remote access errors. The counters was added in MLNX_OFED 4.1",
"rnr_nak_retry_packets_received_total": "The number of received RNR NAK packets. The QP retry limit was not exceeded.",
"roce_adp_retransmits_total": "The number of adaptive retransmissions for RoCE traffic. The counter was added in MLNX_OFED rev 5.0-1.0.0.0 and kernel v5.6.0",
"roce_adp_retransmits_timeout_total": "The number of times RoCE traffic reached timeout due to adaptive retransmission. The counter was added in MLNX_OFED rev 5.0-1.0.0.0 and kernel v5.6.0",
"roce_slow_restart_used_total": "The number of times RoCE slow restart was used. The counter was added in MLNX_OFED rev 5.0-1.0.0.0 and kernel v5.6.0",
"roce_slow_restart_cnps_total": "The number of times RoCE slow restart generated CNP packets. The counter was added in MLNX_OFED rev 5.0-1.0.0.0 and kernel v5.6.0",
"roce_slow_restart_total": "The number of times RoCE slow restart changed state to slow restart. The counter was added in MLNX_OFED rev 5.0-1.0.0.0 and kernel v5.6.0",
"rp_cnp_packets_handled_total": "The number of CNP packets handled by the Reaction Point HCA to throttle the transmission rate. The counters was added in MLNX_OFED 4.1",
"rp_cnp_ignored_packets_received_total": "The number of CNP packets received and ignored by the Reaction Point HCA. This counter should not raise if RoCE Congestion Control was enabled in the network. If this counter raise, verify that ECN was enabled on the adapter.",
"rx_atomic_requests_total": "The number of received ATOMIC request for the associated QPs.",
"rx_dct_connect_requests_total": "The number of received connection requests for the associated DCTs.",
"rx_read_requests_total": "The number of received READ requests for the associated QPs.",
"rx_write_requests_total": "The number of received WRITE requests for the associated QPs.",
"rx_icrc_encapsulated_errors_total": "The number of RoCE packets with ICRC errors. This counter was added in MLNX_OFED 4.4 and kernel 4.19",
}
i.metricDescs = make(map[string]*prometheus.Desc)
@ -168,6 +199,41 @@ func (c *infinibandCollector) Update(ch chan<- prometheus.Metric) error {
c.pushCounter(ch, "port_receive_switch_relay_errors_total", port.Counters.PortRcvSwitchRelayErrors, port.Name, portStr)
c.pushCounter(ch, "symbol_error_total", port.Counters.SymbolError, port.Name, portStr)
c.pushCounter(ch, "vl15_dropped_total", port.Counters.VL15Dropped, port.Name, portStr)
// port.HwCounters
if port.HwCounters.Lifespan != nil {
c.pushMetric(ch, "lifespan_seconds", *(port.HwCounters.Lifespan)/1000, port.Name, portStr, prometheus.GaugeValue)
}
c.pushCounter(ch, "duplicate_requests_packets_total", port.HwCounters.DuplicateRequest, port.Name, portStr)
c.pushCounter(ch, "implied_nak_seq_errors_total", port.HwCounters.ImpliedNakSeqErr, port.Name, portStr)
c.pushCounter(ch, "local_ack_timeout_errors_total", port.HwCounters.LocalAckTimeoutErr, port.Name, portStr)
c.pushCounter(ch, "np_cnp_packets_sent_total", port.HwCounters.NpCnpSent, port.Name, portStr)
c.pushCounter(ch, "np_ecn_marked_roce_packets_received_total", port.HwCounters.NpEcnMarkedRocePackets, port.Name, portStr)
c.pushCounter(ch, "out_of_buffer_drops_total", port.HwCounters.OutOfBuffer, port.Name, portStr)
c.pushCounter(ch, "out_of_sequence_packets_received_total", port.HwCounters.OutOfSequence, port.Name, portStr)
c.pushCounter(ch, "packet_sequence_errors_total", port.HwCounters.PacketSeqErr, port.Name, portStr)
c.pushCounter(ch, "req_cqes_errors_total", port.HwCounters.ReqCqeError, port.Name, portStr)
c.pushCounter(ch, "req_cqes_flush_errors_total", port.HwCounters.ReqCqeFlushError, port.Name, portStr)
c.pushCounter(ch, "req_remote_access_errors_total", port.HwCounters.ReqRemoteAccessErrors, port.Name, portStr)
c.pushCounter(ch, "req_remote_invalid_request_errors_total", port.HwCounters.ReqRemoteInvalidRequest, port.Name, portStr)
c.pushCounter(ch, "resp_cqes_errors_total", port.HwCounters.RespCqeError, port.Name, portStr)
c.pushCounter(ch, "resp_cqes_flush_errors_total", port.HwCounters.RespCqeFlushError, port.Name, portStr)
c.pushCounter(ch, "resp_local_length_errors_total", port.HwCounters.RespLocalLengthError, port.Name, portStr)
c.pushCounter(ch, "resp_remote_access_errors_total", port.HwCounters.RespRemoteAccessErrors, port.Name, portStr)
c.pushCounter(ch, "rnr_nak_retry_packets_received_total", port.HwCounters.RnrNakRetryErr, port.Name, portStr)
c.pushCounter(ch, "roce_adp_retransmits_total", port.HwCounters.RoceAdpRetrans, port.Name, portStr)
c.pushCounter(ch, "roce_adp_retransmits_timeout_total", port.HwCounters.RoceAdpRetransTo, port.Name, portStr)
c.pushCounter(ch, "roce_slow_restart_used_total", port.HwCounters.RoceSlowRestart, port.Name, portStr)
c.pushCounter(ch, "roce_slow_restart_cnps_total", port.HwCounters.RoceSlowRestartCnps, port.Name, portStr)
c.pushCounter(ch, "roce_slow_restart_total", port.HwCounters.RoceSlowRestartTrans, port.Name, portStr)
c.pushCounter(ch, "rp_cnp_packets_handled_total", port.HwCounters.RpCnpHandled, port.Name, portStr)
c.pushCounter(ch, "rp_cnp_ignored_packets_received_total", port.HwCounters.RpCnpIgnored, port.Name, portStr)
c.pushCounter(ch, "rx_atomic_requests_total", port.HwCounters.RxAtomicRequests, port.Name, portStr)
c.pushCounter(ch, "rx_dct_connect_requests_total", port.HwCounters.RxDctConnect, port.Name, portStr)
c.pushCounter(ch, "rx_read_requests_total", port.HwCounters.RxReadRequests, port.Name, portStr)
c.pushCounter(ch, "rx_write_requests_total", port.HwCounters.RxWriteRequests, port.Name, portStr)
c.pushCounter(ch, "rx_icrc_encapsulated_errors_total", port.HwCounters.RxIcrcEncapsulated, port.Name, portStr)
}
}

@ -12,8 +12,6 @@
// limitations under the License.
//go:build (linux || openbsd) && !nointerrupts
// +build linux openbsd
// +build !nointerrupts
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nointerrupts
// +build !nointerrupts
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nointerrupts
// +build !nointerrupts
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nointerrupts && !amd64
// +build !nointerrupts,!amd64
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nointerrupts
// +build !nointerrupts
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !noipvs
// +build !noipvs
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !noipvs
// +build !noipvs
package collector

@ -0,0 +1,63 @@
// Copyright 2018 The Prometheus Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//go:build !noprocesses
package collector
import (
"fmt"
"log/slog"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/procfs"
)
type kernelHungCollector struct {
fs procfs.FS
logger *slog.Logger
}
func init() {
registerCollector("kernel_hung", defaultDisabled, NewKernelHungCollector)
}
func NewKernelHungCollector(logger *slog.Logger) (Collector, error) {
fs, err := procfs.NewFS(*procPath)
if err != nil {
return nil, fmt.Errorf("failed to open procfs: %w", err)
}
return &kernelHungCollector{
fs: fs,
logger: logger,
}, nil
}
var (
taskDetectCount = prometheus.NewDesc(
prometheus.BuildFQName(namespace, "kernel_hung", "task_detect_count"),
"Total number of tasks that have been detected as hung since the system booted.",
nil, nil,
)
)
func (c *kernelHungCollector) Update(ch chan<- prometheus.Metric) error {
kernelHung, err := c.fs.KernelHung()
if err != nil {
return err
}
ch <- prometheus.MustNewConstMetric(taskDetectCount, prometheus.CounterValue, float64(*kernelHung.HungTaskDetectCount))
return nil
}

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !noksmd
// +build !noksmd
package collector

@ -12,8 +12,6 @@
// limitations under the License.
//go:build !nokvm && (freebsd || dragonfly)
// +build !nokvm
// +build freebsd dragonfly
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nolnstat
// +build !nolnstat
package collector

@ -12,8 +12,6 @@
// limitations under the License.
//go:build (darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || aix) && !noloadavg
// +build darwin dragonfly freebsd linux netbsd openbsd solaris aix
// +build !noloadavg
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !noloadavg
// +build !noloadavg
package collector

@ -12,8 +12,6 @@
// limitations under the License.
//go:build (darwin || dragonfly || freebsd || netbsd || openbsd) && !noloadavg
// +build darwin dragonfly freebsd netbsd openbsd
// +build !noloadavg
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !noloadavg
// +build !noloadavg
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !noloadavg
// +build !noloadavg
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !noloadavg
// +build !noloadavg
package collector

@ -12,7 +12,6 @@
// limitations under the License.
//go:build !nologind
// +build !nologind
package collector
@ -20,6 +19,7 @@ import (
"fmt"
"log/slog"
"os"
"slices"
"strconv"
"github.com/godbus/dbus/v5"
@ -138,10 +138,8 @@ func collectMetrics(ch chan<- prometheus.Metric, c logindInterface) error {
}
func knownStringOrOther(value string, known []string) string {
for i := range known {
if value == known[i] {
return value
}
if slices.Contains(known, value) {
return value
}
return "other"
@ -176,19 +174,19 @@ func newDbus() (*logindDbus, error) {
}
func (c *logindDbus) listSeats() ([]string, error) {
var result [][]interface{}
var result [][]any
err := c.object.Call(dbusObject+".Manager.ListSeats", 0).Store(&result)
if err != nil {
return nil, err
}
resultInterface := make([]interface{}, len(result))
resultInterface := make([]any, len(result))
for i := range result {
resultInterface[i] = result[i]
}
seats := make([]logindSeatEntry, len(result))
seatsInterface := make([]interface{}, len(seats))
seatsInterface := make([]any, len(seats))
for i := range seats {
seatsInterface[i] = &seats[i]
}
@ -209,19 +207,19 @@ func (c *logindDbus) listSeats() ([]string, error) {
}
func (c *logindDbus) listSessions() ([]logindSessionEntry, error) {
var result [][]interface{}
var result [][]any
err := c.object.Call(dbusObject+".Manager.ListSessions", 0).Store(&result)
if err != nil {
return nil, err
}
resultInterface := make([]interface{}, len(result))
resultInterface := make([]any, len(result))
for i := range result {
resultInterface[i] = result[i]
}
sessions := make([]logindSessionEntry, len(result))
sessionsInterface := make([]interface{}, len(sessions))
sessionsInterface := make([]any, len(sessions))
for i := range sessions {
sessionsInterface[i] = &sessions[i]
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save