diff --git a/server/instrumentation.go b/server/instrumentation.go
index af32af3a9264df1c214ffba9873a4acf368a4034..aa8e1b591f4ab3c68767ce05ffc8512b6853deb1 100644
--- a/server/instrumentation.go
+++ b/server/instrumentation.go
@@ -8,6 +8,11 @@ var (
 		"Total number of unlocked keys in-memory.",
 		nil, nil,
 	)
+	totalSessionsInMemory = prometheus.NewDesc(
+		"keystored_sessions_total",
+		"Total number of active user sessions.",
+		nil, nil,
+	)
 	requestsCounter = prometheus.NewCounterVec(prometheus.CounterOpts{
 		Name: "keystored_requests_total",
 		Help: "Counter of requests by method and status.",
@@ -43,9 +48,19 @@ func (c *keystoreCollector) Describe(ch chan<- *prometheus.Desc) {
 }
 
 func (c *keystoreCollector) Collect(ch chan<- prometheus.Metric) {
+	c.ks.mx.Lock()
+	numKeys := c.ks.userKeys.numCachedKeys()
+	numSessions := c.ks.userKeys.numSessions()
+	c.ks.mx.Unlock()
+
 	ch <- prometheus.MustNewConstMetric(
 		totalKeysInMemory,
 		prometheus.GaugeValue,
-		float64(c.ks.userKeys.numCachedKeys()),
+		float64(numKeys),
+	)
+	ch <- prometheus.MustNewConstMetric(
+		totalSessionsInMemory,
+		prometheus.GaugeValue,
+		float64(numSessions),
 	)
 }
diff --git a/server/map.go b/server/map.go
index 83afcf07fd62c677f7b30431bbfd052d436df96f..bde53d6d9aca0a2a15358327bdd0cbe41ee4992d 100644
--- a/server/map.go
+++ b/server/map.go
@@ -103,6 +103,10 @@ func (u *userKeyMap) numCachedKeys() int {
 	return len(u.userKeys)
 }
 
+func (u *userKeyMap) numSessions() int {
+	return u.sessions.pq.Len()
+}
+
 func (u *userKeyMap) get(username string) (*userKey, bool) {
 	k, ok := u.userKeys[username]
 	return k, ok