From 3a49a9343800c1d9b1686643b52ed2ac82ca5585 Mon Sep 17 00:00:00 2001 From: cpanato Date: Fri, 23 Sep 2022 17:18:55 +0200 Subject: [PATCH] export rekor build/version information Signed-off-by: cpanato --- cmd/rekor-server/app/root.go | 2 +- cmd/rekor-server/app/serve.go | 4 ++++ pkg/api/metrics.go | 24 ++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/cmd/rekor-server/app/root.go b/cmd/rekor-server/app/root.go index 0d10b2f38..df8eea269 100644 --- a/cmd/rekor-server/app/root.go +++ b/cmd/rekor-server/app/root.go @@ -76,7 +76,7 @@ func init() { rootCmd.PersistentFlags().String("rekor_server.signer", "memory", `Rekor signer to use. Valid options are: [gcpkms, memory, filename containing PEM encoded private key]. - Memory and file-based signers should only be used for testing.`) +Memory and file-based signers should only be used for testing.`) rootCmd.PersistentFlags().String("rekor_server.signer-passwd", "", "Password to decrypt signer private key") rootCmd.PersistentFlags().Uint16("port", 3000, "Port to bind to") diff --git a/cmd/rekor-server/app/serve.go b/cmd/rekor-server/app/serve.go index 240b64183..bbad87b9c 100644 --- a/cmd/rekor-server/app/serve.go +++ b/cmd/rekor-server/app/serve.go @@ -21,6 +21,7 @@ import ( "time" "github.com/go-openapi/loads" + "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -74,6 +75,9 @@ var serveCmd = &cobra.Command{ } log.Logger.Infof("starting rekor-server @ %v", viStr) + reg := prometheus.NewRegistry() + reg.MustRegister(api.NewVersionCollector("rekor", vi)) + doc, _ := loads.Embedded(restapi.SwaggerJSON, restapi.FlatSwaggerJSON) server := restapi.NewServer(operations.NewRekorServerAPI(doc)) defer func() { diff --git a/pkg/api/metrics.go b/pkg/api/metrics.go index b22731f1b..ef11aab3a 100644 --- a/pkg/api/metrics.go +++ b/pkg/api/metrics.go @@ -16,10 +16,12 @@ package api import ( + "fmt" "time" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" + "sigs.k8s.io/release-utils/version" ) var ( @@ -52,3 +54,25 @@ var ( Help: "Api QPS by path, method, and response code", }, []string{"path", "method", "code"}) ) + +// NewVersionCollector returns a collector that exports metrics about current version +// information. +func NewVersionCollector(program string, versionInfo version.Info) prometheus.Collector { + return promauto.NewGaugeFunc( + prometheus.GaugeOpts{ + Namespace: program, + Name: "build_info", + Help: fmt.Sprintf( + "A metric with a constant '1' value labeled by version, revision, branch, and goversion from which %s was built.", + program, + ), + ConstLabels: prometheus.Labels{ + "version": versionInfo.GitVersion, + "revision": versionInfo.GitCommit, + "build_date": versionInfo.BuildDate, + "goversion": versionInfo.GoVersion, + }, + }, + func() float64 { return 1 }, + ) +}