diff --git a/internal/metrics/metrics.go b/internal/metrics/metrics.go index 4964f2462f..ca263b4843 100644 --- a/internal/metrics/metrics.go +++ b/internal/metrics/metrics.go @@ -17,7 +17,11 @@ package metrics import ( + "fmt" "net/http" + "os" + "strconv" + // nolint:gosec _ "net/http/pprof" @@ -28,6 +32,9 @@ import ( ) const ( + DefaultListenPort = "9091" + ListenPortEnvKey = "METRICS_PORT" + milvusNamespace = "milvus" AbandonLabel = "abandon" @@ -78,8 +85,20 @@ func ServeHTTP(r *prometheus.Registry) { http.Handle("/metrics", promhttp.HandlerFor(r, promhttp.HandlerOpts{})) http.Handle("/metrics_default", promhttp.Handler()) go func() { - if err := http.ListenAndServe(":9091", nil); err != nil { + bindAddr := getMetricsAddr() + log.Debug("metrics listen", zap.Any("addr", bindAddr)) + if err := http.ListenAndServe(bindAddr, nil); err != nil { log.Error("handle metrics failed", zap.Error(err)) } }() } + +func getMetricsAddr() string { + port := os.Getenv(ListenPortEnvKey) + _, err := strconv.Atoi(port) + if err != nil { + return fmt.Sprintf(":%s", DefaultListenPort) + } + + return fmt.Sprintf(":%s", port) +} diff --git a/internal/metrics/metrics_test.go b/internal/metrics/metrics_test.go index c3e9652841..27ee5513a8 100644 --- a/internal/metrics/metrics_test.go +++ b/internal/metrics/metrics_test.go @@ -17,9 +17,11 @@ package metrics import ( + "os" "testing" "github.com/prometheus/client_golang/prometheus" + "github.com/stretchr/testify/assert" ) func TestRegisterMetrics(t *testing.T) { @@ -33,4 +35,12 @@ func TestRegisterMetrics(t *testing.T) { RegisterProxy(r) RegisterQueryNode(r) RegisterQueryCoord(r) + ServeHTTP(r) +} + +func TestGetMetricsAddr(t *testing.T) { + assert.Equal(t, getMetricsAddr(), ":"+DefaultListenPort) + testPort := "9092" + os.Setenv(ListenPortEnvKey, testPort) + assert.Equal(t, getMetricsAddr(), ":"+testPort) }