From b3356a2edabfeffd11d420df1dac6c5c745279ed Mon Sep 17 00:00:00 2001 From: Nicolas Lamirault Date: Fri, 6 Dec 2024 17:12:10 +0100 Subject: [PATCH] feat: New Prometheus metric: build_info (#3591) * new Prometheus metrics build_info Signed-off-by: Nicolas Lamirault * fix: gofmt Signed-off-by: Nicolas Lamirault --------- Signed-off-by: Nicolas Lamirault --- controller/metrics/metrics.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/controller/metrics/metrics.go b/controller/metrics/metrics.go index 9691b73a40..d06fbbfe37 100644 --- a/controller/metrics/metrics.go +++ b/controller/metrics/metrics.go @@ -2,6 +2,7 @@ package metrics import ( "net/http" + "runtime" "time" "github.com/argoproj/argo-rollouts/utils/defaults" @@ -16,6 +17,7 @@ import ( "github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1" rolloutlister "github.com/argoproj/argo-rollouts/pkg/client/listers/rollouts/v1alpha1" "github.com/argoproj/argo-rollouts/utils/log" + "github.com/argoproj/argo-rollouts/utils/version" ) type MetricsServer struct { @@ -39,6 +41,16 @@ const ( MetricsPath = "/metrics" ) +var ( + buildInfo = prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Name: "build_info", + Help: "A metric with a constant '1' value labeled by version from which Argo-Rollouts was built.", + }, + []string{"version", "goversion", "goarch", "commit"}, + ) +) + type ServerConfig struct { Addr string RolloutLister rolloutlister.RolloutLister @@ -74,6 +86,9 @@ func NewMetricsServer(cfg ServerConfig) *MetricsServer { reg.MustRegister(MetricNotificationFailedTotal) reg.MustRegister(MetricNotificationSend) reg.MustRegister(MetricVersionGauge) + reg.MustRegister(buildInfo) + + recordBuildInfo() mux.Handle(MetricsPath, promhttp.HandlerFor(prometheus.Gatherers{ // contains app controller specific metrics @@ -174,6 +189,12 @@ func (m *MetricsServer) Remove(namespace string, name string, kind string) { } +// recordBuildInfo publishes information about Argo-Rollouts version and runtime info through an info metric (gauge). +func recordBuildInfo() { + vers := version.GetVersion() + buildInfo.WithLabelValues(vers.Version, runtime.Version(), runtime.GOARCH, vers.GitCommit).Set(1) +} + func boolFloat64(b bool) float64 { if b { return 1