38 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
| # OpenTelemetry Java Agent Features
 | |
| 
 | |
| This lists out some of the features specific to java agents that OpenTelemetry Auto Instrumentation
 | |
| provides.
 | |
| 
 | |
| - Bundled exporters
 | |
|   - [OTLP](https://opentelemetry.io/docs/specs/otlp/)
 | |
|   - Console
 | |
|   - Zipkin
 | |
| - Bundled propagators
 | |
|   - [W3C TraceContext / Baggage](https://www.w3.org/TR/trace-context/)
 | |
|   - All Java [trace propagator extensions](https://github.com/open-telemetry/opentelemetry-java/tree/main/extensions/trace-propagators)
 | |
| - Environment variable configuration as per [spec](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md)
 | |
|   - Additional support for system properties for same variables by transforming UPPER_UNDERSCORE -> lower.dot
 | |
|   - Ability to disable individual instrumentation, or only enable certain ones.
 | |
| - Ability to load a custom exporter via an external JAR library
 | |
| - Isolation from application
 | |
|   - Separate Agent class loader with almost all agent-specific classes
 | |
|     - OpenTelemetry SDK initialized in Agent class loader
 | |
|   - Shading of instrumentation libraries when used in agent
 | |
|   - API bridge for application usage of API to access the Agent class loader's SDK
 | |
|     - API bridge not applied if user brings incompatible API version, preventing linkage errors (similar to safety mechanism below)
 | |
| - [Safety mechanisms](./safety-mechanisms.md) to prevent application linkage errors
 | |
|   - Collect all references from instrumentation to library and only apply instrumentation if they exist in application
 | |
|   - Verify above at compile time
 | |
|   - Instrumentation tests that run the java agent in a near-production configuration
 | |
|   - Ability to run tests against a fixed version and the latest version of dependencies
 | |
|   - Docker-based smoke tests to verify agent behavior across JVM runtimes, Java application servers
 | |
| - Ability to create custom distributions, agents with different components / configuration
 | |
|   - Can set different defaults for properties
 | |
|   - Can customize tracer configuration programmatically
 | |
|   - Can provide custom exporter, propagator, sampler
 | |
|   - Can hook into ByteBuddy to customize bytecode manipulation
 | |
| - Noteworthy instrumentation
 | |
|   - Log injection of IDs (logback, log4j2, log4j)
 | |
|   - Automatic context propagation across `Executor`s
 | |
|   - Ability to instrument methods in the application if user adds `@WithSpan` annotation
 |