Skip to content

Commit b12bbff

Browse files
committed
Fix the proxy server backend metric
1 parent ea89bf0 commit b12bbff

File tree

4 files changed

+35
-7
lines changed

4 files changed

+35
-7
lines changed

pkg/server/backend_manager.go

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -271,24 +271,30 @@ type DefaultBackendStorage struct {
271271
// e.g., when associating to the DestHostBackendManager, it can only use the
272272
// identifiers of types, IPv4, IPv6 and Host.
273273
idTypes []header.IdentifierType
274+
// managerName is the kind of backend manager this storage belongs to.
275+
// It is used to record metrics.
276+
managerName string
274277
}
275278

276279
// NewDefaultBackendManager returns a DefaultBackendManager.
277280
func NewDefaultBackendManager() *DefaultBackendManager {
278281
return &DefaultBackendManager{
279282
DefaultBackendStorage: NewDefaultBackendStorage(
280-
[]header.IdentifierType{header.UID})}
283+
[]header.IdentifierType{header.UID}, "DefaultBackendManager")}
281284
}
282285

283286
// NewDefaultBackendStorage returns a DefaultBackendStorage
284-
func NewDefaultBackendStorage(idTypes []header.IdentifierType) *DefaultBackendStorage {
287+
func NewDefaultBackendStorage(idTypes []header.IdentifierType, managerName string) *DefaultBackendStorage {
285288
// Set an explicit value, so that the metric is emitted even when
286289
// no agent ever successfully connects.
287290
metrics.Metrics.SetBackendCount(0)
291+
metrics.Metrics.SetTotalBackendCount(managerName, 0)
292+
288293
return &DefaultBackendStorage{
289-
backends: make(map[string][]*Backend),
290-
random: rand.New(rand.NewSource(time.Now().UnixNano())), /* #nosec G404 */
291-
idTypes: idTypes,
294+
backends: make(map[string][]*Backend),
295+
random: rand.New(rand.NewSource(time.Now().UnixNano())), /* #nosec G404 */
296+
idTypes: idTypes,
297+
managerName: managerName,
292298
}
293299
}
294300

@@ -318,6 +324,7 @@ func (s *DefaultBackendStorage) addBackend(identifier string, idType header.Iden
318324
}
319325
s.backends[identifier] = []*Backend{backend}
320326
metrics.Metrics.SetBackendCount(len(s.backends))
327+
metrics.Metrics.SetTotalBackendCount(s.managerName, len(s.backends))
321328
s.agentIDs = append(s.agentIDs, identifier)
322329
}
323330

@@ -359,6 +366,7 @@ func (s *DefaultBackendStorage) removeBackend(identifier string, idType header.I
359366
klog.V(1).InfoS("Could not find connection matching identifier to remove", "agentID", identifier, "idType", idType)
360367
}
361368
metrics.Metrics.SetBackendCount(len(s.backends))
369+
metrics.Metrics.SetTotalBackendCount(s.managerName, len(s.backends))
362370
}
363371

364372
// NumBackends resturns the number of available backends

pkg/server/default_route_backend_manager.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ var _ BackendManager = &DefaultRouteBackendManager{}
3232
func NewDefaultRouteBackendManager() *DefaultRouteBackendManager {
3333
return &DefaultRouteBackendManager{
3434
DefaultBackendStorage: NewDefaultBackendStorage(
35-
[]header.IdentifierType{header.DefaultRoute})}
35+
[]header.IdentifierType{header.DefaultRoute}, "DefaultRouteBackendManager")}
3636
}
3737

3838
// Backend tries to get a backend that advertises default route, with random selection.

pkg/server/desthost_backend_manager.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ var _ BackendManager = &DestHostBackendManager{}
3232
func NewDestHostBackendManager() *DestHostBackendManager {
3333
return &DestHostBackendManager{
3434
DefaultBackendStorage: NewDefaultBackendStorage(
35-
[]header.IdentifierType{header.IPv4, header.IPv6, header.Host})}
35+
[]header.IdentifierType{header.IPv4, header.IPv6, header.Host}, "DestHostBackendManager")}
3636
}
3737

3838
func (dibm *DestHostBackendManager) AddBackend(backend *Backend) {

pkg/server/metrics/metrics.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ type ServerMetrics struct {
5151
grpcConnections *prometheus.GaugeVec
5252
httpConnections prometheus.Gauge
5353
backend *prometheus.GaugeVec
54+
totalBackendCount *prometheus.GaugeVec
5455
pendingDials *prometheus.GaugeVec
5556
establishedConns *prometheus.GaugeVec
5657
fullRecvChannels *prometheus.GaugeVec
@@ -114,6 +115,17 @@ func newServerMetrics() *ServerMetrics {
114115
},
115116
[]string{},
116117
)
118+
totalBackendCount := prometheus.NewGaugeVec(
119+
prometheus.GaugeOpts{
120+
Namespace: Namespace,
121+
Subsystem: Subsystem,
122+
Name: "ready_backend_connections_total",
123+
Help: "Total number of konnectivity agent connected to the proxy server",
124+
},
125+
[]string{
126+
"manager",
127+
},
128+
)
117129
pendingDials := prometheus.NewGaugeVec(
118130
prometheus.GaugeOpts{
119131
Namespace: Namespace,
@@ -203,6 +215,7 @@ func newServerMetrics() *ServerMetrics {
203215
prometheus.MustRegister(grpcConnections)
204216
prometheus.MustRegister(httpConnections)
205217
prometheus.MustRegister(backend)
218+
prometheus.MustRegister(totalBackendCount)
206219
prometheus.MustRegister(pendingDials)
207220
prometheus.MustRegister(establishedConns)
208221
prometheus.MustRegister(fullRecvChannels)
@@ -220,6 +233,7 @@ func newServerMetrics() *ServerMetrics {
220233
grpcConnections: grpcConnections,
221234
httpConnections: httpConnections,
222235
backend: backend,
236+
totalBackendCount: totalBackendCount,
223237
pendingDials: pendingDials,
224238
establishedConns: establishedConns,
225239
fullRecvChannels: fullRecvChannels,
@@ -240,6 +254,7 @@ func (s *ServerMetrics) Reset() {
240254
s.frontendLatencies.Reset()
241255
s.grpcConnections.Reset()
242256
s.backend.Reset()
257+
s.totalBackendCount.Reset()
243258
s.pendingDials.Reset()
244259
s.establishedConns.Reset()
245260
s.fullRecvChannels.Reset()
@@ -284,6 +299,11 @@ func (s *ServerMetrics) SetBackendCount(count int) {
284299
s.backend.WithLabelValues().Set(float64(count))
285300
}
286301

302+
// SetTotalBackendCount sets the total number of backend connection.
303+
func (s *ServerMetrics) SetTotalBackendCount(managerName string, count int) {
304+
s.totalBackendCount.WithLabelValues(managerName).Set(float64(count))
305+
}
306+
287307
// SetPendingDialCount sets the number of pending dials.
288308
func (s *ServerMetrics) SetPendingDialCount(count int) {
289309
s.pendingDials.WithLabelValues().Set(float64(count))

0 commit comments

Comments
 (0)