mirror of
https://github.com/prometheus-community/windows_exporter.git
synced 2026-02-25 22:26:37 +00:00
Ability to disable debug endpoints (#1448)
This commit is contained in:
26
exporter.go
26
exporter.go
@@ -11,7 +11,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
_ "net/http/pprof"
|
"net/http/pprof"
|
||||||
"os"
|
"os"
|
||||||
"os/user"
|
"os/user"
|
||||||
"runtime"
|
"runtime"
|
||||||
@@ -80,6 +80,10 @@ func main() {
|
|||||||
"scrape.timeout-margin",
|
"scrape.timeout-margin",
|
||||||
"Seconds to subtract from the timeout allowed by the client. Tune to allow for overhead or high loads.",
|
"Seconds to subtract from the timeout allowed by the client. Tune to allow for overhead or high loads.",
|
||||||
).Default("0.5").Float64()
|
).Default("0.5").Float64()
|
||||||
|
debugEnabled = app.Flag(
|
||||||
|
"debug.enabled",
|
||||||
|
"If true, windows_exporter will expose debug endpoints under /debug/pprof.",
|
||||||
|
).Default("false").Bool()
|
||||||
)
|
)
|
||||||
|
|
||||||
winlogConfig := &winlog.Config{}
|
winlogConfig := &winlog.Config{}
|
||||||
@@ -174,15 +178,16 @@ func main() {
|
|||||||
|
|
||||||
_ = level.Info(logger).Log("msg", fmt.Sprintf("Enabled collectors: %v", strings.Join(enabledCollectorList, ", ")))
|
_ = level.Info(logger).Log("msg", fmt.Sprintf("Enabled collectors: %v", strings.Join(enabledCollectorList, ", ")))
|
||||||
|
|
||||||
http.HandleFunc(*metricsPath, withConcurrencyLimit(*maxRequests, collectors.BuildServeHTTP(*disableExporterMetrics, *timeoutMargin)))
|
mux := http.NewServeMux()
|
||||||
http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
|
mux.HandleFunc(*metricsPath, withConcurrencyLimit(*maxRequests, collectors.BuildServeHTTP(*disableExporterMetrics, *timeoutMargin)))
|
||||||
|
mux.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
|
||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
_, err := fmt.Fprintln(w, `{"status":"ok"}`)
|
_, err := fmt.Fprintln(w, `{"status":"ok"}`)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = level.Debug(logger).Log("Failed to write to stream", "err", err)
|
_ = level.Debug(logger).Log("Failed to write to stream", "err", err)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
http.HandleFunc("/version", func(w http.ResponseWriter, r *http.Request) {
|
mux.HandleFunc("/version", func(w http.ResponseWriter, r *http.Request) {
|
||||||
// we can't use "version" directly as it is a package, and not an object that
|
// we can't use "version" directly as it is a package, and not an object that
|
||||||
// can be serialized.
|
// can be serialized.
|
||||||
err := json.NewEncoder(w).Encode(prometheusVersion{
|
err := json.NewEncoder(w).Encode(prometheusVersion{
|
||||||
@@ -197,6 +202,15 @@ func main() {
|
|||||||
http.Error(w, fmt.Sprintf("error encoding JSON: %s", err), http.StatusInternalServerError)
|
http.Error(w, fmt.Sprintf("error encoding JSON: %s", err), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if *debugEnabled {
|
||||||
|
mux.HandleFunc("/debug/pprof/", pprof.Index)
|
||||||
|
mux.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
|
||||||
|
mux.HandleFunc("/debug/pprof/profile", pprof.Profile)
|
||||||
|
mux.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
|
||||||
|
mux.HandleFunc("/debug/pprof/trace", pprof.Trace)
|
||||||
|
}
|
||||||
|
|
||||||
if *metricsPath != "/" && *metricsPath != "" {
|
if *metricsPath != "/" && *metricsPath != "" {
|
||||||
landingConfig := web.LandingConfig{
|
landingConfig := web.LandingConfig{
|
||||||
Name: "Windows Exporter",
|
Name: "Windows Exporter",
|
||||||
@@ -222,7 +236,7 @@ func main() {
|
|||||||
_ = level.Error(logger).Log("msg", "failed to generate landing page", "err", err)
|
_ = level.Error(logger).Log("msg", "failed to generate landing page", "err", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
http.Handle("/", landingPage)
|
mux.Handle("/", landingPage)
|
||||||
}
|
}
|
||||||
|
|
||||||
_ = level.Info(logger).Log("msg", "Starting windows_exporter", "version", version.Info())
|
_ = level.Info(logger).Log("msg", "Starting windows_exporter", "version", version.Info())
|
||||||
@@ -230,7 +244,7 @@ func main() {
|
|||||||
_ = level.Debug(logger).Log("msg", "Go MAXPROCS", "procs", runtime.GOMAXPROCS(0))
|
_ = level.Debug(logger).Log("msg", "Go MAXPROCS", "procs", runtime.GOMAXPROCS(0))
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
server := &http.Server{}
|
server := &http.Server{Handler: mux}
|
||||||
if err := web.ListenAndServe(server, webConfig, logger); err != nil {
|
if err := web.ListenAndServe(server, webConfig, logger); err != nil {
|
||||||
_ = level.Error(logger).Log("msg", "cannot start windows_exporter", "err", err)
|
_ = level.Error(logger).Log("msg", "cannot start windows_exporter", "err", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
|
|||||||
Reference in New Issue
Block a user