diff --git a/go.mod b/go.mod index b1ce522..c1896b2 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/prometheus/client_golang v1.15.0 github.com/prometheus/node_exporter v1.5.1-0.20230407113533-b87c6a8826d4 github.com/sirupsen/logrus v1.9.0 - gopkg.in/alecthomas/kingpin.v2 v2.2.6 + github.com/alecthomas/kingpin/v2 v2.3.2 ) require ( diff --git a/manifest.json b/manifest.json index 0bcb23a..14cdc7d 100644 --- a/manifest.json +++ b/manifest.json @@ -25,7 +25,11 @@ }, "container": { "privileged": false, - "volumes": [], + "volumes": [ + "/run/systemd:/run/systemd:rw", + "/run/udev/data:/run/udev/data:ro", + "/sys:/sys:ro" + ], "tmpfs": [] }, "cli": { diff --git a/node_collector.go b/node_collector.go index 233dad8..0d16191 100644 --- a/node_collector.go +++ b/node_collector.go @@ -4,11 +4,11 @@ import ( "fmt" "sync" + promflag "github.com/alecthomas/kingpin/v2" promlog "github.com/go-kit/log" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/node_exporter/collector" "github.com/sirupsen/logrus" - promflag "gopkg.in/alecthomas/kingpin.v2" ) type PromLogAdapter struct { @@ -75,8 +75,10 @@ type CollectorFactory func(logger promlog.Logger) (collector.Collector, error) func NewNodeCollector(log *logrus.Logger) (*NodeCollector, error) { promlogger := &PromLogAdapter{log} - nc := &NodeCollector{} - nc.Collectors = map[string]Collector{} + nc := &NodeCollector{ + Collectors: map[string]Collector{}, + log: log, + } for _, c := range []struct { cf CollectorFactory @@ -90,14 +92,15 @@ func NewNodeCollector(log *logrus.Logger) (*NodeCollector, error) { {collector.NewHwMonCollector, "hwmon"}, {collector.NewLoadavgCollector, "loadavg"}, {collector.NewMeminfoCollector, "meminfo"}, - {collector.NewNetClassCollector, "netclass"}, + // TODO: netclass seems to fail: + // level=error msg="netclass failed: could not get net class info: failed to read file \"/sys/class/net/Ethernet0/carrier\": invalid argument" + //{collector.NewNetClassCollector, "netclass"}, {collector.NewNetDevCollector, "netdev"}, {collector.NewNetStatCollector, "netstat"}, {collector.NewStatCollector, "stat"}, {collector.NewTimeCollector, "time"}, {collector.NewvmStatCollector, "vmstat"}, {collector.NewSystemdCollector, "systemd"}, - {collector.NewNtpCollector, "ntp"}, } { cc, err := c.cf(promlogger) if err != nil { @@ -108,9 +111,12 @@ func NewNodeCollector(log *logrus.Logger) (*NodeCollector, error) { return nc, nil } -func InitNodeFlags() { - // Again, since node_exporter is not a library as such this is a pretty ugly +func InitNodeFlags() error { + // Since node_exporter is not a library as such this is a pretty ugly // way to set it up as a library. I expect this to break from time to time - // when the node library is upgrade. - promflag.CommandLine.Parse([]string{}) + // when the node library is upgraded. + _, err := promflag.CommandLine.Parse([]string{ + "--path.procfs", "/proc", + }) + return err } diff --git a/sonic_exporter.go b/sonic_exporter.go index e96757f..72c46af 100644 --- a/sonic_exporter.go +++ b/sonic_exporter.go @@ -204,7 +204,9 @@ func main() { } defer ln.Close() - InitNodeFlags() + if err := InitNodeFlags(); err != nil { + log.Fatalf("Failed to initialize node collector flags: %v", err) + } registry := prometheus.NewRegistry() registry.MustRegister(promcollectors.NewProcessCollector(promcollectors.ProcessCollectorOpts{}))