@@ -105,6 +105,9 @@ type Serf struct {
105105 coordClient * coordinate.Client
106106 coordCache map [string ]* coordinate.Coordinate
107107 coordCacheLock sync.RWMutex
108+
109+ // metricLabels is the slice of labels to put on all emitted metrics
110+ metricLabels []metrics.Label
108111}
109112
110113// SerfState is the state of the Serf instance.
@@ -270,6 +273,7 @@ func Create(conf *Config) (*Serf, error) {
270273 queryResponse : make (map [LamportTime ]* QueryResponse ),
271274 shutdownCh : make (chan struct {}),
272275 state : SerfAlive ,
276+ metricLabels : conf .MetricLabels ,
273277 }
274278 serf .eventJoinIgnore .Store (false )
275279
@@ -313,7 +317,9 @@ func Create(conf *Config) (*Serf, error) {
313317
314318 // Set up network coordinate client.
315319 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 )
317323 if err != nil {
318324 return nil , fmt .Errorf ("Failed to create coordinate client: %v" , err )
319325 }
@@ -334,6 +340,7 @@ func Create(conf *Config) (*Serf, error) {
334340 if err != nil {
335341 return nil , fmt .Errorf ("Failed to setup snapshot: %v" , err )
336342 }
343+ snap .metricLabels = serf .metricLabels
337344 serf .snapshotter = snap
338345 conf .EventCh = eventCh
339346 prev = snap .AliveNodes ()
@@ -404,6 +411,8 @@ func Create(conf *Config) (*Serf, error) {
404411 conf .MemberlistConfig .Alive = md
405412 }
406413
414+ conf .MemberlistConfig .MetricLabels = conf .MetricLabels
415+
407416 // Create the underlying memberlist that will manage membership
408417 // and failure detection for the Serf instance.
409418 memberlist , err := memberlist .Create (conf .MemberlistConfig )
@@ -953,7 +962,7 @@ func (s *Serf) handleNodeJoin(n *memberlist.Node) {
953962 oldStatus = member .Status
954963 deadTime := time .Now ().Sub (member .leaveTime )
955964 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 )
957966 }
958967
959968 member .Status = StatusAlive
@@ -980,7 +989,7 @@ func (s *Serf) handleNodeJoin(n *memberlist.Node) {
980989 }
981990
982991 // Update some metrics
983- metrics .IncrCounter ([]string {"serf" , "member" , "join" }, 1 )
992+ metrics .IncrCounterWithLabels ([]string {"serf" , "member" , "join" }, 1 , s . metricLabels )
984993
985994 // Send an event along
986995 s .logger .Printf ("[INFO] serf: EventMemberJoin: %s %s" ,
@@ -1030,7 +1039,7 @@ func (s *Serf) handleNodeLeave(n *memberlist.Node) {
10301039 }
10311040
10321041 // 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 )
10341043
10351044 s .logger .Printf ("[INFO] serf: %s: %s %s" ,
10361045 eventStr , member .Member .Name , member .Member .Addr )
@@ -1074,7 +1083,7 @@ func (s *Serf) handleNodeUpdate(n *memberlist.Node) {
10741083 member .DelegateCur = n .DCur
10751084
10761085 // Update some metrics
1077- metrics .IncrCounter ([]string {"serf" , "member" , "update" }, 1 )
1086+ metrics .IncrCounterWithLabels ([]string {"serf" , "member" , "update" }, 1 , s . metricLabels )
10781087
10791088 // Send an event along
10801089 s .logger .Printf ("[INFO] serf: EventMemberUpdate: %s" , member .Member .Name )
@@ -1272,8 +1281,8 @@ func (s *Serf) handleUserEvent(eventMsg *messageUserEvent) bool {
12721281 seen .Events = append (seen .Events , userEvent )
12731282
12741283 // 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 )
12771286
12781287 if s .config .EventCh != nil {
12791288 s .config .EventCh <- UserEvent {
@@ -1331,8 +1340,8 @@ func (s *Serf) handleQuery(query *messageQuery) bool {
13311340 seen .QueryIDs = append (seen .QueryIDs , query .ID )
13321341
13331342 // 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 )
13361345
13371346 // Check if we should rebroadcast, this may be disabled by a flag
13381347 rebroadcast := true
@@ -1419,23 +1428,23 @@ func (s *Serf) handleQueryResponse(resp *messageQueryResponse) {
14191428 if resp .Ack () {
14201429 // Exit early if this is a duplicate ack
14211430 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 )
14231432 return
14241433 }
14251434
1426- metrics .IncrCounter ([]string {"serf" , "query_acks" }, 1 )
1435+ metrics .IncrCounterWithLabels ([]string {"serf" , "query_acks" }, 1 , s . metricLabels )
14271436 err := query .sendAck (resp )
14281437 if err != nil {
14291438 s .logger .Printf ("[WARN] %v" , err )
14301439 }
14311440 } else {
14321441 // Exit early if this is a duplicate response
14331442 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 )
14351444 return
14361445 }
14371446
1438- metrics .IncrCounter ([]string {"serf" , "query_responses" }, 1 )
1447+ metrics .IncrCounterWithLabels ([]string {"serf" , "query_responses" }, 1 , s . metricLabels )
14391448 err := query .sendResponse (NodeResponse {From : resp .From , Payload : resp .Payload })
14401449 if err != nil {
14411450 s .logger .Printf ("[WARN] %v" , err )
@@ -1676,7 +1685,7 @@ func (s *Serf) checkQueueDepth(name string, queue *memberlist.TransmitLimitedQue
16761685 select {
16771686 case <- time .After (s .config .QueueCheckInterval ):
16781687 numq := queue .NumQueued ()
1679- metrics .AddSample ([]string {"serf" , "queue" , name }, float32 (numq ))
1688+ metrics .AddSampleWithLabels ([]string {"serf" , "queue" , name }, float32 (numq ), s . metricLabels )
16801689 if numq >= s .config .QueueDepthWarning {
16811690 s .logger .Printf ("[WARN] serf: %s queue depth: %d" , name , numq )
16821691 }
0 commit comments