Browse Source

metrics: Add server_version metric

Joe Betz 8 years ago
parent
commit
4cacbf19dd
2 changed files with 19 additions and 0 deletions
  1. 6 0
      e2e/metrics_test.go
  2. 13 0
      etcdserver/metrics.go

+ 6 - 0
e2e/metrics_test.go

@@ -15,7 +15,10 @@
 package e2e
 package e2e
 
 
 import (
 import (
+	"fmt"
 	"testing"
 	"testing"
+
+	"github.com/coreos/etcd/version"
 )
 )
 
 
 func TestV3MetricsSecure(t *testing.T) {
 func TestV3MetricsSecure(t *testing.T) {
@@ -39,6 +42,9 @@ func metricsTest(cx ctlCtx) {
 	if err := cURLGet(cx.epc, cURLReq{endpoint: "/metrics", expected: `etcd_debugging_mvcc_keys_total 1`, metricsURLScheme: cx.cfg.metricsURLScheme}); err != nil {
 	if err := cURLGet(cx.epc, cURLReq{endpoint: "/metrics", expected: `etcd_debugging_mvcc_keys_total 1`, metricsURLScheme: cx.cfg.metricsURLScheme}); err != nil {
 		cx.t.Fatalf("failed get with curl (%v)", err)
 		cx.t.Fatalf("failed get with curl (%v)", err)
 	}
 	}
+	if err := cURLGet(cx.epc, cURLReq{endpoint: "/metrics", expected: fmt.Sprintf(`etcd_server_version{server_version="%s"} 1`, version.Version), metricsURLScheme: cx.cfg.metricsURLScheme}); err != nil {
+		cx.t.Fatalf("failed get with curl (%v)", err)
+	}
 	if err := cURLGet(cx.epc, cURLReq{endpoint: "/health", expected: `{"health":true}`, metricsURLScheme: cx.cfg.metricsURLScheme}); err != nil {
 	if err := cURLGet(cx.epc, cURLReq{endpoint: "/health", expected: `{"health":true}`, metricsURLScheme: cx.cfg.metricsURLScheme}); err != nil {
 		cx.t.Fatalf("failed get with curl (%v)", err)
 		cx.t.Fatalf("failed get with curl (%v)", err)
 	}
 	}

+ 13 - 0
etcdserver/metrics.go

@@ -18,6 +18,7 @@ import (
 	"time"
 	"time"
 
 
 	"github.com/coreos/etcd/pkg/runtime"
 	"github.com/coreos/etcd/pkg/runtime"
+	"github.com/coreos/etcd/version"
 	"github.com/prometheus/client_golang/prometheus"
 	"github.com/prometheus/client_golang/prometheus"
 )
 )
 
 
@@ -64,6 +65,13 @@ var (
 		Name:      "lease_expired_total",
 		Name:      "lease_expired_total",
 		Help:      "The total number of expired leases.",
 		Help:      "The total number of expired leases.",
 	})
 	})
+	currentVersion = prometheus.NewGaugeVec(prometheus.GaugeOpts{
+		Namespace: "etcd",
+		Subsystem: "server",
+		Name:      "version",
+		Help:      "Which version is running. 1 for 'server_version' label with current version.",
+	},
+		[]string{"server_version"})
 )
 )
 
 
 func init() {
 func init() {
@@ -74,6 +82,11 @@ func init() {
 	prometheus.MustRegister(proposalsPending)
 	prometheus.MustRegister(proposalsPending)
 	prometheus.MustRegister(proposalsFailed)
 	prometheus.MustRegister(proposalsFailed)
 	prometheus.MustRegister(leaseExpired)
 	prometheus.MustRegister(leaseExpired)
+	prometheus.MustRegister(currentVersion)
+
+	currentVersion.With(prometheus.Labels{
+		"server_version": version.Version,
+	}).Set(1)
 }
 }
 
 
 func monitorFileDescriptor(done <-chan struct{}) {
 func monitorFileDescriptor(done <-chan struct{}) {