Skip to content

Commit f1e95e0

Browse files
authored
Remove spans with ec2 metadata ip address from metrics (#172)
1 parent c63bad5 commit f1e95e0

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

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

Lines changed: 15 additions & 1 deletion
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;
@@ -162,10 +165,21 @@ private void RecordLatency(Activity span, ActivityTagsCollection attributes)
162165
private void RecordMetrics(Activity span, ActivityTagsCollection attributes)
163166
{
164167
// Only record metrics if non-empty attributes are returned.
165-
if (attributes.Count > 0)
168+
if (attributes.Count > 0 && !IsEc2MetadataApiSpan(attributes))
166169
{
167170
this.RecordErrorOrFault(span, attributes);
168171
this.RecordLatency(span, attributes);
169172
}
170173
}
174+
175+
private bool IsEc2MetadataApiSpan(ActivityTagsCollection attributes)
176+
{
177+
if (attributes.TryGetValue(AttributeAWSRemoteService, out object? value) &&
178+
value is string ip &&
179+
ip == Ec2MetadataApiIp)
180+
{
181+
return true;
182+
}
183+
return false;
184+
}
171185
}

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)