Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package sttp.client4.opentelemetry
import sttp.client4.GenericRequest
import io.opentelemetry.api.common.Attributes
import io.opentelemetry.semconv.HttpAttributes
import sttp.client4.Response
import io.opentelemetry.semconv.UrlAttributes
import io.opentelemetry.semconv.ErrorAttributes
import io.opentelemetry.semconv.ServerAttributes
Expand All @@ -28,7 +27,6 @@ object OpenTelemetryDefaults {
private def requestAttributesBuilder(request: GenericRequest[_, _]): AttributesBuilder =
Attributes.builder
.put(HttpAttributes.HTTP_REQUEST_METHOD, request.method.method)
.put(UrlAttributes.URL_FULL, request.uri.toString())
.put(ServerAttributes.SERVER_ADDRESS, request.uri.host.getOrElse("unknown"))
.put(ServerAttributes.SERVER_PORT, request.uri.port.getOrElse(80))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,42 @@ class OpenTelemetryMetricsBackendTest extends AnyFlatSpec with Matchers with Opt
.find(_.getName.equals(name))
.head

it should "not include url.full in default request attributes to avoid high cardinality" in {
// given
val reader = InMemoryMetricReader.create()
val backend = OpenTelemetryMetricsBackend(stubAlwaysOk, spawnNewOpenTelemetry(reader))

// when
basicRequest.get(uri"http://127.0.0.1/foo?bar=1").send(backend)

// then
val metrics = reader.collectAllMetrics().asScala.toList
val metric = metrics.find(_.getName == OpenTelemetryMetricsBackend.DefaultLatencyHistogramName).value
metric.getHistogramData.getPoints.forEach { point =>
point.getAttributes.get(AttributeKey.stringKey("url.full")) shouldBe null
}
}

it should "include url.full when using requestAttributesWithFullUrl" in {
// given
val reader = InMemoryMetricReader.create()
val config = OpenTelemetryMetricsConfig(
spawnNewOpenTelemetry(reader),
requestAttributes = OpenTelemetryDefaults.requestAttributesWithFullUrl _
)
val backend = OpenTelemetryMetricsBackend(stubAlwaysOk, config)

// when
basicRequest.get(uri"http://127.0.0.1/foo?bar=1").send(backend)

// then
val metrics = reader.collectAllMetrics().asScala.toList
val metric = metrics.find(_.getName == OpenTelemetryMetricsBackend.DefaultLatencyHistogramName).value
metric.getHistogramData.getPoints.forEach { point =>
point.getAttributes.get(AttributeKey.stringKey("url.full")) shouldBe "http://127.0.0.1/foo?bar=1"
}
}

private[this] def specTest(metrics: List[MetricData], expectedMetricName: String): Unit = {
val metric = metrics.find(_.getName == expectedMetricName)
assert(
Expand Down
Loading