From 7e4883db8e91dc2409f017ddab2a1cc0deab6239 Mon Sep 17 00:00:00 2001 From: Vivek Revankar Date: Tue, 3 Sep 2024 22:28:15 -0700 Subject: [PATCH 1/5] add unix socket support for prometheus --- metrics/metrics.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/metrics/metrics.go b/metrics/metrics.go index c754360..84fcd03 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -21,6 +21,8 @@ import ( "net/http" "os" "time" + "strings" + "net" "github.com/golang/glog" "github.com/prometheus/client_golang/prometheus" @@ -87,7 +89,24 @@ func InitPrometheus(prometheusHost, prometheusPort, prometheusEntry string) { handler := promhttp.HandlerFor(promReg, promhttp.HandlerOpts{EnableOpenMetrics: true}) http.Handle("/"+prometheusEntry, handler) go func() { - glog.Infof("Starting Prometheus on %v:%v, entry point is /%v", prometheusHost, prometheusPort, prometheusEntry) + + if strings.HasPrefix(prometheusHost, "unix:") { + socketPath := prometheusHost[5:] + glog.Infof("Starting Prometheus on Unix socket %v, entry point is /%v", socketPath, prometheusEntry) + os.Remove(socketPath) // allow failure + unixListener, err := net.Listen("unix", socketPath) + if err != nil { + glog.Errorf("Error starting Prometheus on socket %v: %v", socketPath, err) + os.Exit(1) + } + if err := http.Serve(unixListener, nil); err != nil { + glog.Errorf("Error starting Prometheus at socket %v: %v", socketPath, err) + os.Exit(1) + } + return + } + + glog.Infof("Starting Prometheus on IP port %v:%v, entry point is /%v", prometheusHost, prometheusPort, prometheusEntry) if err := http.ListenAndServe(prometheusHost+":"+prometheusPort, nil); err != nil { glog.Errorf("Error starting Prometheus at port %v:%v: %v", prometheusHost, prometheusPort, err) os.Exit(1) From 194abc817de6786c9b4aae565d02451e39d917a6 Mon Sep 17 00:00:00 2001 From: Vivek Revankar Date: Wed, 30 Oct 2024 18:42:23 -0700 Subject: [PATCH 2/5] address comment --- metrics/metrics.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metrics/metrics.go b/metrics/metrics.go index 84fcd03..9df9d91 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -93,7 +93,7 @@ func InitPrometheus(prometheusHost, prometheusPort, prometheusEntry string) { if strings.HasPrefix(prometheusHost, "unix:") { socketPath := prometheusHost[5:] glog.Infof("Starting Prometheus on Unix socket %v, entry point is /%v", socketPath, prometheusEntry) - os.Remove(socketPath) // allow failure + _ := os.Remove(socketPath) // allow failure unixListener, err := net.Listen("unix", socketPath) if err != nil { glog.Errorf("Error starting Prometheus on socket %v: %v", socketPath, err) From aeb234fbbf478c69b66d4df4416294cb54c94542 Mon Sep 17 00:00:00 2001 From: Vivek Revankar Date: Wed, 30 Oct 2024 19:07:16 -0700 Subject: [PATCH 3/5] refactor --- metrics/metrics.go | 45 +++++++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/metrics/metrics.go b/metrics/metrics.go index 9df9d91..c977dfa 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -91,29 +91,38 @@ func InitPrometheus(prometheusHost, prometheusPort, prometheusEntry string) { go func() { if strings.HasPrefix(prometheusHost, "unix:") { - socketPath := prometheusHost[5:] + socketPath := prometheusHost[5:] // trim the "unix:" prefix glog.Infof("Starting Prometheus on Unix socket %v, entry point is /%v", socketPath, prometheusEntry) - _ := os.Remove(socketPath) // allow failure - unixListener, err := net.Listen("unix", socketPath) - if err != nil { - glog.Errorf("Error starting Prometheus on socket %v: %v", socketPath, err) - os.Exit(1) - } - if err := http.Serve(unixListener, nil); err != nil { - glog.Errorf("Error starting Prometheus at socket %v: %v", socketPath, err) - os.Exit(1) - } - return - } - - glog.Infof("Starting Prometheus on IP port %v:%v, entry point is /%v", prometheusHost, prometheusPort, prometheusEntry) - if err := http.ListenAndServe(prometheusHost+":"+prometheusPort, nil); err != nil { - glog.Errorf("Error starting Prometheus at port %v:%v: %v", prometheusHost, prometheusPort, err) - os.Exit(1) + serveOnUnixSocket(socketPath) + } else { + ipPort := prometheusHost+":"+prometheusPort + glog.Infof("Starting Prometheus on IP port %v:%v, entry point is /%v", ipPort, prometheusEntry) + serveOnIpPort(ipPort) } + }() } +func serveOnUnixSocket(socketPath string) { + _ = os.Remove(socketPath) // allow failure + unixListener, err := net.Listen("unix", socketPath) + if err != nil { + glog.Errorf("Error starting Prometheus on socket %v: %v", socketPath, err) + os.Exit(1) + } + if err := http.Serve(unixListener, nil); err != nil { + glog.Errorf("Error starting Prometheus at socket %v: %v", socketPath, err) + os.Exit(1) + } +} + +func serveOnIpPort(ipPort string) { + if err := http.ListenAndServe(ipPort, nil); err != nil { + glog.Errorf("Error starting Prometheus at ip port %v: %v", ipPort, err) + os.Exit(1) + } +} + const ( RecordEntryTypeStart = iota RecordEntryTypeSend = iota From c3ae83da3374e756497e1d059f224845072a9eaa Mon Sep 17 00:00:00 2001 From: Vivek Revankar Date: Wed, 30 Oct 2024 19:08:58 -0700 Subject: [PATCH 4/5] nit --- metrics/metrics.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metrics/metrics.go b/metrics/metrics.go index c977dfa..05ffd5e 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -118,7 +118,7 @@ func serveOnUnixSocket(socketPath string) { func serveOnIpPort(ipPort string) { if err := http.ListenAndServe(ipPort, nil); err != nil { - glog.Errorf("Error starting Prometheus at ip port %v: %v", ipPort, err) + glog.Errorf("Error starting Prometheus at IP port %v: %v", ipPort, err) os.Exit(1) } } From a6390a14330a76bab8e31ea1944c6287d7c666ff Mon Sep 17 00:00:00 2001 From: Vivek Date: Mon, 4 Nov 2024 13:02:59 -0800 Subject: [PATCH 5/5] fix log string --- metrics/metrics.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metrics/metrics.go b/metrics/metrics.go index 05ffd5e..e70c768 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -96,7 +96,7 @@ func InitPrometheus(prometheusHost, prometheusPort, prometheusEntry string) { serveOnUnixSocket(socketPath) } else { ipPort := prometheusHost+":"+prometheusPort - glog.Infof("Starting Prometheus on IP port %v:%v, entry point is /%v", ipPort, prometheusEntry) + glog.Infof("Starting Prometheus on IP port %v, entry point is /%v", ipPort, prometheusEntry) serveOnIpPort(ipPort) }