mirror of
https://github.com/prometheus/node_exporter.git
synced 2025-08-20 18:33:52 -07:00
Merge branch 'master' into master
This commit is contained in:
commit
ffb4689f43
|
@ -7,10 +7,10 @@ executors:
|
||||||
# should also be updated.
|
# should also be updated.
|
||||||
golang:
|
golang:
|
||||||
docker:
|
docker:
|
||||||
- image: cimg/go:1.23
|
- image: cimg/go:1.24
|
||||||
arm:
|
arm:
|
||||||
docker:
|
docker:
|
||||||
- image: cimg/go:1.23
|
- image: cimg/go:1.24
|
||||||
resource_class: arm.medium
|
resource_class: arm.medium
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
@ -42,7 +42,7 @@ jobs:
|
||||||
- run: git diff --exit-code
|
- run: git diff --exit-code
|
||||||
build:
|
build:
|
||||||
machine:
|
machine:
|
||||||
image: ubuntu-2204:current
|
image: ubuntu-2404:current
|
||||||
parallelism: 3
|
parallelism: 3
|
||||||
steps:
|
steps:
|
||||||
- prometheus/setup_environment
|
- prometheus/setup_environment
|
||||||
|
@ -68,9 +68,9 @@ jobs:
|
||||||
destination: /build
|
destination: /build
|
||||||
test_docker:
|
test_docker:
|
||||||
machine:
|
machine:
|
||||||
image: ubuntu-2204:current
|
image: ubuntu-2404:current
|
||||||
environment:
|
environment:
|
||||||
DOCKER_TEST_IMAGE_NAME: quay.io/prometheus/golang-builder:1.23-base
|
DOCKER_TEST_IMAGE_NAME: quay.io/prometheus/golang-builder:1.24-base
|
||||||
REPO_PATH: github.com/prometheus/node_exporter
|
REPO_PATH: github.com/prometheus/node_exporter
|
||||||
steps:
|
steps:
|
||||||
- prometheus/setup_environment
|
- prometheus/setup_environment
|
||||||
|
|
28
.github/workflows/bsd.yml
vendored
28
.github/workflows/bsd.yml
vendored
|
@ -13,11 +13,11 @@ permissions:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
GNU_TAR_VERSION: "1.35"
|
GNU_TAR_VERSION: "1.35"
|
||||||
GO_VERSION_DRAGONFLY: "1.23.3"
|
GO_VERSION_DRAGONFLY: "1.24.1"
|
||||||
GO_VERSION_FREEBSD: "123"
|
GO_VERSION_FREEBSD: "123"
|
||||||
GO_VERSION_NETBSD: "1.23.3"
|
GO_VERSION_NETBSD: "1.24.1"
|
||||||
GO_VERSION_OPENBSD: "1.23.1"
|
GO_VERSION_OPENBSD: "1.23.1"
|
||||||
GO_VERSION_SOLARIS: "1.23.3"
|
GO_VERSION_SOLARIS: "1.24.1"
|
||||||
|
|
||||||
# To spin up one of the VMs below, see the "Debug Shell" section here: https://github.com/vmactions
|
# To spin up one of the VMs below, see the "Debug Shell" section here: https://github.com/vmactions
|
||||||
jobs:
|
jobs:
|
||||||
|
@ -26,9 +26,9 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout the repository
|
- name: Checkout the repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
- name: test-e2e
|
- name: test-e2e
|
||||||
uses: vmactions/freebsd-vm@v1
|
uses: vmactions/freebsd-vm@8873d98fd1413b5977cb2f7348fe329775159892 # v1.1.9
|
||||||
with:
|
with:
|
||||||
copyback: false
|
copyback: false
|
||||||
envs: 'GO_VERSION_FREEBSD GNU_TAR_VERSION'
|
envs: 'GO_VERSION_FREEBSD GNU_TAR_VERSION'
|
||||||
|
@ -73,9 +73,9 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout the repository
|
- name: Checkout the repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
- name: test-e2e
|
- name: test-e2e
|
||||||
uses: vmactions/openbsd-vm@v1
|
uses: vmactions/openbsd-vm@7ac70b6de6f33efc74a90c1964afa3bcf0ee4401 # v1.1.6
|
||||||
with:
|
with:
|
||||||
copyback: false
|
copyback: false
|
||||||
envs: 'GO_VERSION_OPENBSD GNU_TAR_VERSION'
|
envs: 'GO_VERSION_OPENBSD GNU_TAR_VERSION'
|
||||||
|
@ -119,9 +119,9 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout the repository
|
- name: Checkout the repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
- name: test-e2e
|
- name: test-e2e
|
||||||
uses: vmactions/netbsd-vm@v1
|
uses: vmactions/netbsd-vm@46a58bbf03682b4cb24142b97fa315ae52bed573 # v1.1.8
|
||||||
with:
|
with:
|
||||||
copyback: false
|
copyback: false
|
||||||
envs: 'GO_VERSION_NETBSD GNU_TAR_VERSION'
|
envs: 'GO_VERSION_NETBSD GNU_TAR_VERSION'
|
||||||
|
@ -167,9 +167,9 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout the repository
|
- name: Checkout the repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
- name: test-e2e
|
- name: test-e2e
|
||||||
uses: vmactions/dragonflybsd-vm@v1
|
uses: vmactions/dragonflybsd-vm@e3c420e8a2362c2496fca6e76a291abd46f5d8e7 # v1.1.0
|
||||||
with:
|
with:
|
||||||
copyback: false
|
copyback: false
|
||||||
envs: 'GO_VERSION_DRAGONFLY'
|
envs: 'GO_VERSION_DRAGONFLY'
|
||||||
|
@ -217,9 +217,9 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout the repository
|
- name: Checkout the repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
- name: test-e2e
|
- name: test-e2e
|
||||||
uses: vmactions/solaris-vm@v1
|
uses: vmactions/solaris-vm@cc8f82fa1a7cc746153ec3f71bf11f311f16e225 # v1.1.1
|
||||||
with:
|
with:
|
||||||
copyback: false
|
copyback: false
|
||||||
envs: 'GO_VERSION_SOLARIS'
|
envs: 'GO_VERSION_SOLARIS'
|
||||||
|
@ -276,7 +276,7 @@ jobs:
|
||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout the repository
|
- name: Checkout the repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
brew install \
|
brew install \
|
||||||
|
|
8
.github/workflows/golangci-lint.yml
vendored
8
.github/workflows/golangci-lint.yml
vendored
|
@ -26,14 +26,14 @@ jobs:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
- name: Install Go
|
- name: Install Go
|
||||||
uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0
|
uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0
|
||||||
with:
|
with:
|
||||||
go-version: 1.23.x
|
go-version: 1.24.x
|
||||||
- name: Install snmp_exporter/generator dependencies
|
- name: Install snmp_exporter/generator dependencies
|
||||||
run: sudo apt-get update && sudo apt-get -y install libsnmp-dev
|
run: sudo apt-get update && sudo apt-get -y install libsnmp-dev
|
||||||
if: github.repository == 'prometheus/snmp_exporter'
|
if: github.repository == 'prometheus/snmp_exporter'
|
||||||
- name: Lint
|
- name: Lint
|
||||||
uses: golangci/golangci-lint-action@ec5d18412c0aeab7936cb16880d708ba2a64e1ae # v6.2.0
|
uses: golangci/golangci-lint-action@55c2c1448f86e01eaae002a5a3a9624417608d84 # v6.5.2
|
||||||
with:
|
with:
|
||||||
args: --verbose
|
args: --verbose
|
||||||
version: v1.63.4
|
version: v1.64.6
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
go:
|
go:
|
||||||
# Whenever the Go version is updated here, .circle/config.yml and
|
# Whenever the Go version is updated here, .circle/config.yml and
|
||||||
# .promu.yml should also be updated.
|
# .promu.yml should also be updated.
|
||||||
version: 1.23
|
version: 1.24
|
||||||
cgo: true
|
cgo: true
|
||||||
repository:
|
repository:
|
||||||
path: github.com/prometheus/node_exporter
|
path: github.com/prometheus/node_exporter
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
go:
|
go:
|
||||||
# Whenever the Go version is updated here, .circle/config.yml and
|
# Whenever the Go version is updated here, .circle/config.yml and
|
||||||
# .promu-cgo.yml should also be updated.
|
# .promu-cgo.yml should also be updated.
|
||||||
version: 1.23
|
version: 1.24
|
||||||
repository:
|
repository:
|
||||||
path: github.com/prometheus/node_exporter
|
path: github.com/prometheus/node_exporter
|
||||||
build:
|
build:
|
||||||
|
|
|
@ -61,7 +61,7 @@ PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_
|
||||||
SKIP_GOLANGCI_LINT :=
|
SKIP_GOLANGCI_LINT :=
|
||||||
GOLANGCI_LINT :=
|
GOLANGCI_LINT :=
|
||||||
GOLANGCI_LINT_OPTS ?=
|
GOLANGCI_LINT_OPTS ?=
|
||||||
GOLANGCI_LINT_VERSION ?= v1.63.4
|
GOLANGCI_LINT_VERSION ?= v1.64.6
|
||||||
# golangci-lint only supports linux, darwin and windows platforms on i386/amd64/arm64.
|
# 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.
|
# windows isn't included here because of the path separator being different.
|
||||||
ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux darwin))
|
ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux darwin))
|
||||||
|
|
|
@ -398,15 +398,9 @@ func getUdevDeviceProperties(major, minor uint32) (udevInfo, error) {
|
||||||
|
|
||||||
line = strings.TrimPrefix(line, udevDevicePropertyPrefix)
|
line = strings.TrimPrefix(line, udevDevicePropertyPrefix)
|
||||||
|
|
||||||
/* TODO: After we drop support for Go 1.17, the condition below can be simplified to:
|
|
||||||
|
|
||||||
if name, value, found := strings.Cut(line, "="); found {
|
if name, value, found := strings.Cut(line, "="); found {
|
||||||
info[name] = value
|
info[name] = value
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
if fields := strings.SplitN(line, "=", 2); len(fields) == 2 {
|
|
||||||
info[fields[0]] = fields[1]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return info, nil
|
return info, nil
|
||||||
|
|
|
@ -446,7 +446,7 @@ func (c *ethtoolCollector) Update(ch chan<- prometheus.Metric) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if stats == nil || len(stats) < 1 {
|
if len(stats) == 0 {
|
||||||
// No stats returned; device does not support ethtool stats.
|
// No stats returned; device does not support ethtool stats.
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,7 +89,7 @@ type filesystemStats struct {
|
||||||
labels filesystemLabels
|
labels filesystemLabels
|
||||||
size, free, avail float64
|
size, free, avail float64
|
||||||
files, filesFree float64
|
files, filesFree float64
|
||||||
purgeable *float64
|
purgeable float64
|
||||||
ro, deviceError float64
|
ro, deviceError float64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,11 +232,10 @@ func (c *filesystemCollector) Update(ch chan<- prometheus.Metric) error {
|
||||||
c.mountInfoDesc, prometheus.GaugeValue,
|
c.mountInfoDesc, prometheus.GaugeValue,
|
||||||
1.0, s.labels.device, s.labels.major, s.labels.minor, s.labels.mountPoint,
|
1.0, s.labels.device, s.labels.major, s.labels.minor, s.labels.mountPoint,
|
||||||
)
|
)
|
||||||
if s.purgeable != nil {
|
if s.purgeable >= 0 {
|
||||||
ch <- prometheus.MustNewConstMetric(
|
ch <- prometheus.MustNewConstMetric(
|
||||||
c.purgeableDesc, prometheus.GaugeValue,
|
c.purgeableDesc, prometheus.GaugeValue,
|
||||||
*s.purgeable, s.labels.device, s.labels.mountPoint,
|
s.purgeable, s.labels.device, s.labels.mountPoint, s.labels.fsType, s.labels.deviceError,
|
||||||
s.labels.fsType, s.labels.deviceError,
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,23 +20,22 @@ package collector
|
||||||
#cgo CFLAGS: -x objective-c
|
#cgo CFLAGS: -x objective-c
|
||||||
#cgo LDFLAGS: -framework Foundation
|
#cgo LDFLAGS: -framework Foundation
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
Float64 *purgeable(char *path) {
|
Float64 purgeable(char *path) {
|
||||||
CFNumberRef tmp;
|
CFNumberRef tmp;
|
||||||
Float64 *value;
|
|
||||||
NSError *error = nil;
|
NSError *error = nil;
|
||||||
NSString *str = [NSString stringWithUTF8String:path];
|
NSString *str = [NSString stringWithUTF8String:path];
|
||||||
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:str];
|
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:str];
|
||||||
NSDictionary *results = [fileURL resourceValuesForKeys:@[NSURLVolumeAvailableCapacityForImportantUsageKey] error:&error];
|
NSDictionary *results = [fileURL resourceValuesForKeys:@[NSURLVolumeAvailableCapacityForImportantUsageKey] error:&error];
|
||||||
if (results) {
|
if (results) {
|
||||||
if ((tmp = CFDictionaryGetValue((CFDictionaryRef)results, NSURLVolumeAvailableCapacityForImportantUsageKey)) == NULL)
|
if ((tmp = CFDictionaryGetValue((CFDictionaryRef)results, NSURLVolumeAvailableCapacityForImportantUsageKey)) == NULL) {
|
||||||
return NULL;
|
return -1.0f;
|
||||||
value = (Float64 *)malloc(sizeof(Float64));
|
}
|
||||||
if (CFNumberGetValue(tmp, kCFNumberFloat64Type, value)) {
|
Float64 value;
|
||||||
|
if (CFNumberGetValue(tmp, kCFNumberFloat64Type, &value)) {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(value);
|
return -1.0f;
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
import "C"
|
import "C"
|
||||||
|
@ -100,7 +99,7 @@ func (c *filesystemCollector) GetStats() (stats []filesystemStats, err error) {
|
||||||
avail: float64(mnt[i].f_bavail) * float64(mnt[i].f_bsize),
|
avail: float64(mnt[i].f_bavail) * float64(mnt[i].f_bsize),
|
||||||
files: float64(mnt[i].f_files),
|
files: float64(mnt[i].f_files),
|
||||||
filesFree: float64(mnt[i].f_ffree),
|
filesFree: float64(mnt[i].f_ffree),
|
||||||
purgeable: (*float64)(C.purgeable(C.CString(mountpoint))),
|
purgeable: float64(C.purgeable(C.CString(mountpoint))),
|
||||||
ro: ro,
|
ro: ro,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# HELP go_gc_duration_seconds A summary of the wall-time pause (stop-the-world) duration in garbage collection cycles.
|
# HELP go_gc_duration_seconds A summary of the wall-time pause (stop-the-world) duration in garbage collection cycles.
|
||||||
# TYPE go_gc_duration_seconds summary
|
# TYPE go_gc_duration_seconds summary
|
||||||
# HELP go_gc_gogc_percent Heap size target percentage configured by the user, otherwise 100. This value is set by the GOGC environment variable, and the runtime/debug.SetGCPercent function. Sourced from /gc/gogc:percent
|
# HELP go_gc_gogc_percent Heap size target percentage configured by the user, otherwise 100. This value is set by the GOGC environment variable, and the runtime/debug.SetGCPercent function. Sourced from /gc/gogc:percent.
|
||||||
# TYPE go_gc_gogc_percent gauge
|
# TYPE go_gc_gogc_percent gauge
|
||||||
# HELP go_gc_gomemlimit_bytes Go runtime memory limit configured by the user, otherwise math.MaxInt64. This value is set by the GOMEMLIMIT environment variable, and the runtime/debug.SetMemoryLimit function. Sourced from /gc/gomemlimit:bytes
|
# HELP go_gc_gomemlimit_bytes Go runtime memory limit configured by the user, otherwise math.MaxInt64. This value is set by the GOMEMLIMIT environment variable, and the runtime/debug.SetMemoryLimit function. Sourced from /gc/gomemlimit:bytes.
|
||||||
# TYPE go_gc_gomemlimit_bytes gauge
|
# TYPE go_gc_gomemlimit_bytes gauge
|
||||||
# HELP go_goroutines Number of goroutines that currently exist.
|
# HELP go_goroutines Number of goroutines that currently exist.
|
||||||
# TYPE go_goroutines gauge
|
# TYPE go_goroutines gauge
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
# TYPE go_memstats_stack_sys_bytes gauge
|
# TYPE go_memstats_stack_sys_bytes gauge
|
||||||
# HELP go_memstats_sys_bytes Number of bytes obtained from system. Equals to /memory/classes/total:byte.
|
# HELP go_memstats_sys_bytes Number of bytes obtained from system. Equals to /memory/classes/total:byte.
|
||||||
# TYPE go_memstats_sys_bytes gauge
|
# TYPE go_memstats_sys_bytes gauge
|
||||||
# HELP go_sched_gomaxprocs_threads The current runtime.GOMAXPROCS setting, or the number of operating system threads that can execute user-level Go code simultaneously. Sourced from /sched/gomaxprocs:threads
|
# HELP go_sched_gomaxprocs_threads The current runtime.GOMAXPROCS setting, or the number of operating system threads that can execute user-level Go code simultaneously. Sourced from /sched/gomaxprocs:threads.
|
||||||
# TYPE go_sched_gomaxprocs_threads gauge
|
# TYPE go_sched_gomaxprocs_threads gauge
|
||||||
# HELP go_threads Number of OS threads created.
|
# HELP go_threads Number of OS threads created.
|
||||||
# TYPE go_threads gauge
|
# TYPE go_threads gauge
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# HELP go_gc_duration_seconds A summary of the wall-time pause (stop-the-world) duration in garbage collection cycles.
|
# HELP go_gc_duration_seconds A summary of the wall-time pause (stop-the-world) duration in garbage collection cycles.
|
||||||
# TYPE go_gc_duration_seconds summary
|
# TYPE go_gc_duration_seconds summary
|
||||||
# HELP go_gc_gogc_percent Heap size target percentage configured by the user, otherwise 100. This value is set by the GOGC environment variable, and the runtime/debug.SetGCPercent function. Sourced from /gc/gogc:percent
|
# HELP go_gc_gogc_percent Heap size target percentage configured by the user, otherwise 100. This value is set by the GOGC environment variable, and the runtime/debug.SetGCPercent function. Sourced from /gc/gogc:percent.
|
||||||
# TYPE go_gc_gogc_percent gauge
|
# TYPE go_gc_gogc_percent gauge
|
||||||
# HELP go_gc_gomemlimit_bytes Go runtime memory limit configured by the user, otherwise math.MaxInt64. This value is set by the GOMEMLIMIT environment variable, and the runtime/debug.SetMemoryLimit function. Sourced from /gc/gomemlimit:bytes
|
# HELP go_gc_gomemlimit_bytes Go runtime memory limit configured by the user, otherwise math.MaxInt64. This value is set by the GOMEMLIMIT environment variable, and the runtime/debug.SetMemoryLimit function. Sourced from /gc/gomemlimit:bytes.
|
||||||
# TYPE go_gc_gomemlimit_bytes gauge
|
# TYPE go_gc_gomemlimit_bytes gauge
|
||||||
# HELP go_goroutines Number of goroutines that currently exist.
|
# HELP go_goroutines Number of goroutines that currently exist.
|
||||||
# TYPE go_goroutines gauge
|
# TYPE go_goroutines gauge
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
# TYPE go_memstats_stack_sys_bytes gauge
|
# TYPE go_memstats_stack_sys_bytes gauge
|
||||||
# HELP go_memstats_sys_bytes Number of bytes obtained from system. Equals to /memory/classes/total:byte.
|
# HELP go_memstats_sys_bytes Number of bytes obtained from system. Equals to /memory/classes/total:byte.
|
||||||
# TYPE go_memstats_sys_bytes gauge
|
# TYPE go_memstats_sys_bytes gauge
|
||||||
# HELP go_sched_gomaxprocs_threads The current runtime.GOMAXPROCS setting, or the number of operating system threads that can execute user-level Go code simultaneously. Sourced from /sched/gomaxprocs:threads
|
# HELP go_sched_gomaxprocs_threads The current runtime.GOMAXPROCS setting, or the number of operating system threads that can execute user-level Go code simultaneously. Sourced from /sched/gomaxprocs:threads.
|
||||||
# TYPE go_sched_gomaxprocs_threads gauge
|
# TYPE go_sched_gomaxprocs_threads gauge
|
||||||
# HELP go_threads Number of OS threads created.
|
# HELP go_threads Number of OS threads created.
|
||||||
# TYPE go_threads gauge
|
# TYPE go_threads gauge
|
||||||
|
@ -251,6 +251,20 @@ 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
|
# 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
|
# TYPE node_xfrm_out_state_seq_error_packets_total counter
|
||||||
node_xfrm_out_state_seq_error_packets_total 543
|
node_xfrm_out_state_seq_error_packets_total 543
|
||||||
|
# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
|
||||||
|
# TYPE process_cpu_seconds_total counter
|
||||||
|
# HELP process_max_fds Maximum number of open file descriptors.
|
||||||
|
# TYPE process_max_fds gauge
|
||||||
|
# HELP process_open_fds Number of open file descriptors.
|
||||||
|
# TYPE process_open_fds gauge
|
||||||
|
# HELP process_resident_memory_bytes Resident memory size in bytes.
|
||||||
|
# TYPE process_resident_memory_bytes gauge
|
||||||
|
# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
|
||||||
|
# TYPE process_start_time_seconds gauge
|
||||||
|
# HELP process_virtual_memory_bytes Virtual memory size in bytes.
|
||||||
|
# TYPE process_virtual_memory_bytes gauge
|
||||||
|
# HELP process_virtual_memory_max_bytes Maximum amount of virtual memory available in bytes.
|
||||||
|
# TYPE process_virtual_memory_max_bytes gauge
|
||||||
# HELP promhttp_metric_handler_errors_total Total number of internal errors encountered by the promhttp metric handler.
|
# HELP promhttp_metric_handler_errors_total Total number of internal errors encountered by the promhttp metric handler.
|
||||||
# TYPE promhttp_metric_handler_errors_total counter
|
# TYPE promhttp_metric_handler_errors_total counter
|
||||||
promhttp_metric_handler_errors_total{cause="encoding"} 0
|
promhttp_metric_handler_errors_total{cause="encoding"} 0
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# HELP go_gc_duration_seconds A summary of the wall-time pause (stop-the-world) duration in garbage collection cycles.
|
# HELP go_gc_duration_seconds A summary of the wall-time pause (stop-the-world) duration in garbage collection cycles.
|
||||||
# TYPE go_gc_duration_seconds summary
|
# TYPE go_gc_duration_seconds summary
|
||||||
# HELP go_gc_gogc_percent Heap size target percentage configured by the user, otherwise 100. This value is set by the GOGC environment variable, and the runtime/debug.SetGCPercent function. Sourced from /gc/gogc:percent
|
# HELP go_gc_gogc_percent Heap size target percentage configured by the user, otherwise 100. This value is set by the GOGC environment variable, and the runtime/debug.SetGCPercent function. Sourced from /gc/gogc:percent.
|
||||||
# TYPE go_gc_gogc_percent gauge
|
# TYPE go_gc_gogc_percent gauge
|
||||||
# HELP go_gc_gomemlimit_bytes Go runtime memory limit configured by the user, otherwise math.MaxInt64. This value is set by the GOMEMLIMIT environment variable, and the runtime/debug.SetMemoryLimit function. Sourced from /gc/gomemlimit:bytes
|
# HELP go_gc_gomemlimit_bytes Go runtime memory limit configured by the user, otherwise math.MaxInt64. This value is set by the GOMEMLIMIT environment variable, and the runtime/debug.SetMemoryLimit function. Sourced from /gc/gomemlimit:bytes.
|
||||||
# TYPE go_gc_gomemlimit_bytes gauge
|
# TYPE go_gc_gomemlimit_bytes gauge
|
||||||
# HELP go_goroutines Number of goroutines that currently exist.
|
# HELP go_goroutines Number of goroutines that currently exist.
|
||||||
# TYPE go_goroutines gauge
|
# TYPE go_goroutines gauge
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
# TYPE go_memstats_stack_sys_bytes gauge
|
# TYPE go_memstats_stack_sys_bytes gauge
|
||||||
# HELP go_memstats_sys_bytes Number of bytes obtained from system. Equals to /memory/classes/total:byte.
|
# HELP go_memstats_sys_bytes Number of bytes obtained from system. Equals to /memory/classes/total:byte.
|
||||||
# TYPE go_memstats_sys_bytes gauge
|
# TYPE go_memstats_sys_bytes gauge
|
||||||
# HELP go_sched_gomaxprocs_threads The current runtime.GOMAXPROCS setting, or the number of operating system threads that can execute user-level Go code simultaneously. Sourced from /sched/gomaxprocs:threads
|
# HELP go_sched_gomaxprocs_threads The current runtime.GOMAXPROCS setting, or the number of operating system threads that can execute user-level Go code simultaneously. Sourced from /sched/gomaxprocs:threads.
|
||||||
# TYPE go_sched_gomaxprocs_threads gauge
|
# TYPE go_sched_gomaxprocs_threads gauge
|
||||||
# HELP go_threads Number of OS threads created.
|
# HELP go_threads Number of OS threads created.
|
||||||
# TYPE go_threads gauge
|
# TYPE go_threads gauge
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# HELP go_gc_duration_seconds A summary of the wall-time pause (stop-the-world) duration in garbage collection cycles.
|
# HELP go_gc_duration_seconds A summary of the wall-time pause (stop-the-world) duration in garbage collection cycles.
|
||||||
# TYPE go_gc_duration_seconds summary
|
# TYPE go_gc_duration_seconds summary
|
||||||
# HELP go_gc_gogc_percent Heap size target percentage configured by the user, otherwise 100. This value is set by the GOGC environment variable, and the runtime/debug.SetGCPercent function. Sourced from /gc/gogc:percent
|
# HELP go_gc_gogc_percent Heap size target percentage configured by the user, otherwise 100. This value is set by the GOGC environment variable, and the runtime/debug.SetGCPercent function. Sourced from /gc/gogc:percent.
|
||||||
# TYPE go_gc_gogc_percent gauge
|
# TYPE go_gc_gogc_percent gauge
|
||||||
# HELP go_gc_gomemlimit_bytes Go runtime memory limit configured by the user, otherwise math.MaxInt64. This value is set by the GOMEMLIMIT environment variable, and the runtime/debug.SetMemoryLimit function. Sourced from /gc/gomemlimit:bytes
|
# HELP go_gc_gomemlimit_bytes Go runtime memory limit configured by the user, otherwise math.MaxInt64. This value is set by the GOMEMLIMIT environment variable, and the runtime/debug.SetMemoryLimit function. Sourced from /gc/gomemlimit:bytes.
|
||||||
# TYPE go_gc_gomemlimit_bytes gauge
|
# TYPE go_gc_gomemlimit_bytes gauge
|
||||||
# HELP go_goroutines Number of goroutines that currently exist.
|
# HELP go_goroutines Number of goroutines that currently exist.
|
||||||
# TYPE go_goroutines gauge
|
# TYPE go_goroutines gauge
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
# TYPE go_memstats_stack_sys_bytes gauge
|
# TYPE go_memstats_stack_sys_bytes gauge
|
||||||
# HELP go_memstats_sys_bytes Number of bytes obtained from system. Equals to /memory/classes/total:byte.
|
# HELP go_memstats_sys_bytes Number of bytes obtained from system. Equals to /memory/classes/total:byte.
|
||||||
# TYPE go_memstats_sys_bytes gauge
|
# TYPE go_memstats_sys_bytes gauge
|
||||||
# HELP go_sched_gomaxprocs_threads The current runtime.GOMAXPROCS setting, or the number of operating system threads that can execute user-level Go code simultaneously. Sourced from /sched/gomaxprocs:threads
|
# HELP go_sched_gomaxprocs_threads The current runtime.GOMAXPROCS setting, or the number of operating system threads that can execute user-level Go code simultaneously. Sourced from /sched/gomaxprocs:threads.
|
||||||
# TYPE go_sched_gomaxprocs_threads gauge
|
# TYPE go_sched_gomaxprocs_threads gauge
|
||||||
# HELP go_threads Number of OS threads created.
|
# HELP go_threads Number of OS threads created.
|
||||||
# TYPE go_threads gauge
|
# TYPE go_threads gauge
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# HELP go_gc_duration_seconds A summary of the wall-time pause (stop-the-world) duration in garbage collection cycles.
|
# HELP go_gc_duration_seconds A summary of the wall-time pause (stop-the-world) duration in garbage collection cycles.
|
||||||
# TYPE go_gc_duration_seconds summary
|
# TYPE go_gc_duration_seconds summary
|
||||||
# HELP go_gc_gogc_percent Heap size target percentage configured by the user, otherwise 100. This value is set by the GOGC environment variable, and the runtime/debug.SetGCPercent function. Sourced from /gc/gogc:percent
|
# HELP go_gc_gogc_percent Heap size target percentage configured by the user, otherwise 100. This value is set by the GOGC environment variable, and the runtime/debug.SetGCPercent function. Sourced from /gc/gogc:percent.
|
||||||
# TYPE go_gc_gogc_percent gauge
|
# TYPE go_gc_gogc_percent gauge
|
||||||
# HELP go_gc_gomemlimit_bytes Go runtime memory limit configured by the user, otherwise math.MaxInt64. This value is set by the GOMEMLIMIT environment variable, and the runtime/debug.SetMemoryLimit function. Sourced from /gc/gomemlimit:bytes
|
# HELP go_gc_gomemlimit_bytes Go runtime memory limit configured by the user, otherwise math.MaxInt64. This value is set by the GOMEMLIMIT environment variable, and the runtime/debug.SetMemoryLimit function. Sourced from /gc/gomemlimit:bytes.
|
||||||
# TYPE go_gc_gomemlimit_bytes gauge
|
# TYPE go_gc_gomemlimit_bytes gauge
|
||||||
# HELP go_goroutines Number of goroutines that currently exist.
|
# HELP go_goroutines Number of goroutines that currently exist.
|
||||||
# TYPE go_goroutines gauge
|
# TYPE go_goroutines gauge
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
# TYPE go_memstats_stack_sys_bytes gauge
|
# TYPE go_memstats_stack_sys_bytes gauge
|
||||||
# HELP go_memstats_sys_bytes Number of bytes obtained from system. Equals to /memory/classes/total:byte.
|
# HELP go_memstats_sys_bytes Number of bytes obtained from system. Equals to /memory/classes/total:byte.
|
||||||
# TYPE go_memstats_sys_bytes gauge
|
# TYPE go_memstats_sys_bytes gauge
|
||||||
# HELP go_sched_gomaxprocs_threads The current runtime.GOMAXPROCS setting, or the number of operating system threads that can execute user-level Go code simultaneously. Sourced from /sched/gomaxprocs:threads
|
# HELP go_sched_gomaxprocs_threads The current runtime.GOMAXPROCS setting, or the number of operating system threads that can execute user-level Go code simultaneously. Sourced from /sched/gomaxprocs:threads.
|
||||||
# TYPE go_sched_gomaxprocs_threads gauge
|
# TYPE go_sched_gomaxprocs_threads gauge
|
||||||
# HELP go_threads Number of OS threads created.
|
# HELP go_threads Number of OS threads created.
|
||||||
# TYPE go_threads gauge
|
# TYPE go_threads gauge
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# HELP go_gc_duration_seconds A summary of the wall-time pause (stop-the-world) duration in garbage collection cycles.
|
# HELP go_gc_duration_seconds A summary of the wall-time pause (stop-the-world) duration in garbage collection cycles.
|
||||||
# TYPE go_gc_duration_seconds summary
|
# TYPE go_gc_duration_seconds summary
|
||||||
# HELP go_gc_gogc_percent Heap size target percentage configured by the user, otherwise 100. This value is set by the GOGC environment variable, and the runtime/debug.SetGCPercent function. Sourced from /gc/gogc:percent
|
# HELP go_gc_gogc_percent Heap size target percentage configured by the user, otherwise 100. This value is set by the GOGC environment variable, and the runtime/debug.SetGCPercent function. Sourced from /gc/gogc:percent.
|
||||||
# TYPE go_gc_gogc_percent gauge
|
# TYPE go_gc_gogc_percent gauge
|
||||||
# HELP go_gc_gomemlimit_bytes Go runtime memory limit configured by the user, otherwise math.MaxInt64. This value is set by the GOMEMLIMIT environment variable, and the runtime/debug.SetMemoryLimit function. Sourced from /gc/gomemlimit:bytes
|
# HELP go_gc_gomemlimit_bytes Go runtime memory limit configured by the user, otherwise math.MaxInt64. This value is set by the GOMEMLIMIT environment variable, and the runtime/debug.SetMemoryLimit function. Sourced from /gc/gomemlimit:bytes.
|
||||||
# TYPE go_gc_gomemlimit_bytes gauge
|
# TYPE go_gc_gomemlimit_bytes gauge
|
||||||
# HELP go_goroutines Number of goroutines that currently exist.
|
# HELP go_goroutines Number of goroutines that currently exist.
|
||||||
# TYPE go_goroutines gauge
|
# TYPE go_goroutines gauge
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
# TYPE go_memstats_stack_sys_bytes gauge
|
# TYPE go_memstats_stack_sys_bytes gauge
|
||||||
# HELP go_memstats_sys_bytes Number of bytes obtained from system. Equals to /memory/classes/total:byte.
|
# HELP go_memstats_sys_bytes Number of bytes obtained from system. Equals to /memory/classes/total:byte.
|
||||||
# TYPE go_memstats_sys_bytes gauge
|
# TYPE go_memstats_sys_bytes gauge
|
||||||
# HELP go_sched_gomaxprocs_threads The current runtime.GOMAXPROCS setting, or the number of operating system threads that can execute user-level Go code simultaneously. Sourced from /sched/gomaxprocs:threads
|
# HELP go_sched_gomaxprocs_threads The current runtime.GOMAXPROCS setting, or the number of operating system threads that can execute user-level Go code simultaneously. Sourced from /sched/gomaxprocs:threads.
|
||||||
# TYPE go_sched_gomaxprocs_threads gauge
|
# TYPE go_sched_gomaxprocs_threads gauge
|
||||||
# HELP go_threads Number of OS threads created.
|
# HELP go_threads Number of OS threads created.
|
||||||
# TYPE go_threads gauge
|
# TYPE go_threads gauge
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# HELP go_gc_duration_seconds A summary of the wall-time pause (stop-the-world) duration in garbage collection cycles.
|
# HELP go_gc_duration_seconds A summary of the wall-time pause (stop-the-world) duration in garbage collection cycles.
|
||||||
# TYPE go_gc_duration_seconds summary
|
# TYPE go_gc_duration_seconds summary
|
||||||
# HELP go_gc_gogc_percent Heap size target percentage configured by the user, otherwise 100. This value is set by the GOGC environment variable, and the runtime/debug.SetGCPercent function. Sourced from /gc/gogc:percent
|
# HELP go_gc_gogc_percent Heap size target percentage configured by the user, otherwise 100. This value is set by the GOGC environment variable, and the runtime/debug.SetGCPercent function. Sourced from /gc/gogc:percent.
|
||||||
# TYPE go_gc_gogc_percent gauge
|
# TYPE go_gc_gogc_percent gauge
|
||||||
# HELP go_gc_gomemlimit_bytes Go runtime memory limit configured by the user, otherwise math.MaxInt64. This value is set by the GOMEMLIMIT environment variable, and the runtime/debug.SetMemoryLimit function. Sourced from /gc/gomemlimit:bytes
|
# HELP go_gc_gomemlimit_bytes Go runtime memory limit configured by the user, otherwise math.MaxInt64. This value is set by the GOMEMLIMIT environment variable, and the runtime/debug.SetMemoryLimit function. Sourced from /gc/gomemlimit:bytes.
|
||||||
# TYPE go_gc_gomemlimit_bytes gauge
|
# TYPE go_gc_gomemlimit_bytes gauge
|
||||||
# HELP go_goroutines Number of goroutines that currently exist.
|
# HELP go_goroutines Number of goroutines that currently exist.
|
||||||
# TYPE go_goroutines gauge
|
# TYPE go_goroutines gauge
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
# TYPE go_memstats_stack_sys_bytes gauge
|
# TYPE go_memstats_stack_sys_bytes gauge
|
||||||
# HELP go_memstats_sys_bytes Number of bytes obtained from system. Equals to /memory/classes/total:byte.
|
# HELP go_memstats_sys_bytes Number of bytes obtained from system. Equals to /memory/classes/total:byte.
|
||||||
# TYPE go_memstats_sys_bytes gauge
|
# TYPE go_memstats_sys_bytes gauge
|
||||||
# HELP go_sched_gomaxprocs_threads The current runtime.GOMAXPROCS setting, or the number of operating system threads that can execute user-level Go code simultaneously. Sourced from /sched/gomaxprocs:threads
|
# HELP go_sched_gomaxprocs_threads The current runtime.GOMAXPROCS setting, or the number of operating system threads that can execute user-level Go code simultaneously. Sourced from /sched/gomaxprocs:threads.
|
||||||
# TYPE go_sched_gomaxprocs_threads gauge
|
# TYPE go_sched_gomaxprocs_threads gauge
|
||||||
# HELP go_threads Number of OS threads created.
|
# HELP go_threads Number of OS threads created.
|
||||||
# TYPE go_threads gauge
|
# TYPE go_threads gauge
|
||||||
|
@ -91,12 +91,6 @@ node_buddyinfo_blocks{node="0",size="8",zone="Normal"} 0
|
||||||
node_buddyinfo_blocks{node="0",size="9",zone="DMA"} 1
|
node_buddyinfo_blocks{node="0",size="9",zone="DMA"} 1
|
||||||
node_buddyinfo_blocks{node="0",size="9",zone="DMA32"} 0
|
node_buddyinfo_blocks{node="0",size="9",zone="DMA32"} 0
|
||||||
node_buddyinfo_blocks{node="0",size="9",zone="Normal"} 0
|
node_buddyinfo_blocks{node="0",size="9",zone="Normal"} 0
|
||||||
# HELP node_cpu_frequency_max_hertz Maximum CPU thread frequency in hertz.
|
|
||||||
# TYPE node_cpu_frequency_max_hertz gauge
|
|
||||||
node_cpu_frequency_max_hertz{cpu="0"} 2.445e+09
|
|
||||||
node_cpu_frequency_max_hertz{cpu="1"} 2.445e+09
|
|
||||||
node_cpu_frequency_max_hertz{cpu="2"} 2.445e+09
|
|
||||||
node_cpu_frequency_max_hertz{cpu="3"} 2.445e+09
|
|
||||||
# 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.
|
# 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
|
# TYPE node_exporter_build_info gauge
|
||||||
# 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.
|
# 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.
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# HELP go_gc_duration_seconds A summary of the wall-time pause (stop-the-world) duration in garbage collection cycles.
|
# HELP go_gc_duration_seconds A summary of the wall-time pause (stop-the-world) duration in garbage collection cycles.
|
||||||
# TYPE go_gc_duration_seconds summary
|
# TYPE go_gc_duration_seconds summary
|
||||||
# HELP go_gc_gogc_percent Heap size target percentage configured by the user, otherwise 100. This value is set by the GOGC environment variable, and the runtime/debug.SetGCPercent function. Sourced from /gc/gogc:percent
|
# HELP go_gc_gogc_percent Heap size target percentage configured by the user, otherwise 100. This value is set by the GOGC environment variable, and the runtime/debug.SetGCPercent function. Sourced from /gc/gogc:percent.
|
||||||
# TYPE go_gc_gogc_percent gauge
|
# TYPE go_gc_gogc_percent gauge
|
||||||
# HELP go_gc_gomemlimit_bytes Go runtime memory limit configured by the user, otherwise math.MaxInt64. This value is set by the GOMEMLIMIT environment variable, and the runtime/debug.SetMemoryLimit function. Sourced from /gc/gomemlimit:bytes
|
# HELP go_gc_gomemlimit_bytes Go runtime memory limit configured by the user, otherwise math.MaxInt64. This value is set by the GOMEMLIMIT environment variable, and the runtime/debug.SetMemoryLimit function. Sourced from /gc/gomemlimit:bytes.
|
||||||
# TYPE go_gc_gomemlimit_bytes gauge
|
# TYPE go_gc_gomemlimit_bytes gauge
|
||||||
# HELP go_goroutines Number of goroutines that currently exist.
|
# HELP go_goroutines Number of goroutines that currently exist.
|
||||||
# TYPE go_goroutines gauge
|
# TYPE go_goroutines gauge
|
||||||
|
@ -52,7 +52,7 @@
|
||||||
# TYPE go_memstats_stack_sys_bytes gauge
|
# TYPE go_memstats_stack_sys_bytes gauge
|
||||||
# HELP go_memstats_sys_bytes Number of bytes obtained from system. Equals to /memory/classes/total:byte.
|
# HELP go_memstats_sys_bytes Number of bytes obtained from system. Equals to /memory/classes/total:byte.
|
||||||
# TYPE go_memstats_sys_bytes gauge
|
# TYPE go_memstats_sys_bytes gauge
|
||||||
# HELP go_sched_gomaxprocs_threads The current runtime.GOMAXPROCS setting, or the number of operating system threads that can execute user-level Go code simultaneously. Sourced from /sched/gomaxprocs:threads
|
# HELP go_sched_gomaxprocs_threads The current runtime.GOMAXPROCS setting, or the number of operating system threads that can execute user-level Go code simultaneously. Sourced from /sched/gomaxprocs:threads.
|
||||||
# TYPE go_sched_gomaxprocs_threads gauge
|
# TYPE go_sched_gomaxprocs_threads gauge
|
||||||
# HELP go_threads Number of OS threads created.
|
# HELP go_threads Number of OS threads created.
|
||||||
# TYPE go_threads gauge
|
# TYPE go_threads gauge
|
||||||
|
|
|
@ -21,6 +21,8 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
|
"github.com/prometheus/node_exporter/collector/utils"
|
||||||
|
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
)
|
)
|
||||||
|
@ -49,7 +51,7 @@ func intr(idx _C_int) (itr interrupt, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
dev := *(*[128]byte)(unsafe.Pointer(&buf[0]))
|
dev := *(*[128]byte)(unsafe.Pointer(&buf[0]))
|
||||||
itr.device = string(dev[:])
|
itr.device = utils.SafeBytesToString(dev[:])
|
||||||
|
|
||||||
mib[2] = KERN_INTRCNT_VECTOR
|
mib[2] = KERN_INTRCNT_VECTOR
|
||||||
buf, err = sysctl(mib[:])
|
buf, err = sysctl(mib[:])
|
||||||
|
|
|
@ -27,8 +27,15 @@ import (
|
||||||
"github.com/prometheus/procfs"
|
"github.com/prometheus/procfs"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
psiResourceCPU = "cpu"
|
||||||
|
psiResourceIO = "io"
|
||||||
|
psiResourceMemory = "memory"
|
||||||
|
psiResourceIRQ = "irq"
|
||||||
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
psiResources = []string{"cpu", "io", "memory", "irq"}
|
psiResources = []string{psiResourceCPU, psiResourceIO, psiResourceMemory, psiResourceIRQ}
|
||||||
)
|
)
|
||||||
|
|
||||||
type pressureStatsCollector struct {
|
type pressureStatsCollector struct {
|
||||||
|
@ -93,13 +100,18 @@ func NewPressureStatsCollector(logger *slog.Logger) (Collector, error) {
|
||||||
|
|
||||||
// Update calls procfs.NewPSIStatsForResource for the different resources and updates the values
|
// Update calls procfs.NewPSIStatsForResource for the different resources and updates the values
|
||||||
func (c *pressureStatsCollector) Update(ch chan<- prometheus.Metric) error {
|
func (c *pressureStatsCollector) Update(ch chan<- prometheus.Metric) error {
|
||||||
|
foundResources := 0
|
||||||
for _, res := range psiResources {
|
for _, res := range psiResources {
|
||||||
c.logger.Debug("collecting statistics for resource", "resource", res)
|
c.logger.Debug("collecting statistics for resource", "resource", res)
|
||||||
vals, err := c.fs.PSIStatsForResource(res)
|
vals, err := c.fs.PSIStatsForResource(res)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Is(err, os.ErrNotExist) {
|
if errors.Is(err, os.ErrNotExist) && res != psiResourceIRQ {
|
||||||
c.logger.Debug("pressure information is unavailable, you need a Linux kernel >= 4.20 and/or CONFIG_PSI enabled for your kernel")
|
c.logger.Debug("pressure information is unavailable, you need a Linux kernel >= 4.20 and/or CONFIG_PSI enabled for your kernel", "resource", res)
|
||||||
return ErrNoData
|
continue
|
||||||
|
}
|
||||||
|
if errors.Is(err, os.ErrNotExist) && res == psiResourceIRQ {
|
||||||
|
c.logger.Debug("IRQ pressure information is unavailable, you need a Linux kernel >= 6.1 and/or CONFIG_PSI enabled for your kernel", "resource", res)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
if errors.Is(err, syscall.ENOTSUP) {
|
if errors.Is(err, syscall.ENOTSUP) {
|
||||||
c.logger.Debug("pressure information is disabled, add psi=1 kernel command line to enable it")
|
c.logger.Debug("pressure information is disabled, add psi=1 kernel command line to enable it")
|
||||||
|
@ -109,28 +121,35 @@ func (c *pressureStatsCollector) Update(ch chan<- prometheus.Metric) error {
|
||||||
}
|
}
|
||||||
// IRQ pressure does not have 'some' data.
|
// IRQ pressure does not have 'some' data.
|
||||||
// See https://github.com/torvalds/linux/blob/v6.9/include/linux/psi_types.h#L65
|
// See https://github.com/torvalds/linux/blob/v6.9/include/linux/psi_types.h#L65
|
||||||
if vals.Some == nil && res != "irq" {
|
if vals.Some == nil && res != psiResourceIRQ {
|
||||||
c.logger.Debug("pressure information returned no 'some' data")
|
c.logger.Debug("pressure information returned no 'some' data")
|
||||||
return ErrNoData
|
return ErrNoData
|
||||||
}
|
}
|
||||||
if vals.Full == nil && res != "cpu" {
|
if vals.Full == nil && res != psiResourceCPU {
|
||||||
c.logger.Debug("pressure information returned no 'full' data")
|
c.logger.Debug("pressure information returned no 'full' data")
|
||||||
return ErrNoData
|
return ErrNoData
|
||||||
}
|
}
|
||||||
switch res {
|
switch res {
|
||||||
case "cpu":
|
case psiResourceCPU:
|
||||||
ch <- prometheus.MustNewConstMetric(c.cpu, prometheus.CounterValue, float64(vals.Some.Total)/1000.0/1000.0)
|
ch <- prometheus.MustNewConstMetric(c.cpu, prometheus.CounterValue, float64(vals.Some.Total)/1000.0/1000.0)
|
||||||
case "io":
|
case psiResourceIO:
|
||||||
ch <- prometheus.MustNewConstMetric(c.io, prometheus.CounterValue, float64(vals.Some.Total)/1000.0/1000.0)
|
ch <- prometheus.MustNewConstMetric(c.io, prometheus.CounterValue, float64(vals.Some.Total)/1000.0/1000.0)
|
||||||
ch <- prometheus.MustNewConstMetric(c.ioFull, prometheus.CounterValue, float64(vals.Full.Total)/1000.0/1000.0)
|
ch <- prometheus.MustNewConstMetric(c.ioFull, prometheus.CounterValue, float64(vals.Full.Total)/1000.0/1000.0)
|
||||||
case "memory":
|
case psiResourceMemory:
|
||||||
ch <- prometheus.MustNewConstMetric(c.mem, prometheus.CounterValue, float64(vals.Some.Total)/1000.0/1000.0)
|
ch <- prometheus.MustNewConstMetric(c.mem, prometheus.CounterValue, float64(vals.Some.Total)/1000.0/1000.0)
|
||||||
ch <- prometheus.MustNewConstMetric(c.memFull, prometheus.CounterValue, float64(vals.Full.Total)/1000.0/1000.0)
|
ch <- prometheus.MustNewConstMetric(c.memFull, prometheus.CounterValue, float64(vals.Full.Total)/1000.0/1000.0)
|
||||||
case "irq":
|
case psiResourceIRQ:
|
||||||
ch <- prometheus.MustNewConstMetric(c.irqFull, prometheus.CounterValue, float64(vals.Full.Total)/1000.0/1000.0)
|
ch <- prometheus.MustNewConstMetric(c.irqFull, prometheus.CounterValue, float64(vals.Full.Total)/1000.0/1000.0)
|
||||||
default:
|
default:
|
||||||
c.logger.Debug("did not account for resource", "resource", res)
|
c.logger.Debug("did not account for resource", "resource", res)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
foundResources++
|
||||||
|
}
|
||||||
|
|
||||||
|
if foundResources == 0 {
|
||||||
|
c.logger.Debug("pressure information is unavailable, you need a Linux kernel >= 4.20 and/or CONFIG_PSI enabled for your kernel")
|
||||||
|
return ErrNoData
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -50,6 +50,8 @@ import (
|
||||||
"log/slog"
|
"log/slog"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
|
"github.com/prometheus/node_exporter/collector/utils"
|
||||||
|
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -176,7 +178,7 @@ func mappingCFStringToString(s C.CFStringRef) string {
|
||||||
buf := make([]byte, maxBufLen)
|
buf := make([]byte, maxBufLen)
|
||||||
var usedBufLen C.CFIndex
|
var usedBufLen C.CFIndex
|
||||||
_ = C.CFStringGetBytes(s, C.CFRange{0, length}, C.kCFStringEncodingUTF8, C.UInt8(0), C.false, (*C.UInt8)(&buf[0]), maxBufLen, &usedBufLen)
|
_ = C.CFStringGetBytes(s, C.CFRange{0, length}, C.kCFStringEncodingUTF8, C.UInt8(0), C.false, (*C.UInt8)(&buf[0]), maxBufLen, &usedBufLen)
|
||||||
return string(buf[:usedBufLen])
|
return utils.SafeBytesToString(buf[:usedBufLen])
|
||||||
}
|
}
|
||||||
|
|
||||||
func mappingCFNumberLongToInt(n C.CFNumberRef) int {
|
func mappingCFNumberLongToInt(n C.CFNumberRef) int {
|
||||||
|
|
|
@ -13,6 +13,11 @@
|
||||||
|
|
||||||
package utils
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
func SafeDereference[T any](s ...*T) []T {
|
func SafeDereference[T any](s ...*T) []T {
|
||||||
var resolved []T
|
var resolved []T
|
||||||
for _, v := range s {
|
for _, v := range s {
|
||||||
|
@ -25,3 +30,18 @@ func SafeDereference[T any](s ...*T) []T {
|
||||||
}
|
}
|
||||||
return resolved
|
return resolved
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SafeBytesToString takes a slice of bytes and sanitizes it for Prometheus label
|
||||||
|
// values.
|
||||||
|
// * Terminate the string at the first null byte.
|
||||||
|
// * Convert any invalid UTF-8 to "<22>".
|
||||||
|
func SafeBytesToString(b []byte) string {
|
||||||
|
var s string
|
||||||
|
zeroIndex := bytes.IndexByte(b, 0)
|
||||||
|
if zeroIndex == -1 {
|
||||||
|
s = string(b)
|
||||||
|
} else {
|
||||||
|
s = string(b[:zeroIndex])
|
||||||
|
}
|
||||||
|
return strings.ToValidUTF8(s, "<22>")
|
||||||
|
}
|
||||||
|
|
30
collector/utils/utils_test.go
Normal file
30
collector/utils/utils_test.go
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
// Copyright 2025 The Prometheus Authors
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file ewcept 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.
|
||||||
|
|
||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestSafeBytesToString(t *testing.T) {
|
||||||
|
foo := []byte("foo\x00")
|
||||||
|
if want, got := SafeBytesToString(foo), "foo"; want != got {
|
||||||
|
t.Errorf("Expected: %s, Got: %s", want, got)
|
||||||
|
}
|
||||||
|
|
||||||
|
foo = []byte{115, 97, 110, 101, 253, 190, 214}
|
||||||
|
if want, got := SafeBytesToString(foo), "sane<6E>"; want != got {
|
||||||
|
t.Errorf("Expected: %s, Got: %s", want, got)
|
||||||
|
}
|
||||||
|
}
|
|
@ -325,6 +325,7 @@ get "127.0.0.1:${port}/metrics" | grep --text -E -v "${skip_re}" > "${generated_
|
||||||
non_deterministic_metrics=$(cat << METRICS
|
non_deterministic_metrics=$(cat << METRICS
|
||||||
node_boot_time_seconds
|
node_boot_time_seconds
|
||||||
node_cpu_frequency_hertz
|
node_cpu_frequency_hertz
|
||||||
|
node_cpu_frequency_max_hertz
|
||||||
node_cpu_seconds_total
|
node_cpu_seconds_total
|
||||||
node_disk_io_time_seconds_total
|
node_disk_io_time_seconds_total
|
||||||
node_disk_read_bytes_total
|
node_disk_read_bytes_total
|
||||||
|
|
18
go.mod
18
go.mod
|
@ -1,6 +1,6 @@
|
||||||
module github.com/prometheus/node_exporter
|
module github.com/prometheus/node_exporter
|
||||||
|
|
||||||
go 1.22.0
|
go 1.23.0
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/alecthomas/kingpin/v2 v2.4.0
|
github.com/alecthomas/kingpin/v2 v2.4.0
|
||||||
|
@ -22,11 +22,11 @@ require (
|
||||||
github.com/opencontainers/selinux v1.11.1
|
github.com/opencontainers/selinux v1.11.1
|
||||||
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55
|
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55
|
||||||
github.com/prometheus-community/go-runit v0.1.0
|
github.com/prometheus-community/go-runit v0.1.0
|
||||||
github.com/prometheus/client_golang v1.20.5
|
github.com/prometheus/client_golang v1.21.1
|
||||||
github.com/prometheus/client_model v0.6.1
|
github.com/prometheus/client_model v0.6.1
|
||||||
github.com/prometheus/common v0.62.0
|
github.com/prometheus/common v0.62.0
|
||||||
github.com/prometheus/exporter-toolkit v0.14.0
|
github.com/prometheus/exporter-toolkit v0.14.0
|
||||||
github.com/prometheus/procfs v0.15.2-0.20240603130017-1754b780536b // == v0.15.1 + https://github.com/prometheus/procfs/commit/1754b780536bb81082baa913e04cc4fff4d2baea
|
github.com/prometheus/procfs v0.16.0
|
||||||
github.com/safchain/ethtool v0.5.10
|
github.com/safchain/ethtool v0.5.10
|
||||||
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0
|
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0
|
||||||
golang.org/x/sys v0.30.0
|
golang.org/x/sys v0.30.0
|
||||||
|
@ -38,9 +38,9 @@ require (
|
||||||
github.com/beorn7/perks v1.0.1 // indirect
|
github.com/beorn7/perks v1.0.1 // indirect
|
||||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||||
github.com/dennwc/ioctl v1.0.0 // indirect
|
github.com/dennwc/ioctl v1.0.0 // indirect
|
||||||
github.com/google/go-cmp v0.6.0 // indirect
|
github.com/google/go-cmp v0.7.0 // indirect
|
||||||
github.com/jpillora/backoff v1.0.0 // indirect
|
github.com/jpillora/backoff v1.0.0 // indirect
|
||||||
github.com/klauspost/compress v1.17.9 // indirect
|
github.com/klauspost/compress v1.17.11 // indirect
|
||||||
github.com/kylelemons/godebug v1.1.0 // indirect
|
github.com/kylelemons/godebug v1.1.0 // indirect
|
||||||
github.com/mdlayher/genetlink v1.3.2 // indirect
|
github.com/mdlayher/genetlink v1.3.2 // indirect
|
||||||
github.com/mdlayher/socket v0.4.1 // indirect
|
github.com/mdlayher/socket v0.4.1 // indirect
|
||||||
|
@ -51,11 +51,11 @@ require (
|
||||||
github.com/xhit/go-str2duration/v2 v2.1.0 // indirect
|
github.com/xhit/go-str2duration/v2 v2.1.0 // indirect
|
||||||
go.uber.org/atomic v1.7.0 // indirect
|
go.uber.org/atomic v1.7.0 // indirect
|
||||||
go.uber.org/multierr v1.6.0 // indirect
|
go.uber.org/multierr v1.6.0 // indirect
|
||||||
golang.org/x/crypto v0.32.0 // indirect
|
golang.org/x/crypto v0.35.0 // indirect
|
||||||
golang.org/x/net v0.33.0 // indirect
|
golang.org/x/net v0.36.0 // indirect
|
||||||
golang.org/x/oauth2 v0.24.0 // indirect
|
golang.org/x/oauth2 v0.24.0 // indirect
|
||||||
golang.org/x/sync v0.10.0 // indirect
|
golang.org/x/sync v0.11.0 // indirect
|
||||||
golang.org/x/text v0.21.0 // indirect
|
golang.org/x/text v0.22.0 // indirect
|
||||||
google.golang.org/protobuf v1.36.1 // indirect
|
google.golang.org/protobuf v1.36.1 // indirect
|
||||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
)
|
)
|
||||||
|
|
32
go.sum
32
go.sum
|
@ -24,8 +24,8 @@ github.com/ema/qdisc v1.0.0/go.mod h1:FhIc0fLYi7f+lK5maMsesDqwYojIOh3VfRs8EVd5YJ
|
||||||
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||||
github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=
|
github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=
|
||||||
github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||||
github.com/hashicorp/go-envparse v0.1.0 h1:bE++6bhIsNCPLvgDZkYqo3nA+/PFI51pkrHdmPSDFPY=
|
github.com/hashicorp/go-envparse v0.1.0 h1:bE++6bhIsNCPLvgDZkYqo3nA+/PFI51pkrHdmPSDFPY=
|
||||||
github.com/hashicorp/go-envparse v0.1.0/go.mod h1:OHheN1GoygLlAkTlXLXvAdnXdZxy8JUweQ1rAXx1xnc=
|
github.com/hashicorp/go-envparse v0.1.0/go.mod h1:OHheN1GoygLlAkTlXLXvAdnXdZxy8JUweQ1rAXx1xnc=
|
||||||
github.com/hodgesds/perf-utils v0.7.0 h1:7KlHGMuig4FRH5fNw68PV6xLmgTe7jKs9hgAcEAbioU=
|
github.com/hodgesds/perf-utils v0.7.0 h1:7KlHGMuig4FRH5fNw68PV6xLmgTe7jKs9hgAcEAbioU=
|
||||||
|
@ -39,8 +39,8 @@ github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2E
|
||||||
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
|
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
|
||||||
github.com/jsimonetti/rtnetlink/v2 v2.0.2 h1:ZKlbCujrIpp4/u3V2Ka0oxlf4BCkt6ojkvpy3nZoCBY=
|
github.com/jsimonetti/rtnetlink/v2 v2.0.2 h1:ZKlbCujrIpp4/u3V2Ka0oxlf4BCkt6ojkvpy3nZoCBY=
|
||||||
github.com/jsimonetti/rtnetlink/v2 v2.0.2/go.mod h1:7MoNYNbb3UaDHtF8udiJo/RH6VsTKP1pqKLUTVCvToE=
|
github.com/jsimonetti/rtnetlink/v2 v2.0.2/go.mod h1:7MoNYNbb3UaDHtF8udiJo/RH6VsTKP1pqKLUTVCvToE=
|
||||||
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
|
github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc=
|
||||||
github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
|
github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0=
|
||||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||||
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||||
|
@ -75,16 +75,16 @@ github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt
|
||||||
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
|
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
|
||||||
github.com/prometheus-community/go-runit v0.1.0 h1:uTWEj/Fn2RoLdfg/etSqwzgYNOYPrARx1BHUN052tGA=
|
github.com/prometheus-community/go-runit v0.1.0 h1:uTWEj/Fn2RoLdfg/etSqwzgYNOYPrARx1BHUN052tGA=
|
||||||
github.com/prometheus-community/go-runit v0.1.0/go.mod h1:AvJ9Jo3gAFu2lbM4+qfjdpq30FfiLDJZKbQ015u08IQ=
|
github.com/prometheus-community/go-runit v0.1.0/go.mod h1:AvJ9Jo3gAFu2lbM4+qfjdpq30FfiLDJZKbQ015u08IQ=
|
||||||
github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y=
|
github.com/prometheus/client_golang v1.21.1 h1:DOvXXTqVzvkIewV/CDPFdejpMCGeMcbGCQ8YOmu+Ibk=
|
||||||
github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
|
github.com/prometheus/client_golang v1.21.1/go.mod h1:U9NM32ykUErtVBxdvD3zfi+EuFkkaBvMb09mIfe0Zgg=
|
||||||
github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
|
github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
|
||||||
github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
|
github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
|
||||||
github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io=
|
github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io=
|
||||||
github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I=
|
github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I=
|
||||||
github.com/prometheus/exporter-toolkit v0.14.0 h1:NMlswfibpcZZ+H0sZBiTjrA3/aBFHkNZqE+iCj5EmRg=
|
github.com/prometheus/exporter-toolkit v0.14.0 h1:NMlswfibpcZZ+H0sZBiTjrA3/aBFHkNZqE+iCj5EmRg=
|
||||||
github.com/prometheus/exporter-toolkit v0.14.0/go.mod h1:Gu5LnVvt7Nr/oqTBUC23WILZepW0nffNo10XdhQcwWA=
|
github.com/prometheus/exporter-toolkit v0.14.0/go.mod h1:Gu5LnVvt7Nr/oqTBUC23WILZepW0nffNo10XdhQcwWA=
|
||||||
github.com/prometheus/procfs v0.15.2-0.20240603130017-1754b780536b h1:4EJkx3vycI+n5JY5ht+bnSUGamkmmXkpcNeO/OBT/0A=
|
github.com/prometheus/procfs v0.16.0 h1:xh6oHhKwnOJKMYiYBDWmkHqQPyiY40sny36Cmx2bbsM=
|
||||||
github.com/prometheus/procfs v0.15.2-0.20240603130017-1754b780536b/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
|
github.com/prometheus/procfs v0.16.0/go.mod h1:8veyXUu3nGP7oaCxhX6yeaM5u4stL2FeMXnCqhDthZg=
|
||||||
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
|
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
|
||||||
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
|
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
|
||||||
github.com/safchain/ethtool v0.5.10 h1:Im294gZtuf4pSGJRAOGKaASNi3wMeFaGaWuSaomedpc=
|
github.com/safchain/ethtool v0.5.10 h1:Im294gZtuf4pSGJRAOGKaASNi3wMeFaGaWuSaomedpc=
|
||||||
|
@ -102,23 +102,23 @@ go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
|
||||||
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||||
go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
|
go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
|
||||||
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
|
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
|
||||||
golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
|
golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
|
||||||
golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
|
golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
|
||||||
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk=
|
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk=
|
||||||
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY=
|
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY=
|
||||||
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
|
golang.org/x/net v0.36.0 h1:vWF2fRbw4qslQsQzgFqZff+BItCvGFQqKzKIzx1rmoA=
|
||||||
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
|
golang.org/x/net v0.36.0/go.mod h1:bFmbeoIPfrw4sMHNhb4J9f6+tPziuGjq7Jk/38fxi1I=
|
||||||
golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE=
|
golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE=
|
||||||
golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
||||||
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
|
golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
|
||||||
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||||
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20211031064116-611d5d643895/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211031064116-611d5d643895/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
||||||
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
|
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
|
||||||
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
|
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
|
||||||
google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk=
|
google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk=
|
||||||
google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
|
Loading…
Reference in a new issue