Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
0d5c59b
upgrade semantic convention
ppittle Oct 18, 2024
4e8d265
Use a builder pattern for resource attributes
ppittle Nov 5, 2024
59a6a9f
improve documentation
ppittle Dec 3, 2024
67c2b03
inline attribute strings and update obsolete attributes
ppittle Dec 3, 2024
d248279
Alternate strategy to simplify implementation
ppittle Dec 4, 2024
7658b78
renamed files to reflect decision to user simpler model for managing …
ppittle Dec 5, 2024
928f4f1
move the upgrade of AttributeHttpTarget to a new PR as this will requ…
ppittle Dec 5, 2024
b52cbc5
add new unit tests for SemanticConventionVersion switching
ppittle Dec 5, 2024
749f5dd
update AWS Lambda tests to use Semantic Convention 1.29
ppittle Dec 5, 2024
0c091f2
remove obsolete code
ppittle Dec 6, 2024
5204ab7
Update SetTag to be a no-op if attribute name is null or empty
ppittle Dec 6, 2024
a7be302
Update documentation and add documentation to README files
ppittle Dec 6, 2024
db38b54
run dotnet format
ppittle Dec 6, 2024
bc32e39
fix minor issues found by unit tests
ppittle Dec 7, 2024
31700b8
Update Instrumentation.AWS.Tests to use Semantic Convention 1.29
ppittle Dec 7, 2024
bb6315a
Change SemanticConventionVersion to track Semantic Convention versions
ppittle Dec 6, 2024
62e75e8
move depreication of AttributeHttpTarget to new PR
ppittle Dec 7, 2024
0387cb2
implement AttirbuteHttpTarget
ppittle Dec 7, 2024
071f0b3
update AWS Lambda tests to use Semantic Convention 1.29
ppittle Dec 7, 2024
f180dd2
change whitespace to improve readability
ppittle Dec 9, 2024
b7b251b
rebase change semnatic versions to track
ppittle Dec 10, 2024
2bc2930
adjust strategy to list attributes as obsolete and add additional Add…
ppittle Dec 10, 2024
82bae2a
change SemenaticCvonentionVersion strategy to pin to v1.27 - the curr…
ppittle Dec 10, 2024
0eb9e87
SemanticConventionsVersion is public in multiple repositories and so…
ppittle Dec 10, 2024
da6c620
run dotnet format
ppittle Dec 10, 2024
1a1f9d9
change AWSemanticConventions from a static to instances to improve te…
ppittle Dec 10, 2024
fc58a67
Update src/OpenTelemetry.Instrumentation.AWS/README.md
ppittle Dec 12, 2024
de586e4
Update changelog
ppittle Dec 13, 2024
671dfbf
change casing of
ppittle Dec 13, 2024
42a6d0a
inline documentation from opentelemetry.semanticconventions and remov…
ppittle Dec 13, 2024
d72c650
Update libraries to impelement Semantic Convention 1.28 and 1.29
ppittle Dec 17, 2024
abad591
no longer include common SemanticConventions file
ppittle Dec 19, 2024
189e873
drop the suffix expiremental in enum values and instead metnion exper…
ppittle Dec 19, 2024
d70a0c5
change strategy - beta version will default to Legacy (ie no change i…
ppittle Dec 19, 2024
8d75bfd
Update src/OpenTelemetry.Instrumentation.AWS/CHANGELOG.md
ppittle Dec 19, 2024
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
Prev Previous commit
Next Next commit
Alternate strategy to simplify implementation
  • Loading branch information
ppittle committed Dec 19, 2024
commit d24827905b7d64a044f6615dfe1714194df81968
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#nullable enable
OpenTelemetry.AWS.SemanticConventionVersion
OpenTelemetry.Instrumentation.AWS.AWSClientInstrumentationOptions
OpenTelemetry.Instrumentation.AWS.AWSClientInstrumentationOptions.AWSClientInstrumentationOptions() -> void
OpenTelemetry.Instrumentation.AWS.AWSClientInstrumentationOptions.SuppressDownstreamInstrumentation.get -> bool
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

using Amazon;
using Amazon.Runtime.Telemetry;
using OpenTelemetry.AWS;
using OpenTelemetry.Instrumentation.AWS;
using OpenTelemetry.Instrumentation.AWS.Implementation;
using OpenTelemetry.Instrumentation.AWS.Implementation.Tracing;
Expand Down Expand Up @@ -38,6 +39,8 @@ public static TracerProviderBuilder AddAWSInstrumentation(
var awsClientOptions = new AWSClientInstrumentationOptions();
configure?.Invoke(awsClientOptions);

AWSSemanticConventions.SemanticConventionVersion = awsClientOptions.SemanticConventionVersion;

_ = new AWSClientsInstrumentation(awsClientOptions);

AWSConfigs.TelemetryProvider.RegisterTracerProvider(new AWSTracerProvider());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#nullable enable
OpenTelemetry.AWS.SemanticConventionVersion
OpenTelemetry.Instrumentation.AWSLambda.AWSLambdaInstrumentationOptions
OpenTelemetry.Instrumentation.AWSLambda.AWSLambdaInstrumentationOptions.AWSLambdaInstrumentationOptions() -> void
OpenTelemetry.Instrumentation.AWSLambda.AWSLambdaInstrumentationOptions.DisableAwsXRayContextExtraction.get -> bool
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public Resource Detect()
{
var resourceAttributes =
new List<KeyValuePair<string, object>>(4)
.AddAttributeCloudProvider(AWSSemanticConventions.CloudProviderValuesAws)
.AddAttributeCloudProviderIsAWS()
.AddAttributeCloudRegion(AWSLambdaUtils.GetAWSRegion())
.AddAttributeFaasName(AWSLambdaUtils.GetFunctionName())
.AddAttributeFaasVersion(AWSLambdaUtils.GetFunctionVersion());
Expand Down
6 changes: 3 additions & 3 deletions src/OpenTelemetry.Resources.AWS/AWSEBSDetector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,9 @@ internal static List<KeyValuePair<string, object>> ExtractResourceAttributes(AWS
{
var resourceAttributes =
new List<KeyValuePair<string, object>>()
.AddAttributeCloudProvider(AWSSemanticConventions.CloudProviderValuesAws)
.AddAttributeCloudPlatform(AWSSemanticConventions.CloudPlatformValuesAwsElasticBeanstalk)
.AddAttributeServiceName(AWSSemanticConventions.ServiceNameValuesAwsElasticBeanstalk)
.AddAttributeCloudProviderIsAWS()
.AddAttributeCloudPlatformIsAwsElasticBeanstalk()
.AddAttributeServiceNameIsAwsElasticBeanstalk()
.AddAttributeServiceNamespace(metadata?.EnvironmentName)
.AddAttributeServiceInstanceID(metadata?.DeploymentId)
.AddAttributeServiceVersion(metadata?.VersionLabel);
Expand Down
4 changes: 2 additions & 2 deletions src/OpenTelemetry.Resources.AWS/AWSEC2Detector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ internal static List<KeyValuePair<string, object>> ExtractResourceAttributes(AWS
{
var resourceAttributes =
new List<KeyValuePair<string, object>>()
.AddAttributeCloudProvider(AWSSemanticConventions.CloudProviderValuesAws)
.AddAttributeCloudPlatform(AWSSemanticConventions.CloudPlatformValuesAwsEc2)
.AddAttributeCloudProviderIsAWS()
.AddAttributeCloudPlatformIsAwsEc2()
.AddAttributeHostName(hostName)
.AddAttributeCloudAccountID(identity?.AccountId)
.AddAttributeCloudAvailabilityZone(identity?.AvailabilityZone)
Expand Down
4 changes: 2 additions & 2 deletions src/OpenTelemetry.Resources.AWS/AWSECSDetector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ public Resource Detect()

var resourceAttributes =
new List<KeyValuePair<string, object>>()
.AddAttributeCloudProvider(AWSSemanticConventions.CloudProviderValuesAws)
.AddAttributeCloudPlatform(AWSSemanticConventions.CloudPlatformValuesAwsEcs);
.AddAttributeCloudProviderIsAWS()
.AddAttributeCloudPlatformIsAwsEcs();
try
{
var containerId = GetECSContainerId(AWSECSMetadataPath);
Expand Down
4 changes: 2 additions & 2 deletions src/OpenTelemetry.Resources.AWS/AWSEKSDetector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ public Resource Detect()
internal static List<KeyValuePair<string, object>> ExtractResourceAttributes(string? clusterName, string? containerId)
{
var resourceAttributes = new List<KeyValuePair<string, object>>()
.AddAttributeCloudProvider(AWSSemanticConventions.CloudProviderValuesAws)
.AddAttributeCloudPlatform(AWSSemanticConventions.CloudPlatformValuesAwsEks)
.AddAttributeCloudProviderIsAWS()
.AddAttributeCloudPlatformIsAwsEks()
.AddAttributeK8SClusterName(clusterName)
.AddAttributeContainerId(containerId);

Expand Down
194 changes: 194 additions & 0 deletions src/Shared/AWS/AWSSemanticConventions.Alt.Base.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@

using OpenTelemetry.SemanticConventions;


namespace OpenTelemetry.AWS;

// disable Style Warnings to improve readability of this specific file.
#pragma warning disable SA1124
#pragma warning disable SA1005
#pragma warning disable SA1514
#pragma warning disable SA1201
#pragma warning disable SA1623

internal static partial class AWSSemanticConventions
{
/// <summary>
/// Defines all Semantic Conventions used by AWS extension projects.
///
/// All values default to <c>string.Empty</c> and are then is only defined
/// in the first version specific class (ie <see cref="AWSSemanticConventions_v1_10"/>)
/// to use it. This helps ensure the attribute doesn't get used if the user has specified
/// a specific <see cref="SemanticConventionVersion"/>.
///
/// See <see cref="AWSSemanticConventions.GetSemanticConventionVersion"/> for details.
/// </summary>
private abstract class AWSSemanticConventionsBase
{
// CLOUD Attributes
/// <inheritdoc cref="CloudAttributes.AttributeCloudAccountId"/>
public virtual string AttributeCloudAccountID => string.Empty;
/// <inheritdoc cref="CloudAttributes.AttributeCloudAvailabilityZone"/>
public virtual string AttributeCloudAvailabilityZone => string.Empty;
/// <inheritdoc cref="CloudAttributes.AttributeCloudPlatform"/>
public virtual string AttributeCloudPlatform => string.Empty;
/// <inheritdoc cref="CloudAttributes.AttributeCloudProvider"/>
public virtual string AttributeCloudProvider => string.Empty;
/// <inheritdoc cref="CloudAttributes.AttributeCloudRegion"/>
public virtual string AttributeCloudRegion => string.Empty;
/// <inheritdoc cref="CloudAttributes.AttributeCloudResourceId"/>
public virtual string AttributeCloudResourceId => string.Empty;
/// <inheritdoc cref="CloudAttributes.CloudPlatformValues.AwsEc2"/>
public virtual string CloudPlatformValuesAwsEc2 => string.Empty;
/// <inheritdoc cref="CloudAttributes.CloudPlatformValues.AwsEcs"/>
public virtual string CloudPlatformValuesAwsEcs => string.Empty;
/// <inheritdoc cref="CloudAttributes.CloudPlatformValues.AwsEks"/>
public virtual string CloudPlatformValuesAwsEks => string.Empty;
/// <inheritdoc cref="CloudAttributes.CloudPlatformValues.AwsElasticBeanstalk"/>
public virtual string CloudPlatformValuesAwsElasticBeanstalk => string.Empty;
/// <inheritdoc cref="CloudAttributes.CloudProviderValues.Aws"/>
public virtual string CloudProviderValuesAws => string.Empty;

// CONTAINER Attributes
/// <inheritdoc cref="ContainerAttributes.AttributeContainerId"/>
public virtual string AttributeContainerID => string.Empty;

// DB Attributes
/// <inheritdoc cref="DbAttributes.AttributeDbSystem"/>
public virtual string AttributeDbSystem => string.Empty;
/// <inheritdoc cref="DbAttributes.DbSystemValues.Dynamodb"/>
public virtual string AttributeDynamoDb => string.Empty;

// AWS Attributes
/// <inheritdoc cref="AwsAttributes.AttributeAwsEcsContainerArn"/>
public virtual string AttributeEcsContainerArn => string.Empty;
/// <inheritdoc cref="AwsAttributes.AttributeAwsEcsClusterArn"/>
public virtual string AttributeEcsClusterArn => string.Empty;
/// <inheritdoc cref="AwsAttributes.AttributeAwsEcsLaunchtype"/>
public virtual string AttributeEcsLaunchtype => string.Empty;
/// <inheritdoc cref="AwsAttributes.AwsEcsLaunchtypeValues.Ec2"/>
public virtual string ValueEcsLaunchTypeEc2 => string.Empty;
/// <inheritdoc cref="AwsAttributes.AwsEcsLaunchtypeValues.Fargate"/>
public virtual string ValueEcsLaunchTypeFargate => string.Empty;
/// <inheritdoc cref="AwsAttributes.AttributeAwsEcsTaskArn"/>
public virtual string AttributeEcsTaskArn => string.Empty;
/// <inheritdoc cref="AwsAttributes.AttributeAwsEcsTaskFamily"/>
public virtual string AttributeEcsTaskFamily => string.Empty;
/// <inheritdoc cref="AwsAttributes.AttributeAwsEcsTaskRevision"/>
public virtual string AttributeEcsTaskRevision => string.Empty;
/// <inheritdoc cref="AwsAttributes.AttributeAwsLogGroupNames"/>
public virtual string AttributeLogGroupNames => string.Empty;
/// <inheritdoc cref="AwsAttributes.AttributeAwsLogGroupArns"/>
public virtual string AttributeLogGroupArns => string.Empty;
/// <inheritdoc cref="AwsAttributes.AttributeAwsLogStreamArns"/>
public virtual string AttributeLogStreamNames => string.Empty;
/// <inheritdoc cref="AwsAttributes.AttributeAwsLogStreamNames"/>
public virtual string AttributeLogStreamArns => string.Empty;
/// <inheritdoc cref="AwsAttributes.AttributeAwsDynamodbTableNames"/>
public virtual string AttributeAWSDynamoTableName => string.Empty;
/// <summary>
/// Not yet incorporated in Semantic Conventions repository.
/// </summary>
public virtual string AttributeAWSSQSQueueUrl => string.Empty;
/// <summary>
/// Not yet incorporated in Semantic Conventions repository.
/// </summary>
public virtual string AttributeAWSBedrockAgentId => string.Empty;
/// <summary>
/// Not yet incorporated in Semantic Conventions repository.
/// </summary>
public virtual string AttributeAWSBedrockDataSourceId => string.Empty;
/// <summary>
/// Not yet incorporated in Semantic Conventions repository.
/// </summary>
public virtual string AttributeAWSBedrockGuardrailId => string.Empty;
/// <summary>
/// Not yet incorporated in Semantic Conventions repository.
/// </summary>
public virtual string AttributeAWSBedrockKnowledgeBaseId => string.Empty;
/// <summary>
/// Not yet incorporated in Semantic Conventions repository.
/// </summary>
public virtual string AttributeAWSBedrock => string.Empty;

// FAAS Attributes
/// <inheritdoc cref="CloudAttributes.AttributeCloudResourceId"/>
public virtual string AttributeFaasID => string.Empty;
/// <inheritdoc cref="FaasAttributes.AttributeFaasInvocationId"/>
public virtual string AttributeFaasExecution => string.Empty;
/// <inheritdoc cref="FaasAttributes.AttributeFaasName"/>
public virtual string AttributeFaasName => string.Empty;
/// <inheritdoc cref="FaasAttributes.AttributeFaasVersion"/>
public virtual string AttributeFaasVersion => string.Empty;
/// <inheritdoc cref="FaasAttributes.AttributeFaasTrigger"/>
public virtual string AttributeFaasTrigger => string.Empty;
/// <inheritdoc cref="FaasAttributes.AttributeFaasColdstart"/>
public virtual string AttributeFaasColdStart => string.Empty;

// GEN AI Attributes
/// <inheritdoc cref="GenAiAttributes.AttributeGenAiRequestModel"/>
public virtual string AttributeGenAiModelId => string.Empty;
/// <inheritdoc cref="GenAiAttributes.AttributeGenAiSystem"/>
public virtual string AttributeGenAiSystem => string.Empty;

// HOST Attributes
/// <inheritdoc cref="HostAttributes.AttributeHostId"/>
public virtual string AttributeHostID => string.Empty;
/// <inheritdoc cref="HostAttributes.AttributeHostType"/>
public virtual string AttributeHostType => string.Empty;
/// <inheritdoc cref="HostAttributes.AttributeHostName"/>
public virtual string AttributeHostName => string.Empty;

// HTTP Attributes
/// <inheritdoc cref="HttpAttributes.AttributeHttpStatusCode"/>
public virtual string AttributeHttpStatusCode => string.Empty;
/// <inheritdoc cref="HttpAttributes.AttributeHttpResponseStatusCode"/>
public virtual string AttributeHttpResponseStatusCode => string.Empty;
/// <inheritdoc cref="HttpAttributes.AttributeHttpScheme"/>
public virtual string AttributeHttpScheme => string.Empty;
/// <inheritdoc cref="HttpAttributes.AttributeHttpTarget"/>
public virtual string AttributeHttpTarget => string.Empty;
/// <inheritdoc cref="HttpAttributes.AttributeHttpMethod"/>
public virtual string AttributeHttpMethod => string.Empty;
/// <inheritdoc cref="HttpAttributes.AttributeHttpRequestMethod"/>
public virtual string AttributeHttpRequestMethod => string.Empty;

// NET Attributes
/// <inheritdoc cref="NetAttributes.AttributeNetHostName"/>
public virtual string AttributeNetHostName => string.Empty;
/// <inheritdoc cref="NetAttributes.AttributeNetHostPort"/>
public virtual string AttributeNetHostPort => string.Empty;

// SERVER Attributes
/// <inheritdoc cref="ServerAttributes.AttributeServerAddress"/>
public virtual string AttributeServerAddress => string.Empty;
/// <inheritdoc cref="ServerAttributes.AttributeServerPort"/>
public virtual string AttributeServerPort => string.Empty;

// K8s Attributes
/// <inheritdoc cref="K8sAttributes.AttributeK8sClusterName"/>
public virtual string AttributeK8SClusterName => string.Empty;

// SERVICE Attributes
/// <inheritdoc cref="ServiceAttributes.AttributeServiceName"/>
public virtual string AttributeServiceName => string.Empty;
/// <inheritdoc cref="ServiceAttributes.AttributeServiceNamespace"/>
public virtual string AttributeServiceNamespace => string.Empty;
/// <inheritdoc cref="ServiceAttributes.AttributeServiceInstanceId"/>
public virtual string AttributeServiceInstanceID => string.Empty;
/// <inheritdoc cref="ServiceAttributes.AttributeServiceVersion"/>
public virtual string AttributeServiceVersion => string.Empty;
/// <summary>
/// Not yet incorporated in Semantic Conventions repository.
/// </summary>
public virtual string ServiceNameValuesAwsElasticBeanstalk => string.Empty;

// URL Attributes
/// <inheritdoc cref="UrlAttributes.AttributeUrlPath"/>
public virtual string AttributeUrlPath => string.Empty;
/// <inheritdoc cref="UrlAttributes.AttributeUrlQuery"/>
public virtual string AttributeUrlQuery => string.Empty;
/// <inheritdoc cref="UrlAttributes.AttributeUrlScheme"/>
public virtual string AttributeUrlScheme => string.Empty;
}
}
Loading