func(h *handler)innerHandler(filters ...string)(http.Handler,error){
nc, err := collector.NewNodeCollector(h.logger, filters...)if err !=nil{returnnil, fmt.Errorf("couldn't create collector: %s", err)}// Only log the creation of an unfiltered handler, which should happen// only once upon startup.iflen(filters)==0{
level.Info(h.logger).Log("msg","Enabled collectors")
collectors :=[]string{}for n :=range nc.Collectors {
collectors =append(collectors, n)}
sort.Strings(collectors)for_, c :=range collectors {
level.Info(h.logger).Log("collector", c)}}
r := prometheus.NewRegistry()
r.MustRegister(version.NewCollector("node_exporter"))if err := r.Register(nc); err !=nil{returnnil, fmt.Errorf("couldn't register node collector: %s", err)}
handler := promhttp.HandlerFor(
prometheus.Gatherers{h.exporterMetricsRegistry, r},
promhttp.HandlerOpts{
ErrorLog: stdlog.New(log.NewStdlibAdapter(level.Error(h.logger)),"",0),
ErrorHandling: promhttp.ContinueOnError,
MaxRequestsInFlight: h.maxRequests,
Registry: h.exporterMetricsRegistry,},)if h.includeExporterMetrics {// Note that we have to use h.exporterMetricsRegistry here to// use the same promhttp metrics for all expositions.
handler = promhttp.InstrumentMetricHandler(
h.exporterMetricsRegistry, handler,)}return handler,nil}