agent-features.md 2.4 KB

OpenTelemetry Java Agent Features

This lists out some of the features specific to java agents that OpenTelemetry Auto Instrumentation provides.

  • Bundled exporters
    • OTLP
    • Jaeger gRPC
    • Logging
    • Zipkin
  • Bundled propagators
  • Environment variable configuration as per spec
    • 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 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 Executors
    • Ability to instrument methods in the application if user adds @WithSpan annotation