diff --git a/go/controller/cmd/main.go b/go/controller/cmd/main.go index c6d3f7b4f..294480bf0 100644 --- a/go/controller/cmd/main.go +++ b/go/controller/cmd/main.go @@ -39,6 +39,7 @@ import ( a2a_manager "github.com/kagent-dev/kagent/go/internal/a2a/manager" autogen_client "github.com/kagent-dev/kagent/go/internal/autogen/client" "github.com/kagent-dev/kagent/go/internal/database" + versionmetrics "github.com/kagent-dev/kagent/go/internal/metrics" a2a_reconciler "github.com/kagent-dev/kagent/go/controller/internal/a2a" "github.com/kagent-dev/kagent/go/internal/httpserver" @@ -58,6 +59,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/healthz" "sigs.k8s.io/controller-runtime/pkg/log/zap" "sigs.k8s.io/controller-runtime/pkg/manager" + ctrlmetrics "sigs.k8s.io/controller-runtime/pkg/metrics" "sigs.k8s.io/controller-runtime/pkg/metrics/filters" metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" "sigs.k8s.io/controller-runtime/pkg/webhook" @@ -195,6 +197,8 @@ func main() { TLSOpts: webhookTLSOpts, }) + ctrlmetrics.Registry.MustRegister(versionmetrics.NewBuildInfoCollector()) + // Metrics endpoint is enabled in 'config/default/kustomization.yaml'. The Metrics options configure the server. // More info: // - https://pkg.go.dev/sigs.k8s.io/controller-runtime@v0.20.0/pkg/metrics/server diff --git a/go/go.mod b/go/go.mod index bf2e223e6..522724f39 100644 --- a/go/go.mod +++ b/go/go.mod @@ -13,6 +13,7 @@ require ( github.com/gorilla/mux v1.8.1 github.com/hashicorp/go-multierror v1.1.1 github.com/jedib0t/go-pretty/v6 v6.6.7 + github.com/prometheus/client_golang v1.22.0 github.com/spf13/cobra v1.9.1 github.com/spf13/pflag v1.0.6 github.com/spf13/viper v1.20.1 @@ -91,7 +92,6 @@ require ( github.com/pelletier/go-toml/v2 v2.2.3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.22.0 // indirect github.com/prometheus/client_model v0.6.2 // indirect github.com/prometheus/common v0.65.0 // indirect github.com/prometheus/procfs v0.16.1 // indirect diff --git a/go/internal/metrics/version.go b/go/internal/metrics/version.go new file mode 100644 index 000000000..384c3924e --- /dev/null +++ b/go/internal/metrics/version.go @@ -0,0 +1,27 @@ +package metrics + +import ( + "github.com/prometheus/client_golang/prometheus" + + "github.com/kagent-dev/kagent/go/internal/version" +) + +// NewBuildInfoCollector returns a collector that exports metrics about current version +// information. +func NewBuildInfoCollector() prometheus.Collector { + return prometheus.NewGaugeFunc( + prometheus.GaugeOpts{ + Name: "kagent_build_info", + Help: "kagent build metadata exposed as labels with a constant value of 1.", + ConstLabels: prometheus.Labels{ + "version": version.Get().Version, + "git_commit": version.Get().GitCommit, + "build_date": version.Get().BuildDate, + "go_version": version.Get().GoVersion, + "compiler": version.Get().Compiler, + "platform": version.Get().Platform, + }, + }, + func() float64 { return 1 }, + ) +}