Skip to content

Commit 49aef33

Browse files
committed
proactively drop old spans in the APM reporter
1 parent eeb0596 commit 49aef33

File tree

2 files changed

+18
-14
lines changed

2 files changed

+18
-14
lines changed

reporters/kamon-apm-reporter/src/main/scala/kamon/apm/KamonApm.scala

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -83,20 +83,24 @@ class KamonApm(configPath: String) extends CombinedReporter {
8383

8484
override def reportSpans(spans: Seq[Span.Finished]): Unit = if(spans.nonEmpty) {
8585
if(isAcceptableApiKey(_settings.apiKey)) {
86-
val env = Kamon.environment
87-
val apmSpans = spans map convertSpan
88-
89-
val batch = SpanBatch.newBuilder()
90-
.setAgent(_settings.agent)
91-
.setServiceName(env.service)
92-
.setHost(env.host)
93-
.setInstance(env.instance)
94-
.setApiKey(_settings.apiKey)
95-
.addAllSpans(apmSpans.asJava)
96-
.build()
97-
98-
_httpClient.foreach(_.postSpans(batch))
86+
val spansFinishLimit = Kamon.clock().instant().minus(_maxSnapshotAge)
87+
val recentSpans = spans.filter(_.to.isAfter(spansFinishLimit))
88+
89+
if(recentSpans.nonEmpty) {
90+
val env = Kamon.environment
91+
val apmSpans = recentSpans map convertSpan
92+
93+
val batch = SpanBatch.newBuilder()
94+
.setAgent(_settings.agent)
95+
.setServiceName(env.service)
96+
.setHost(env.host)
97+
.setInstance(env.instance)
98+
.setApiKey(_settings.apiKey)
99+
.addAllSpans(apmSpans.asJava)
100+
.build()
99101

102+
_httpClient.foreach(_.postSpans(batch))
103+
}
100104
} else
101105
_logger.error(s"Dropping Spans because an invalid API key has been configured [${_settings.apiKey}]")
102106
}

reporters/kamon-apm-reporter/src/test/scala/kamon/apm/ReporterSpec.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ class ReporterSpec extends TestKit(ActorSystem("MetricReporterSpec"))
103103

104104
"retry span ingestion" in {
105105
val span = Span.Finished(Identifier.Empty, Trace.Empty, Identifier.Empty, "", false, false,
106-
Instant.ofEpochMilli(0), Instant.ofEpochMilli(0), Span.Kind.Unknown, Span.Position.Unknown,
106+
Instant.now(), Instant.now(), Span.Kind.Unknown, Span.Position.Unknown,
107107
TagSet.Empty, TagSet.Empty, Seq.empty, Seq.empty)
108108

109109
reporter.reportSpans(Seq(span))

0 commit comments

Comments
 (0)