@@ -105,6 +105,9 @@ type Serf struct {
105
105
coordClient * coordinate.Client
106
106
coordCache map [string ]* coordinate.Coordinate
107
107
coordCacheLock sync.RWMutex
108
+
109
+ // metricLabels is the slice of labels to put on all emitted metrics
110
+ metricLabels []metrics.Label
108
111
}
109
112
110
113
// SerfState is the state of the Serf instance.
@@ -270,6 +273,7 @@ func Create(conf *Config) (*Serf, error) {
270
273
queryResponse : make (map [LamportTime ]* QueryResponse ),
271
274
shutdownCh : make (chan struct {}),
272
275
state : SerfAlive ,
276
+ metricLabels : conf .MetricLabels ,
273
277
}
274
278
serf .eventJoinIgnore .Store (false )
275
279
@@ -313,7 +317,9 @@ func Create(conf *Config) (*Serf, error) {
313
317
314
318
// Set up network coordinate client.
315
319
if ! conf .DisableCoordinates {
316
- serf .coordClient , err = coordinate .NewClient (coordinate .DefaultConfig ())
320
+ coordinateConfig := coordinate .DefaultConfig ()
321
+ coordinateConfig .MetricLabels = serf .metricLabels
322
+ serf .coordClient , err = coordinate .NewClient (coordinateConfig )
317
323
if err != nil {
318
324
return nil , fmt .Errorf ("Failed to create coordinate client: %v" , err )
319
325
}
@@ -334,6 +340,7 @@ func Create(conf *Config) (*Serf, error) {
334
340
if err != nil {
335
341
return nil , fmt .Errorf ("Failed to setup snapshot: %v" , err )
336
342
}
343
+ snap .metricLabels = serf .metricLabels
337
344
serf .snapshotter = snap
338
345
conf .EventCh = eventCh
339
346
prev = snap .AliveNodes ()
@@ -404,6 +411,8 @@ func Create(conf *Config) (*Serf, error) {
404
411
conf .MemberlistConfig .Alive = md
405
412
}
406
413
414
+ conf .MemberlistConfig .MetricLabels = conf .MetricLabels
415
+
407
416
// Create the underlying memberlist that will manage membership
408
417
// and failure detection for the Serf instance.
409
418
memberlist , err := memberlist .Create (conf .MemberlistConfig )
@@ -953,7 +962,7 @@ func (s *Serf) handleNodeJoin(n *memberlist.Node) {
953
962
oldStatus = member .Status
954
963
deadTime := time .Now ().Sub (member .leaveTime )
955
964
if oldStatus == StatusFailed && deadTime < s .config .FlapTimeout {
956
- metrics .IncrCounter ([]string {"serf" , "member" , "flap" }, 1 )
965
+ metrics .IncrCounterWithLabels ([]string {"serf" , "member" , "flap" }, 1 , s . metricLabels )
957
966
}
958
967
959
968
member .Status = StatusAlive
@@ -980,7 +989,7 @@ func (s *Serf) handleNodeJoin(n *memberlist.Node) {
980
989
}
981
990
982
991
// Update some metrics
983
- metrics .IncrCounter ([]string {"serf" , "member" , "join" }, 1 )
992
+ metrics .IncrCounterWithLabels ([]string {"serf" , "member" , "join" }, 1 , s . metricLabels )
984
993
985
994
// Send an event along
986
995
s .logger .Printf ("[INFO] serf: EventMemberJoin: %s %s" ,
@@ -1030,7 +1039,7 @@ func (s *Serf) handleNodeLeave(n *memberlist.Node) {
1030
1039
}
1031
1040
1032
1041
// Update some metrics
1033
- metrics .IncrCounter ([]string {"serf" , "member" , member .Status .String ()}, 1 )
1042
+ metrics .IncrCounterWithLabels ([]string {"serf" , "member" , member .Status .String ()}, 1 , s . metricLabels )
1034
1043
1035
1044
s .logger .Printf ("[INFO] serf: %s: %s %s" ,
1036
1045
eventStr , member .Member .Name , member .Member .Addr )
@@ -1074,7 +1083,7 @@ func (s *Serf) handleNodeUpdate(n *memberlist.Node) {
1074
1083
member .DelegateCur = n .DCur
1075
1084
1076
1085
// Update some metrics
1077
- metrics .IncrCounter ([]string {"serf" , "member" , "update" }, 1 )
1086
+ metrics .IncrCounterWithLabels ([]string {"serf" , "member" , "update" }, 1 , s . metricLabels )
1078
1087
1079
1088
// Send an event along
1080
1089
s .logger .Printf ("[INFO] serf: EventMemberUpdate: %s" , member .Member .Name )
@@ -1272,8 +1281,8 @@ func (s *Serf) handleUserEvent(eventMsg *messageUserEvent) bool {
1272
1281
seen .Events = append (seen .Events , userEvent )
1273
1282
1274
1283
// Update some metrics
1275
- metrics .IncrCounter ([]string {"serf" , "events" }, 1 )
1276
- metrics .IncrCounter ([]string {"serf" , "events" , eventMsg .Name }, 1 )
1284
+ metrics .IncrCounterWithLabels ([]string {"serf" , "events" }, 1 , s . metricLabels )
1285
+ metrics .IncrCounterWithLabels ([]string {"serf" , "events" , eventMsg .Name }, 1 , s . metricLabels )
1277
1286
1278
1287
if s .config .EventCh != nil {
1279
1288
s .config .EventCh <- UserEvent {
@@ -1331,8 +1340,8 @@ func (s *Serf) handleQuery(query *messageQuery) bool {
1331
1340
seen .QueryIDs = append (seen .QueryIDs , query .ID )
1332
1341
1333
1342
// Update some metrics
1334
- metrics .IncrCounter ([]string {"serf" , "queries" }, 1 )
1335
- metrics .IncrCounter ([]string {"serf" , "queries" , query .Name }, 1 )
1343
+ metrics .IncrCounterWithLabels ([]string {"serf" , "queries" }, 1 , s . metricLabels )
1344
+ metrics .IncrCounterWithLabels ([]string {"serf" , "queries" , query .Name }, 1 , s . metricLabels )
1336
1345
1337
1346
// Check if we should rebroadcast, this may be disabled by a flag
1338
1347
rebroadcast := true
@@ -1419,23 +1428,23 @@ func (s *Serf) handleQueryResponse(resp *messageQueryResponse) {
1419
1428
if resp .Ack () {
1420
1429
// Exit early if this is a duplicate ack
1421
1430
if _ , ok := query .acks [resp .From ]; ok {
1422
- metrics .IncrCounter ([]string {"serf" , "query_duplicate_acks" }, 1 )
1431
+ metrics .IncrCounterWithLabels ([]string {"serf" , "query_duplicate_acks" }, 1 , s . metricLabels )
1423
1432
return
1424
1433
}
1425
1434
1426
- metrics .IncrCounter ([]string {"serf" , "query_acks" }, 1 )
1435
+ metrics .IncrCounterWithLabels ([]string {"serf" , "query_acks" }, 1 , s . metricLabels )
1427
1436
err := query .sendAck (resp )
1428
1437
if err != nil {
1429
1438
s .logger .Printf ("[WARN] %v" , err )
1430
1439
}
1431
1440
} else {
1432
1441
// Exit early if this is a duplicate response
1433
1442
if _ , ok := query .responses [resp .From ]; ok {
1434
- metrics .IncrCounter ([]string {"serf" , "query_duplicate_responses" }, 1 )
1443
+ metrics .IncrCounterWithLabels ([]string {"serf" , "query_duplicate_responses" }, 1 , s . metricLabels )
1435
1444
return
1436
1445
}
1437
1446
1438
- metrics .IncrCounter ([]string {"serf" , "query_responses" }, 1 )
1447
+ metrics .IncrCounterWithLabels ([]string {"serf" , "query_responses" }, 1 , s . metricLabels )
1439
1448
err := query .sendResponse (NodeResponse {From : resp .From , Payload : resp .Payload })
1440
1449
if err != nil {
1441
1450
s .logger .Printf ("[WARN] %v" , err )
@@ -1676,7 +1685,7 @@ func (s *Serf) checkQueueDepth(name string, queue *memberlist.TransmitLimitedQue
1676
1685
select {
1677
1686
case <- time .After (s .config .QueueCheckInterval ):
1678
1687
numq := queue .NumQueued ()
1679
- metrics .AddSample ([]string {"serf" , "queue" , name }, float32 (numq ))
1688
+ metrics .AddSampleWithLabels ([]string {"serf" , "queue" , name }, float32 (numq ), s . metricLabels )
1680
1689
if numq >= s .config .QueueDepthWarning {
1681
1690
s .logger .Printf ("[WARN] serf: %s queue depth: %d" , name , numq )
1682
1691
}
0 commit comments