Skip to content

Commit 40ce993

Browse files
authored
Merge pull request #1816 from liiling/master
Fix node_scrape_collector_success behaviour
2 parents 9fab638 + bf154d4 commit 40ce993

4 files changed

Lines changed: 43 additions & 8 deletions

File tree

collector/conntrack_linux.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,12 @@
1616
package collector
1717

1818
import (
19+
"errors"
20+
"fmt"
21+
"os"
22+
1923
"github.com/go-kit/kit/log"
24+
"github.com/go-kit/kit/log/level"
2025
"github.com/prometheus/client_golang/prometheus"
2126
)
2227

@@ -50,18 +55,25 @@ func NewConntrackCollector(logger log.Logger) (Collector, error) {
5055
func (c *conntrackCollector) Update(ch chan<- prometheus.Metric) error {
5156
value, err := readUintFromFile(procFilePath("sys/net/netfilter/nf_conntrack_count"))
5257
if err != nil {
53-
// Conntrack probably not loaded into the kernel.
54-
return nil
58+
return c.handleErr(err)
5559
}
5660
ch <- prometheus.MustNewConstMetric(
5761
c.current, prometheus.GaugeValue, float64(value))
5862

5963
value, err = readUintFromFile(procFilePath("sys/net/netfilter/nf_conntrack_max"))
6064
if err != nil {
61-
return nil
65+
return c.handleErr(err)
6266
}
6367
ch <- prometheus.MustNewConstMetric(
6468
c.limit, prometheus.GaugeValue, float64(value))
6569

6670
return nil
6771
}
72+
73+
func (c *conntrackCollector) handleErr(err error) error {
74+
if errors.Is(err, os.ErrNotExist) {
75+
level.Debug(c.logger).Log("msg", "conntrack probably not loaded")
76+
return ErrNoData
77+
}
78+
return fmt.Errorf("failed to retrieve conntrack stats: %w", err)
79+
}

collector/pressure_linux.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616
package collector
1717

1818
import (
19+
"errors"
1920
"fmt"
21+
"os"
2022

2123
"github.com/go-kit/kit/log"
2224
"github.com/go-kit/kit/log/level"
@@ -88,8 +90,11 @@ func (c *pressureStatsCollector) Update(ch chan<- prometheus.Metric) error {
8890
level.Debug(c.logger).Log("msg", "collecting statistics for resource", "resource", res)
8991
vals, err := c.fs.PSIStatsForResource(res)
9092
if err != nil {
91-
level.Debug(c.logger).Log("msg", "pressure information is unavailable, you need a Linux kernel >= 4.20 and/or CONFIG_PSI enabled for your kernel")
92-
return nil
93+
if errors.Is(err, os.ErrNotExist) {
94+
level.Debug(c.logger).Log("msg", "pressure information is unavailable, you need a Linux kernel >= 4.20 and/or CONFIG_PSI enabled for your kernel")
95+
return ErrNoData
96+
}
97+
return fmt.Errorf("failed to retrieve pressure stats: %w", err)
9398
}
9499
switch res {
95100
case "cpu":

collector/rapl_linux.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,20 @@
1616
package collector
1717

1818
import (
19+
"errors"
20+
"fmt"
21+
"os"
1922
"strconv"
2023

2124
"github.com/go-kit/kit/log"
25+
"github.com/go-kit/kit/log/level"
2226
"github.com/prometheus/client_golang/prometheus"
2327
"github.com/prometheus/procfs/sysfs"
2428
)
2529

2630
type raplCollector struct {
27-
fs sysfs.FS
31+
fs sysfs.FS
32+
logger log.Logger
2833
}
2934

3035
func init() {
@@ -40,7 +45,8 @@ func NewRaplCollector(logger log.Logger) (Collector, error) {
4045
}
4146

4247
collector := raplCollector{
43-
fs: fs,
48+
fs: fs,
49+
logger: logger,
4450
}
4551
return &collector, nil
4652
}
@@ -50,7 +56,11 @@ func (c *raplCollector) Update(ch chan<- prometheus.Metric) error {
5056
// nil zones are fine when platform doesn't have powercap files present.
5157
zones, err := sysfs.GetRaplZones(c.fs)
5258
if err != nil {
53-
return nil
59+
if errors.Is(err, os.ErrNotExist) {
60+
level.Debug(c.logger).Log("msg", "Platform doesn't have powercap files present", "err", err)
61+
return ErrNoData
62+
}
63+
return fmt.Errorf("failed to retrieve rapl stats: %w", err)
5464
}
5565

5666
for _, rz := range zones {

collector/zfs.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,14 @@ func NewZFSCollector(logger log.Logger) (Collector, error) {
6767
}
6868

6969
func (c *zfsCollector) Update(ch chan<- prometheus.Metric) error {
70+
71+
if _, err := c.openProcFile(c.linuxProcpathBase); err != nil {
72+
if err == errZFSNotAvailable {
73+
level.Debug(c.logger).Log("err", err)
74+
return ErrNoData
75+
}
76+
}
77+
7078
for subsystem := range c.linuxPathMap {
7179
if err := c.updateZfsStats(subsystem, ch); err != nil {
7280
if err == errZFSNotAvailable {

0 commit comments

Comments
 (0)