@@ -228,7 +228,18 @@ func (a *Aggregator) processSpan(event *model.APMEvent) model.APMEvent {
228228 duration = time .Duration (event .Span .Composite .Sum * float64 (time .Millisecond ))
229229 }
230230
231- key := makeAggregationKey (event , event .Span .DestinationService .Resource , a .config .Interval )
231+ var serviceTargetType , serviceTargetName string
232+ if event .Service .Target != nil {
233+ serviceTargetType = event .Service .Target .Type
234+ serviceTargetName = event .Service .Target .Name
235+ }
236+ key := makeAggregationKey (
237+ event ,
238+ event .Span .DestinationService .Resource ,
239+ serviceTargetType ,
240+ serviceTargetName ,
241+ a .config .Interval ,
242+ )
232243 metrics := spanMetrics {
233244 count : float64 (count ) * event .Span .RepresentativeCount ,
234245 sum : float64 (duration ) * event .Span .RepresentativeCount ,
@@ -248,7 +259,13 @@ func (a *Aggregator) processDroppedSpanStats(event *model.APMEvent, dss model.Dr
248259 return model.APMEvent {}
249260 }
250261
251- key := makeAggregationKey (event , dss .DestinationServiceResource , a .config .Interval )
262+ key := makeAggregationKey (
263+ event ,
264+ dss .DestinationServiceResource ,
265+ dss .ServiceTargetType ,
266+ dss .ServiceTargetName ,
267+ a .config .Interval ,
268+ )
252269 metrics := spanMetrics {
253270 count : float64 (dss .Duration .Count ) * representativeCount ,
254271 sum : float64 (dss .Duration .Sum ) * representativeCount ,
@@ -292,12 +309,16 @@ type aggregationKey struct {
292309 serviceEnvironment string
293310 agentName string
294311
312+ // target
313+ targetType string
314+ targetName string
315+
295316 // destination
296317 resource string
297318 outcome string
298319}
299320
300- func makeAggregationKey (event * model.APMEvent , resource string , interval time.Duration ) aggregationKey {
321+ func makeAggregationKey (event * model.APMEvent , resource , targetType , targetName string , interval time.Duration ) aggregationKey {
301322 return aggregationKey {
302323 // Group metrics by time interval.
303324 timestamp : event .Timestamp .Truncate (interval ),
@@ -306,6 +327,9 @@ func makeAggregationKey(event *model.APMEvent, resource string, interval time.Du
306327 serviceEnvironment : event .Service .Environment ,
307328 agentName : event .Agent .Name ,
308329
330+ targetType : targetType ,
331+ targetName : targetName ,
332+
309333 resource : resource ,
310334 outcome : event .Event .Outcome ,
311335 }
@@ -317,12 +341,20 @@ type spanMetrics struct {
317341}
318342
319343func makeMetricset (key aggregationKey , metrics spanMetrics ) model.APMEvent {
344+ var target * model.ServiceTarget
345+ if key .targetName != "" || key .targetType != "" {
346+ target = & model.ServiceTarget {
347+ Type : key .targetType ,
348+ Name : key .targetName ,
349+ }
350+ }
320351 return model.APMEvent {
321352 Timestamp : key .timestamp ,
322353 Agent : model.Agent {Name : key .agentName },
323354 Service : model.Service {
324355 Name : key .serviceName ,
325356 Environment : key .serviceEnvironment ,
357+ Target : target ,
326358 },
327359 Event : model.Event {
328360 Outcome : key .outcome ,
0 commit comments