- Upgrade AWS SDK v2 to 2.30 and other dependencies for CVE fixes (#451) PR 451
- Support extracting X-Ray Trace Id via SdkInternalThreadLocal in Lambda Segment Context (#433) PR 433
- Bump aws-java-sdk-core api version to 1.12.788 in AWS SDK for Java v1 Instrumentation (#430) PR 430
- Remove AWS SDK v1 Dependency from X-Ray SDK Core (#428) PR 428
- Handle unknown fields in sampler APIs response. (#425) PR 425
- Update aws-java-sdk-xray version dependency. (#413) PR 413
- Remove testing logs (#411) PR 411
- Support Lambda PassThrough trace header propagation (#409) PR 409
- Send NoOp segment when trace header is incomplete in Lambda Context PR 403
- Do not propagate trace header if dummy subsegment PR 404
- Bump aws-java-sdk-core version to 1.12.708 PR 401
- Fixed TracingInterceptor to take effect only one time PR 399
- Fixing S3 bucket name extraction for AWS SDK V2 PR 393
- Remove usage of deprecated jackson property PR 391
- Optimize default resolver chain construction PR 387
- Refactored AWSXRayServletFilter - not to use deprecated method for strategy creation PR 386
- Bumping grgit version PR 385
- Use jackson to snake case for better performance PR 382
- Thread safety PR 383
- Add support for Jakarta and Spring 6 PR 372
- Fix sqs/sns case for aws sdk v2 parameter allowlist lookups PR 373
- Fixing NoClassDefFoundError PR 375
- Oversampling Mitigation PR 356
- Add back original subsegment noOp method PR 359
- Adding back depricated functions PR 360
- Refactoring TraceHeader Calls PR 361
- Allow list TopicArn for SNS Publish and PublishBatch PR 357
- Oversampling mitigation PR 354
- Change missing context default behavior to log error PR 353
- Revert subsegment synchronization changes PR 350
- Update README with manual configuration for log groups PR 349
- Add Nullable annotation to AWSXray.setTraceEntity() parameter PR 345
- Add javadoc to Subsegment.close() method PR 342
- Send subsegments separately from segments when the serialized size is larger than the UDP packet size limit PR 344
- Improve the emitter sendData failure log message PR 343
- Throw ClientProtocolException instead of returning null to avoid possible NPE in Apache HTTP instrumentation PR 338
- Upgrade AWS Java SDK to 1.12.228 PR 334
- Revert some dependency versioning. Set duplicatesStrategy for benchmark project. PR 336
- Update Spring dependencies to address cve-2022-22965 PR 329
- Update log4j to 2.17 to address CVE-2021-45105 PR 314
- Adding GraalVM native-image config PR 311
- Reduce log level of sampling error logging PR 309
- Optimize the lock in segment PR 306
- Optimize the regex in util method PR 305
- Add Automatic-Module-Name to JAR Manifest PR 297
- Improvements to no-op subsegment behavior PR 294
- Prevent crashes on serializing empty beans PR 293
- Opt-in support to collect SQL queries PR 283
- Improve handling of entity
emittedfield PR 279 - Remove global subsegment lock to fix race condition PR 278
- Updated Apache HTTP and AWS SDK versions PR 277
- Added aggregate javadoc plugin PR 242
- Configurtion to always create trace ID PR 243
- Fix sampling rules not being deleted PR 244
- Lock accesses to entities PR 250
- Added support for reading header from environment and system properties PR 252
- Added log correlation support to ECS plugin PR 263
- Added JavaTimeModule for entity object mapper PR 267
- Addded enhanced metadata parsing for Oracle DBs PR 270
- Added support to set log group via environment variable PR 273
- Optimized creating, parsing, and serializing trace IDs PR 212
- Fixed setParent behavior for NoOp subsegments PR 215
- Added a faster random source configuration PR 218
- Lowered log level on IMDS error messages PR 219
- Removed nanosecond-time resolution where unneeded for performance PR 224
- Fixed log error context missing strategy stack traces PR 235
- Added isForcedSampling support configurability to sampling strategies PR 232
- Add top-level method for context-free endSubsegment PR 229
- Add ThreadLocal-safe Entity.run() method PR 240
- Fix ClassCastException caused by change in 2.7.0 PR 202
- Add rule_name attribute to segments made with beginSegmentWithSampling PR 204
- Add beginSegmentWithSampling API PR 196
- Changed containerId to container_id in ECS plugin PR 195
- Improved performance of withDefaultPlugins PR 194
- Reduced timeout and logging from IMDS failure PR 192
- Debug log the stacktrace for LOG_ERROR strategy PR 191
- Made SqlSubsegments class exception-safe PR 189
- Added utility class for creating SQL subsegments PR 186
- Deprecated Dummy(Sub)Segments in favor of NoOps PR 183
- Return no-op segments instead of null when context isn't found PR 180
- Fixed behavior of exception throwing on invalid address in DaemonConfig PR 179
- Fixed bug where subsegments operations used a different lock PR 182
- Changed AWS SDKs to runtime dependencies in AWS SDK instrumentation modules PR 167
- Fixed JSON parsing logic for Centralized Sampling PR 171
- Added calls to X-Ray daemon for rules/targets with a simple JDK-based client PR 145
- Added a public API for creating Emitter without exposing implementation details PR 146
- Exposed sampling manifest URL for testing PR 149
- Added utility executors for context propagation PR 150
- Modified exception handling in UDPEmitter PR 151
- Added more safety in UnsignedXrayClient PR 154
- Added IMDSv2 Support PR 155
- Applied checkstyle and prepare for license header check PR 156
- Avoid String.split when parsing header to reduce garbage generation PR 160
- Modified support for allocate new traceID when traceID parse fail PR 161
- Use singleton SecureRandom PR 162
- Added Spring interceptor without Spring data dependency PR 115
- Handled null responses in sampling API requests PR 122
- Fix NPE while handling LOG_ERROR in Spring module PR 125
- Support trace ID injection during context propagation PR 127
- Added IgnoreContextMissingStrategy PR 129
- Fixed implementation of isWrapperFor and unwrap PR 131
- Fixed subsegment streaming in Lambda PR 133
- Added fully qualified & configurable trace ID injection PR 135
- Fixed implementation of TracingStatement when no segment present PR 137
- Improved Docker ID discovery in DockerUtils PR 141
- Performance improvements to equals and hashcode usages PR 142
- Fix tags in pom.xml PR 83
- Add default protected constructor for HTTPClientBuilder PR 90
- Add subtree streaming for subsegments PR 91
- Add a benchmarking package for timing PR 75
- Capture throwables instead of just errors in XRayServletFilter PR 100
- Change sonatype endpoint to dedicated AWS one PR 105
- Add generic SQL recorder module PR 107
- Add support for segment-level metrics and integration with logs
PR 110
- Add log4j module
- Add slf4j module
- Add metrics module
- Upgrade Maven Javadoc plugin & disable javadoc linting PR 111
- Add SNS service to AWS SDK operation whitelist JSON PR 85
- Allow specification of Daemon configuration in UDPEmitter PR 80
- Add support for JDK 11 PR 78
- Make TraceInterceptor.entityKey public PR 73
- Fixed BOM package to include new artifacts introduced in 2.2.0.
- Fixed a race condition with sampling reservoir. PR 47
- Cleaned up some duplicated code around handling context missing strategy. PR 50
- Fixed a race condition with sampling reservoir that could lead to
IndexOutOfBoundsException. PR 52 - Fixed a race condition where the
AWSXRayServletFilterwould eagerly retrieve the global recorder on instantiation, causing custom recorders to sometimes be ignored. PR 53 - Added support for instrumenting the AWS SDK for Java V2. PR 56
- Fixed an issue where segments were not being cleaned up when servlets were processed asynchronously. PR 57
- Fixed an issue where extra recorders were created when using
CentralizedSamplingStrategywithout a plugin setting an origin value. PR 59
- Fixed a race condition on sampling pollers start.
- The sampling pollers now also log
Errorin addition toException. - Added a public API to
CentralizedSamplingStrategyto shutdown pollers for clean exit. - Fixed a race condition between
TracingHandlerandAWSXRayRecorderwhich could cause an NPE on AWS calls capture. ISSUE29 - Fixed a NPE bug in spring X-Ray interceptor when context is missing. ISSUE41
- Fixed a NPE bug in
DaemonConfigwhen system property is used to set up the daemon address. ISSUE40 - Removed an unused dependency. ISSUE39
- Removed unnecessary credentials retrieval for AWS client used by sampling pollers. PR34
- Fixed the UDP address setter not work correctly on
DaemonConfig. - Catching an NPE when the SDK property file is not reachable on unit tests.
- Fixed a bug that caused XRay sampling rules fetching to fail when AWS SDK instrumentor is included. ISSUE25
- Default Sampling Strategy has been updated to Centralized Sampling Strategy which gets sampling rules from X-Ray backend instead of from a static JSON file. More Information
- Implement two new class
RulePollerandTargetPollerto periodically updating sampling rules and sampling targets through TCP connection. - Fallback to Localized Sampling Strategy when centralized sampling rules are not available.
- In order to disable Centralized Sampling Strategy, provide
withSamplingStrategywith Localized one. - Update
DefaultSamplingRules.jsonfile. i.e.service_namehas been replaced tohostandversionchanged to2. SDK still supportsv1JSON file. Ifv1version JSON has been provided,shouldTracewill treatservice_namevalue ashostvalue. - Update
shouldTracemethod to take only one parameter defined insamplingRequest. - Add a new class called
DaemonConfigurationand both classesUDPEmitterandXRayClientare depending on it.setDaemonAddressmethod has been moved to classDaemonConfiguration.
- Environment variable
AWS_TRACING_DAEMON_ADDRESSnow takes a value of the form '127.0.0.1:2000' or 'tcp:127.0.0.1:2000 udp:127.0.0.2:2001'. The former one means UDP and TCP are running at the same address and the later one specify individual addresses for TCP and UDP connection. By default it assumes a X-Ray daemon running at 127.0.0.1:2000 listening to both UDP and TCP traffic. - Update
DefaultOperationParameterWhitelist.jsonwith S3 support. PR9 - Update
READMEwith correctdefaultRecordermethod. PR10 - Link scorekeep sample application in
README. PR12 - Add missing open sourcing standard files. PR14
- Add travis CI. PR16
- Update
getUrlmethod do not concatenate if the url in request is already absolute. PR20
- Fixed a bug in
AbstractXRayInterceptorso thatgenerateMetadatacan be overriden. PR6
- Support for Spring Framework which enables the usage of aspects to trace requests down a call stack. Classes can either implement an interface or be annotated to identify themselves as available to the aspect for tracing. PR1
- Fixed a bug which caused certain non-sampled segments to be emitted to the X-Ray daemon. This issue occurred only when the segment began as sampled and was manually overridden to non-sampled using
setSampled(false).
- Fixed a bug in the exception serialization logic that occurred when an added exception had one or more 'cause' exceptions.
- Additional methods added to the
SegmentContextinterface. TheSegmentContextinterface now supports overriding logic for beginning and ending aSegment. This allows customers to use an alternative toThreadLocalvalues to passSegmentContextthroughout program execution.
- Various string fixes.
- Exposed the exceptionless version of the
close()method on the more genericEntitytype. Generic types may now be used in try-with-resources blocks without requiring acatchblock. - Ignoring subsegment generation on S3 presign request API call.
- Attempting to modify or re-emit a
Segmentnow throws an uncheckedAlreadyEmittedException.
- Fixed a concurrent modification exception which occured when many exceptions were being added to a single subsegment at once.
- Various string fixes.
- Configuration values set using the environment variables
AWS_XRAY_TRACING_NAME,AWS_XRAY_CONTEXT_MISSING, andAWS_XRAY_DAEMON_ADDRESScan now also be set using Java system properties.- The corresponding property keys are
-Dcom.amazonaws.xray.strategy.tracingName,-Dcom.amazonaws.xray.strategy.contextMissingStrategy, and-Dcom.amazonaws.xray.emitters.daemonAddressrespectively. - Configuration values set using environment variables take precedence over those set using Java system properties, in turn taking precedence over any configuration values set in code.
- The corresponding property keys are
- Modification or re-emittance of segments or subsegments after they have already been emitted to the X-Ray daemon now results in an AlreadyModifiedException / log message (depending on the
ContextMissingStrategyin use).
- Support for tracing within AWS Lambda functions
- The provided AWSXRayServletFilter now supports asynchronous
HttpServletRequests
- Subsegments representing calls to S3 that result in status codes 304 or 412 will no longer be considered as
faults. - Information about the runtime environment (JVM name and version) is now added to segments under the
servicenamespace.
- Added an additional constructor to
DefaultThrowableSerializationStrategythat allows overriding of theThrowablesuperclass types which are considered to be remote. - Added more runtime information to the
aws.xraynamespace on segments. - Added a
ContextMissingStrategymember to theAWSXRayRecorderclass. This allows configuration of the exception behavior exhibited when trace context is not properly propagated. The behavior can be configured in code. Alternatively, the environment variableAWS_XRAY_CONTEXT_MISSINGcan be used (overrides any modes set in code). Valid values for this environment variable are currently (case insensitive)RUNTIME_ERRORandLOG_ERROR. The default behavior remains,DefaultContextMissingStrategyextendsRuntimeErrorContextMissingStrategy; i.e. by default, an exception will be thrown on missing context.
- BREAKING Changed the
currentEntityIdandcurrentTraceIdmethods from static to instance-level methods, in order to have them support the configurablecontextMissingBehavior.
- BREAKING Removed support for the
XRAY_TRACING_NAMEenvironment variable. - BREAKING Removed the use of
InheritableThreadLocalvalues to store trace context, in favor of regularThreadLocalvalues. This change was made to improve the safety of the way the SDK interacts with thread pools and other collections of long-lived threads. - Removed behavior in which calls to
AWSXRayRecorder.getThreadLocal()would throw aSegmentNotFoundExceptionwhen the thread local value contained null. The method now returns null instead of throwing an exception.
- Added the
getCurrentSegmentOptionalandgetCurrentSubsegmentOptionalmethods to theAWSXRayandAWSXRayRecorderclasses. - Added pertinent parameters to subsegments wrapping AWS Lambda Invoke and InvokeAsync operations.
- Added the
beginDummySegment()method to theAWSXRayclass.
- Changed the
sdkkey tosdk_versionin theaws.xraysegment property. - Changed the
getCurrentSegmentmethod in theAWSXRayRecorderclass to throw aSegmentNotFoundExceptionif no segment is found. - Changed the behavior of the
LocalizedSamplingStrategyclass to require that all loaded sampling rule JSON files include defaultfixed_targetandratevalues under thedefaultnamespace. The file must now be versioned, this release supports"version": 1of the sampling rules document.- An example is provided in
aws-xray-recorder-sdk-core/src/main/resources/com/amazonaws/xray/strategy/sampling/DefaultSamplingRules.json.
- An example is provided in
- Changed the behavior of the
aws-xray-recorder-sdk-apache-httpsubmodule to flag its generated subsegments with error/throttle/fault values based on response codes received from downstream HTTP services.
- Removed the
attribute_names_substitutedkey that was previously added to subsegments wrapping some DynamoDB operations. - Removed the single
URLparameter constructor from theDefaultSamplingStrategyclass. To pass a custom sampling rules file, use theLocalizedSamplingStrategy.
- Fixed a bug where the continuous injection of thread-local values to other threads caused a memory leak. This change removes the
TraceReferenceclass.AWSXRayRecorder.infectThreadLocalis renamed toAWSXRayRecorder.injectThreadLocal.AWSXRayRecorder.getThreadLocal()now returns anEntityrather than aTraceReference.AWSXRayRecorder.injectThreadLocal(Entity entity)now accepts anEntityrather than aTraceReference.
- No change
- Added the
SegmentNamingStrategyinterface. Instantation of theAWSXRayServletFilternow requires an instance ofSegmentNamingStrategy. A shorthand constructor which accepts a singleStringis also provided to simplify use of theFixedSegmentNamingStrategy. - Added the
FixedSegmentNamingStrategyandDynamicSegmentNamingStrategystrategies.
- Fixed a bug in the behavior of the custom pattern generation used in sampling rules and the
DynamicNamingStrategy. - Changed the segment key under which the SDK version is recorded to "xray".
- Fixed a bug whereby segments with more than 100 subsegments were not properly being streamed to the service.
- Changed the behavior of the
setErrormethod in theEntityImplclass to no longer also modify thefaultvalue. - Changed the environment variable key to modify the target daemon address / port to
AWS_XRAY_DAEMON_ADDRESS. The value is expected to be of the formip:port. - Changed the environment variable key to override the segment name from
XRAY_TRACING_NAMEtoAWS_XRAY_TRACING_NAME. (XRAY_TRACING_NAMEwill still be supported until the non-beta release). - Moved the
precursor_idsproperty to be a member of only theSubsegmenttype.
- Added the SDK version to generated segment documents.
- Added functionality to the
DummySegmentclass in order to pass the Trace ID to downstream services in all cases, including those in which the current request is not sampled.
- Fixed a bug in AWSXRayServletFilter that prevented the creation of subsegments for some services running behind ALBs.
- Updated the dependency on
com.amazonaws:aws-java-sdk-corefrom version 1.11.60 to 1.11.67. - Modified the signatures of the
close()methods forSegmentImplandSubsegmentImplto not throw any exceptions.
- Removed redundant HTTP status code parsing logic from the
apache-httpsubmodule. The AWS X-Ray service handles setting the fault, error, and throttle flags based on subsegments' provided HTTP status code.