diff --git a/node_exporter.go b/node_exporter.go index 0475a6aa..550d7b13 100644 --- a/node_exporter.go +++ b/node_exporter.go @@ -36,12 +36,14 @@ type handler struct { // the exporter itself. exporterMetricsRegistry *prometheus.Registry includeExporterMetrics bool + maxRequests int } -func newHandler(includeExporterMetrics bool) *handler { +func newHandler(includeExporterMetrics bool, maxRequests int) *handler { h := &handler{ exporterMetricsRegistry: prometheus.NewRegistry(), includeExporterMetrics: includeExporterMetrics, + maxRequests: maxRequests, } if h.includeExporterMetrics { h.exporterMetricsRegistry.MustRegister( @@ -111,8 +113,9 @@ func (h *handler) innerHandler(filters ...string) (http.Handler, error) { handler := promhttp.HandlerFor( prometheus.Gatherers{h.exporterMetricsRegistry, r}, promhttp.HandlerOpts{ - ErrorLog: log.NewErrorLogger(), - ErrorHandling: promhttp.ContinueOnError, + ErrorLog: log.NewErrorLogger(), + ErrorHandling: promhttp.ContinueOnError, + MaxRequestsInFlight: h.maxRequests, }, ) if h.includeExporterMetrics { @@ -139,6 +142,10 @@ func main() { "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() ) log.AddFlags(kingpin.CommandLine) @@ -149,7 +156,7 @@ func main() { log.Infoln("Starting node_exporter", version.Info()) log.Infoln("Build context", version.BuildContext()) - http.Handle(*metricsPath, newHandler(!*disableExporterMetrics)) + http.Handle(*metricsPath, newHandler(!*disableExporterMetrics, *maxRequests)) http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte(` Node Exporter