Skip to content

Commit 28669e8

Browse files
committed
Remove spans with ec2 metadata ip address from metrics
1 parent c04b182 commit 28669e8

File tree

2 files changed

+40
-3
lines changed

2 files changed

+40
-3
lines changed

src/AWS.Distro.OpenTelemetry.AutoInstrumentation/AwsSpanMetricsProcessor.cs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using OpenTelemetry;
77
using OpenTelemetry.Metrics;
88
using OpenTelemetry.Resources;
9+
using static AWS.Distro.OpenTelemetry.AutoInstrumentation.AwsAttributeKeys;
910
using static AWS.Distro.OpenTelemetry.AutoInstrumentation.AwsSpanProcessingUtil;
1011

1112
namespace AWS.Distro.OpenTelemetry.AutoInstrumentation;
@@ -32,6 +33,8 @@ public class AwsSpanMetricsProcessor : BaseProcessor<Activity>
3233
private const int FaultCodeLowerBound = 500;
3334
private const int FaultCodeUpperBound = 599;
3435

36+
private const string Ec2MetadataApiIp = "169.254.169.254";
37+
3538
// Metric instruments
3639
private Histogram<long> errorHistogram;
3740
private Histogram<long> faultHistogram;
@@ -74,9 +77,11 @@ public override void OnEnd(Activity activity)
7477
Dictionary<string, ActivityTagsCollection> attributeDictionary =
7578
this.generator.GenerateMetricAttributeMapFromSpan(activity, this.resource);
7679

77-
foreach (KeyValuePair<string, ActivityTagsCollection> attribute in attributeDictionary)
78-
{
79-
this.RecordMetrics(activity, attribute.Value);
80+
if (!IsEc2MetadataApiSpan(attributeDictionary)) {
81+
foreach (KeyValuePair<string, ActivityTagsCollection> attribute in attributeDictionary)
82+
{
83+
this.RecordMetrics(activity, attribute.Value);
84+
}
8085
}
8186
}
8287

@@ -168,4 +173,17 @@ private void RecordMetrics(Activity span, ActivityTagsCollection attributes)
168173
this.RecordLatency(span, attributes);
169174
}
170175
}
176+
177+
private bool IsEc2MetadataApiSpan(Dictionary<string, ActivityTagsCollection> attributeDict)
178+
{
179+
if (attributeDict.TryGetValue(MetricAttributeGeneratorConstants.DependencyMetric, out ActivityTagsCollection? activityTagsCollection) &&
180+
activityTagsCollection != null &&
181+
activityTagsCollection.TryGetValue(AttributeAWSRemoteService, out object? value) &&
182+
value is string ip &&
183+
ip == Ec2MetadataApiIp)
184+
{
185+
return true;
186+
}
187+
return false;
188+
}
171189
}

test/AWS.Distro.OpenTelemetry.AutoInstrumentation.Tests/AwsSpanMetricsProcessorTest.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,18 @@ public void TestOnEndMetricsGenerationWithStatusDataOk()
325325
this.ValidateMetricsGeneratedForStatusDataOk(600, ExpectedStatusMetric.NEITHER);
326326
}
327327

328+
[Fact]
329+
public void TestOnEndMetricsGenerationFromEc2MetadataApi()
330+
{
331+
Activity? spanDataMock = this.activitySource.StartActivity("test", ActivityKind.Client);
332+
this.SetLatency(spanDataMock);
333+
Dictionary<string, ActivityTagsCollection> expectAttributes = this.BuildEc2MetadataApiMetricAttributes();
334+
this.generator.Setup(g => g.GenerateMetricAttributeMapFromSpan(spanDataMock, this.resource))
335+
.Returns(expectAttributes);
336+
this.awsSpanMetricsProcessor.OnEnd(spanDataMock);
337+
this.VerifyHistogramRecords(expectAttributes, 0, 0);
338+
}
339+
328340
private void ValidateMetricsGeneratedForAttributeStatusCode(
329341
int? awsStatusCode, ExpectedStatusMetric expectedStatusMetric)
330342
{
@@ -524,6 +536,13 @@ private Dictionary<string, ActivityTagsCollection> BuildMetricAttributes(bool co
524536
return attributes;
525537
}
526538

539+
private Dictionary<string, ActivityTagsCollection> BuildEc2MetadataApiMetricAttributes()
540+
{
541+
Dictionary<string, ActivityTagsCollection> attributes = new Dictionary<string, ActivityTagsCollection>();
542+
attributes.Add(MetricAttributeGeneratorConstants.DependencyMetric, new ActivityTagsCollection([new KeyValuePair<string, object?>(AttributeAWSRemoteService, "169.254.169.254")]));
543+
return attributes;
544+
}
545+
527546
// Configure latency
528547
private void SetLatency(Activity? spanDataMock, double latency = -1)
529548
{

0 commit comments

Comments
 (0)