diff --git a/go.mod b/go.mod index df4d250ee7..e4850e70db 100644 --- a/go.mod +++ b/go.mod @@ -31,6 +31,8 @@ require ( howett.net/plist v1.0.1 ) +replace github.com/prometheus/exporter-toolkit => /Users/nicolastakashi/workspace/github.com/nicolastakashi/prometheus/exporter-toolkit + require ( cyphar.com/go-pathrs v0.2.2 // indirect github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b // indirect diff --git a/go.sum b/go.sum index 0e3f769cca..ee019edade 100644 --- a/go.sum +++ b/go.sum @@ -82,8 +82,6 @@ github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNw github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= github.com/prometheus/common v0.67.5 h1:pIgK94WWlQt1WLwAC5j2ynLaBRDiinoAb86HZHTUGI4= github.com/prometheus/common v0.67.5/go.mod h1:SjE/0MzDEEAyrdr5Gqc6G+sXI67maCxzaT3A2+HqjUw= -github.com/prometheus/exporter-toolkit v0.16.0 h1:xT/j7L2XKF+VJd6B4fpUw6xWabHrSmsUf6mYmFqyu0s= -github.com/prometheus/exporter-toolkit v0.16.0/go.mod h1:d1EL8Z9674xQe/iWhwP2wDyCEoBPbXVeqDbqAUsgJWY= github.com/prometheus/procfs v0.20.1 h1:XwbrGOIplXW/AU3YhIhLODXMJYyC1isLFfYCsTEycfc= github.com/prometheus/procfs v0.20.1/go.mod h1:o9EMBZGRyvDrSPH1RqdxhojkuXstoe4UlK79eF5TGGo= github.com/safchain/ethtool v0.7.0 h1:rlJzfDetsVvT61uz8x1YIcFn12akMfuPulHtZjtb7Is= diff --git a/node_exporter.go b/node_exporter.go index 2c0e12ccc1..00ad19934b 100644 --- a/node_exporter.go +++ b/node_exporter.go @@ -24,17 +24,12 @@ import ( "slices" "sort" - "github.com/prometheus/common/promslog" - "github.com/prometheus/common/promslog/flag" - "github.com/alecthomas/kingpin/v2" "github.com/prometheus/client_golang/prometheus" promcollectors "github.com/prometheus/client_golang/prometheus/collectors" versioncollector "github.com/prometheus/client_golang/prometheus/collectors/version" "github.com/prometheus/client_golang/prometheus/promhttp" - "github.com/prometheus/common/version" - "github.com/prometheus/exporter-toolkit/web" - "github.com/prometheus/exporter-toolkit/web/kingpinflag" + "github.com/prometheus/exporter-toolkit/bootstrap" "github.com/prometheus/node_exporter/collector" ) @@ -181,18 +176,6 @@ func (h *handler) innerHandler(filters ...string) (http.Handler, error) { func main() { var ( - metricsPath = kingpin.Flag( - "web.telemetry-path", - "Path under which to expose metrics.", - ).Default("/metrics").String() - disableExporterMetrics = kingpin.Flag( - "web.disable-exporter-metrics", - "Exclude metrics about the exporter itself (promhttp_*, process_*, go_*).", - ).Bool() - maxRequests = kingpin.Flag( - "web.max-requests", - "Maximum number of parallel scrape requests. Use 0 to disable.", - ).Default("40").Int() disableDefaultCollectors = kingpin.Flag( "collector.disable-defaults", "Set all collectors to disabled by default.", @@ -200,52 +183,29 @@ func main() { maxProcs = kingpin.Flag( "runtime.gomaxprocs", "The target number of CPUs Go will run on (GOMAXPROCS)", ).Envar("GOMAXPROCS").Default("1").Int() - toolkitFlags = kingpinflag.AddFlags(kingpin.CommandLine, ":9100") ) - promslogConfig := &promslog.Config{} - flag.AddFlags(kingpin.CommandLine, promslogConfig) - kingpin.Version(version.Print("node_exporter")) kingpin.CommandLine.UsageWriter(os.Stdout) - kingpin.HelpFlag.Short('h') - kingpin.Parse() - logger := promslog.New(promslogConfig) - - if *disableDefaultCollectors { - collector.DisableDefaultCollectors() - } - logger.Info("Starting node_exporter", "version", version.Info()) - logger.Info("Build context", "build_context", version.BuildContext()) - if user, err := user.Current(); err == nil && user.Uid == "0" { - logger.Warn("Node Exporter is running as root user. This exporter is designed to run as unprivileged user, root is not required.") - } - runtime.GOMAXPROCS(*maxProcs) - logger.Debug("Go MAXPROCS", "procs", runtime.GOMAXPROCS(0)) - - http.Handle(*metricsPath, newHandler(!*disableExporterMetrics, *maxRequests, logger)) - if *metricsPath != "/" { - landingConfig := web.LandingConfig{ - Name: "Node Exporter", - Description: "Prometheus Node Exporter", - Version: version.Info(), - Links: []web.LandingLinks{ - { - Address: *metricsPath, - Text: "Metrics", - }, - }, - } - landingPage, err := web.NewLandingPage(landingConfig) - if err != nil { - logger.Error(err.Error()) - os.Exit(1) - } - http.Handle("/", landingPage) - } - - server := &http.Server{} - if err := web.ListenAndServe(server, toolkitFlags, logger); err != nil { - logger.Error(err.Error()) + runner := bootstrap.New(bootstrap.Config{ + App: kingpin.CommandLine, + Name: "node_exporter", + Description: "Prometheus Node Exporter", + DefaultAddress: ":9100", + MetricsHandlerFactory: func(b *bootstrap.Bootstrap) (http.Handler, error) { + if *disableDefaultCollectors { + collector.DisableDefaultCollectors() + } + if user, err := user.Current(); err == nil && user.Uid == "0" { + b.Logger.Warn("Node Exporter is running as root user. This exporter is designed to run as unprivileged user, root is not required.") + } + runtime.GOMAXPROCS(*maxProcs) + b.Logger.Debug("Go MAXPROCS", "procs", runtime.GOMAXPROCS(0)) + return newHandler(!b.DisableExporterMetrics, b.MaxRequests, b.Logger), nil + }, + }) + + if err := runner.Run(); err != nil { + fmt.Fprintln(os.Stderr, err) os.Exit(1) } }