Skip to content

Commit 3b01d1d

Browse files
committed
Use new faas attributes #3086
1 parent dc6cf9e commit 3b01d1d

File tree

12 files changed

+100
-4
lines changed

12 files changed

+100
-4
lines changed

opentelemetry-dotnet-contrib.sln

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AWS", "AWS", "{02EA681E-C7D
416416
src\Shared\AWS\AWSSemanticConventions.Legacy.cs = src\Shared\AWS\AWSSemanticConventions.Legacy.cs
417417
src\Shared\AWS\AWSSemanticConventions.v1.28.0.cs = src\Shared\AWS\AWSSemanticConventions.v1.28.0.cs
418418
src\Shared\AWS\AWSSemanticConventions.v1.29.0.cs = src\Shared\AWS\AWSSemanticConventions.v1.29.0.cs
419+
src\Shared\AWS\AWSSemanticConventions.v1.38.0.cs = src\Shared\AWS\AWSSemanticConventions.v1.38.0.cs
419420
src\Shared\AWS\SemanticConventionVersion.cs = src\Shared\AWS\SemanticConventionVersion.cs
420421
EndProjectSection
421422
EndProject
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
OpenTelemetry.Instrumentation.AWS.SemanticConventionVersion.V1_38_0 = 3 -> OpenTelemetry.Instrumentation.AWS.SemanticConventionVersion
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
OpenTelemetry.Instrumentation.AWSLambda.SemanticConventionVersion.V1_38_0 = 3 -> OpenTelemetry.Instrumentation.AWSLambda.SemanticConventionVersion

src/OpenTelemetry.Instrumentation.AWSLambda/CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22

33
## Unreleased
44

5+
* Switch to `fass.function.id` rather than `cloud.resource.id` for the resource signal.
6+
([#3087](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/3087))
7+
* Switch to `faas.instance.id` rather than `faas.instance` for the span and resource signals.
8+
([#3087](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/3087))
9+
* Remove `faas.name` & `faas.version` from the resource signal as the identifying attribute is not available.
10+
([#3087](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/3087))
11+
512
## 1.12.1
613

714
Released 2025-Sep-03

src/OpenTelemetry.Instrumentation.AWSLambda/Implementation/AWSLambdaResourceDetector.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,8 @@ public Resource Detect()
2626
.AttributeBuilder
2727
.AddAttributeCloudProviderIsAWS()
2828
.AddAttributeCloudRegion(AWSLambdaUtils.GetAWSRegion())
29-
.AddAttributeFaasName(AWSLambdaUtils.GetFunctionName())
30-
.AddAttributeFaasVersion(AWSLambdaUtils.GetFunctionVersion())
3129
.AddAttributeFaasInstance(AWSLambdaUtils.GetFunctionInstance())
30+
.AddAttributeFaasInstanceId(AWSLambdaUtils.GetFunctionInstance())
3231
.AddAttributeFaasMaxMemory(AWSLambdaUtils.GetFunctionMemorySize())
3332
.Build();
3433

src/OpenTelemetry.Instrumentation.AWSLambda/Implementation/AWSLambdaUtils.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,10 +175,12 @@ internal IEnumerable<KeyValuePair<string, object>> GetFunctionTags<TInput>(TInpu
175175
.AttributeBuilder
176176
.AddAttributeFaasTrigger(GetFaasTrigger(input))
177177
.AddAttributeFaasColdStart(isColdStart)
178+
.AddAttributeFaasFunctionID(GetFaasId(functionArn))
178179
.AddAttributeFaasName(GetFunctionName(context))
179180
.AddAttributeFaasExecution(context.AwsRequestId)
180181
.AddAttributeFaasID(GetFaasId(functionArn))
181182
.AddAttributeFaasInstance(GetFunctionInstance(context))
183+
.AddAttributeFaasInstanceId(GetFunctionInstance(context))
182184
.AddAttributeFaasMaxMemory(GetFunctionMemorySize(context))
183185
.AddAttributeCloudAccountID(GetAccountId(functionArn))
184186
.Build();
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
OpenTelemetry.Resources.AWS.SemanticConventionVersion.V1_38_0 = 3 -> OpenTelemetry.Resources.AWS.SemanticConventionVersion

src/Shared/AWS/AWSSemanticConventions.Base.cs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,35 @@ private abstract class AWSSemanticConventionsBase
367367
/// </remarks>
368368
public virtual string AttributeFaasID => string.Empty;
369369

370+
/// <summary>
371+
/// Cloud provider-specific native identifier of the monitored cloud resource (e.g. an <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">ARN</a> on AWS, a <a href="https://learn.microsoft.com/rest/api/resources/resources/get-by-id">fully qualified resource ID</a> on Azure, a <a href="https://cloud.google.com/apis/design/resource_names#full_resource_name">full resource name</a> on GCP).
372+
/// </summary>
373+
/// <remarks>
374+
/// On some cloud providers, it may not be possible to determine the full ID at startup,
375+
/// so it may be necessary to set <c>cloud.resource_id</c> as a span attribute instead.
376+
/// <p>
377+
/// The exact value to use for <c>cloud.resource_id</c> depends on the cloud provider.
378+
/// The following well-known definitions MUST be used if you set this attribute and they apply:
379+
/// <p>
380+
/// <ul>
381+
/// <li><strong>AWS Lambda:</strong> The function <a href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">ARN</a>.
382+
/// Take care not to use the "invoked ARN" directly but replace any
383+
/// <a href="https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html">alias suffix</a>
384+
/// with the resolved function version, as the same runtime instance may be invocable with
385+
/// multiple different aliases.</li>
386+
/// <li><strong>GCP:</strong> The <a href="https://cloud.google.com/iam/docs/full-resource-names">URI of the resource</a></li>
387+
/// <li><strong>Azure:</strong> The <a href="https://docs.microsoft.com/rest/api/resources/resources/get-by-id">Fully Qualified Resource ID</a> of the invoked function,
388+
/// <em>not</em> the function app, having the form
389+
/// <c>/subscriptions/<SUBSCRIPTION_GUID>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<FUNCAPP>/functions/<FUNC></c>.
390+
/// This means that a span attribute MUST be used, as an Azure function app can host multiple functions that would usually share
391+
/// a TracerProvider.</li>
392+
/// </ul>
393+
/// </remarks>
394+
/// <remarks>
395+
/// FaasAttributes.AttributeFaasFunctionId
396+
/// </remarks>
397+
public virtual string AttributeFaasFunctionId => string.Empty;
398+
370399
/// <summary>
371400
/// The invocation ID of the current function invocation.
372401
/// </summary>
@@ -448,6 +477,14 @@ private abstract class AWSSemanticConventionsBase
448477
/// </remarks>
449478
public virtual string AttributeFaasInstance => string.Empty;
450479

480+
/// <summary>
481+
/// The execution environment ID as a string, that will be potentially reused for other invocations to the same function/function version.
482+
/// </summary>
483+
/// <remarks>
484+
/// FaasAttributes.AttributeFaasInstanceId
485+
/// </remarks>
486+
public virtual string AttributeFaasInstanceId => string.Empty;
487+
451488
/// <summary>
452489
/// The amount of memory available to the serverless function converted to Bytes.
453490
/// </summary>

src/Shared/AWS/AWSSemanticConventions.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,10 @@ public AttributeBuilderImpl AddAttributeLogStreamArns(object? value, bool addIfE
270270
public AttributeBuilderImpl AddAttributeFaasID(object? value, bool addIfEmpty = false) =>
271271
this.awsSemanticConventions.Add(this, x => x.AttributeFaasID, value, addIfEmpty);
272272

273+
/// <inheritdoc cref="AWSSemanticConventionsBase.AttributeFaasID"/>
274+
public AttributeBuilderImpl AddAttributeFaasFunctionID(object? value, bool addIfEmpty = false) =>
275+
this.awsSemanticConventions.Add(this, x => x.AttributeFaasFunctionId, value, addIfEmpty);
276+
273277
/// <inheritdoc cref="AWSSemanticConventionsBase.AttributeFaasExecution"/>
274278
public AttributeBuilderImpl AddAttributeFaasExecution(object? value, bool addIfEmpty = false) =>
275279
this.awsSemanticConventions.Add(this, x => x.AttributeFaasExecution, value, addIfEmpty);
@@ -294,6 +298,10 @@ public AttributeBuilderImpl AddAttributeFaasColdStart(object? value, bool addIfE
294298
public AttributeBuilderImpl AddAttributeFaasInstance(object? value, bool addIfEmpty = false) =>
295299
this.awsSemanticConventions.Add(this, x => x.AttributeFaasInstance, value, addIfEmpty);
296300

301+
/// <inheritdoc cref="AWSSemanticConventionsBase.AttributeFaasInstanceId"/>
302+
public AttributeBuilderImpl AddAttributeFaasInstanceId(object? value, bool addIfEmpty = false) =>
303+
this.awsSemanticConventions.Add(this, x => x.AttributeFaasInstanceId, value, addIfEmpty);
304+
297305
/// <inheritdoc cref="AWSSemanticConventionsBase.AttributeFaasMaxMemory"/>
298306
public AttributeBuilderImpl AddAttributeFaasMaxMemory(object? value, bool addIfEmpty = false) =>
299307
this.awsSemanticConventions.Add(this, x => x.AttributeFaasMaxMemory, value, addIfEmpty);
@@ -494,6 +502,8 @@ private AWSSemanticConventionsBase GetSemanticConventionVersion()
494502
switch (this.semanticConventionVersion)
495503
{
496504
case SemanticConventionVersion.Latest:
505+
case SemanticConventionVersion.V1_38_0:
506+
return new AWSSemanticConventions_V1_38_0();
497507
case SemanticConventionVersion.V1_29_0:
498508
return new AWSSemanticConventions_V1_29_0();
499509

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
namespace OpenTelemetry.AWS;
5+
6+
// disable Style Warnings to improve readability of this specific file.
7+
#pragma warning disable SA1124
8+
#pragma warning disable SA1005
9+
#pragma warning disable SA1514
10+
#pragma warning disable SA1201
11+
#pragma warning disable SA1516
12+
13+
internal partial class AWSSemanticConventions
14+
{
15+
/// <summary>
16+
/// Open Telemetry Semantic Conventions as of 1.29.0:
17+
/// https://github.com/open-telemetry/semantic-conventions/releases/tag/v1.29.0.
18+
/// </summary>
19+
private class AWSSemanticConventions_V1_38_0 : AWSSemanticConventions_V1_29_0
20+
{
21+
public override string AttributeFaasInstanceId => "faas.instance.id";
22+
public override string AttributeFaasInstance => string.Empty;
23+
public override string AttributeFaasFunctionId => "faas.function.id";
24+
public override string AttributeFaasID => string.Empty;
25+
}
26+
}

0 commit comments

Comments
 (0)