diff --git a/src/Elastic.Apm/OpenTelemetry/ElasticActivityListener.cs b/src/Elastic.Apm/OpenTelemetry/ElasticActivityListener.cs index 0ebbe1fdc..d045e8ceb 100644 --- a/src/Elastic.Apm/OpenTelemetry/ElasticActivityListener.cs +++ b/src/Elastic.Apm/OpenTelemetry/ElasticActivityListener.cs @@ -228,9 +228,20 @@ private static void UpdateOTelAttributes(Activity activity, OTel otel) { if (!activity.TagObjects.Any()) return; + // https://opentelemetry.io/docs/specs/otel/common/#attribute-limits + // copy max 128 keys and truncate values to 10k chars (the current maximum for e.g. statement.db). + var i = 0; otel.Attributes ??= new Dictionary(); foreach (var (key, value) in activity.TagObjects) - otel.Attributes[key] = value; + { + if (i >= 128) break; + + if (value is string s) + otel.Attributes[key] = s.Truncate(10_000); + else + otel.Attributes[key] = value; + i++; + } } private static void UpdateSpan(Activity activity, Span span)