Skip to content

Instrumentation Patch Removal and SPI AWS SDK Test Addition #1120

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

anahatAWS
Copy link
Contributor

This is the final PR for the SPI aws-sdk instrumentation. It removes the opentelemetry-java-instrumentation patch and adds comprehensive unit test coverage for AWS experimental attributes in both AWS SDK v1.11 and v2.2 instrumentation packages. The v2.2 package introduces 29 new experimental attributes while v1.11 adds 23 new experimental attributes. All attributes are now tested through unit tests and/or contract tests.

Description of changes:

AWS SDK v2.2 (awssdk_v2_2)

New attributes being tested:

  1. AWS_BUCKET_NAME - testS3ExperimentalAttributes() & contract tests
  2. AWS_QUEUE_URL - testSqsExperimentalAttributes() & contract tests
  3. AWS_QUEUE_NAME - contract tests
  4. AWS_STREAM_NAME - testKinesisExperimentalAttributes() & contract tests
  5. AWS_STREAM_ARN - testKinesisExperimentalAttributes() & contract tests
  6. AWS_TABLE_NAME - testDynamoDbExperimentalAttributes()
  7. AWS_GUARDRAIL_ID - contract tests
  8. AWS_GUARDRAIL_ARN - contract tests
  9. AWS_AGENT_ID - testBedrockAgentExperimentalAttributes() & contract tests
  10. AWS_DATA_SOURCE_ID - testBedrockDataSourceExperimentalAttributes() & contract tests
  11. AWS_KNOWLEDGE_BASE_ID - testBedrockKnowledgeBaseExperimentalAttributes() & contract tests
  12. GEN_AI_MODEL - testBedrockExperimentalAttributes() & contract tests
  13. GEN_AI_SYSTEM - contract tests
  14. GEN_AI_REQUEST_MAX_TOKENS - testBedrockExperimentalAttributes() & contract tests
  15. GEN_AI_REQUEST_TEMPERATURE - testBedrockExperimentalAttributes() & contract tests
  16. GEN_AI_REQUEST_TOP_P - contract tests
  17. GEN_AI_RESPONSE_FINISH_REASONS - contract tests
  18. GEN_AI_USAGE_INPUT_TOKENS - contract tests
  19. GEN_AI_USAGE_OUTPUT_TOKENS - contract tests
  20. AWS_STATE_MACHINE_ARN - testStepFunctionExperimentalAttributes() & contract tests
  21. AWS_STEP_FUNCTIONS_ACTIVITY_ARN - testStepFunctionExperimentalAttributes() & contract tests
  22. AWS_SNS_TOPIC_ARN - testSnsExperimentalAttributes() & contract tests
  23. AWS_SECRET_ARN - testSecretsManagerExperimentalAttributes() & contract tests
  24. AWS_LAMBDA_NAME - testLambdaExperimentalAttributes()
  25. AWS_LAMBDA_ARN - testLambdaArnExperimentalAttribute()
  26. AWS_LAMBDA_RESOURCE_ID - testLambdaResourceIdExperimentalAttribute()
  27. AWS_TABLE_ARN - testTableArnExperimentalAttribute()
  28. AWS_AUTH_ACCESS_KEY - testAuthAccessKeyExperimentalAttribute()
  29. AWS_AUTH_REGION - testAuthRegionExperimentalAttribute()
  • Tests leverage AWS SDK v2's getValueForField() API for clean, mockable attribute extraction
  • Includes comprehensive testing for:
    • Core AWS services (S3, DynamoDB, SQS, SNS, Kinesis, Lambda, Step Functions, Secrets Manager)
    • Bedrock Gen AI attributes with JSON parsing validation
    • Bedrock resource attributes (Agent, Knowledge Base, Data Source)
    • Authentication attributes (access key, region)

AWS SDK v1.11 (awssdk_v1_11)

New attributes being tested:

  1. AWS_STREAM_ARN - testKinesisExperimentalAttributes() & contract tests
  2. AWS_TABLE_ARN - testTableArnExperimentalAttributes() (Service identification only)
  3. AWS_AGENT_ID - contract tests
  4. AWS_KNOWLEDGE_BASE_ID - contract tests
  5. AWS_DATA_SOURCE_ID - contract tests
  6. AWS_GUARDRAIL_ID - testBedrockGuardrailAttributes() (Service identification only) & contract tests
  7. AWS_GUARDRAIL_ARN - testBedrockGuardrailAttributes() (Service identification only) & contract tests
  8. AWS_BEDROCK_RUNTIME_MODEL_ID - testBedrockRuntimeAttributes() (Service identification only) & contract tests
  9. AWS_BEDROCK_SYSTEM - contract tests
  10. GEN_AI_REQUEST_MAX_TOKENS - contract tests
  11. GEN_AI_REQUEST_TEMPERATURE - contract tests
  12. GEN_AI_REQUEST_TOP_P - contract tests
  13. GEN_AI_RESPONSE_FINISH_REASONS - contract tests
  14. GEN_AI_USAGE_INPUT_TOKENS - contract tests
  15. GEN_AI_USAGE_OUTPUT_TOKENS - contract tests
  16. AWS_STATE_MACHINE_ARN - testStepFunctionsExperimentalAttributes() & contract tests
  17. AWS_STEP_FUNCTIONS_ACTIVITY_ARN - contract tests
  18. AWS_SNS_TOPIC_ARN - testSnsExperimentalAttributes() & contract tests
  19. AWS_SECRET_ARN - testSecretsManagerExperimentalAttributes() (Service identification only) & contract tests
  20. AWS_LAMBDA_NAME - testLambdaNameExperimentalAttributes()
  21. AWS_LAMBDA_ARN - testLambdaArnExperimentalAttributes()
  22. AWS_LAMBDA_RESOURCE_ID - testLambdaResourceIdExperimentalAttributes() (Service identification only)
  23. AWS_AUTH_ACCESS_KEY - testAuthAccessKeyAttributes()

V1.11 is harder to test:

V1.11 uses Java reflection to dynamically find and call methods like getFunctionName() on AWS request objects at runtime. This creates several testing challenges:

  • Mock Method Mismatch: When you mock an AWS request object, it doesn't have the actual methods that reflection is trying to find. The reflection silently fails and returns null, making tests pass even though no attributes were extracted.
  • Class Dependencies: To test properly, you'd need real AWS SDK classes instead of mocks, creating tight coupling between tests and external dependencies.
  • Nested Object Complexity: Many attributes require traversing nested properties, which means mocking entire object graphs with proper method chains.

Contract tests sidestep these issues by using real AWS SDK objects against LocalStack, testing the complete end-to-end flow including actual reflection behavior without the complexity of mocking Java's reflection system.

Related

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@anahatAWS anahatAWS requested a review from a team as a code owner July 25, 2025 18:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant