Hypertrace OpenTelemetry Java agent
Hypertrace distribution of OpenTelemetry Java agent.
This agent supports these frameworks and adds following capabilities:
- capture request and response headers
- capture request and response bodies
- server request headers/bodies evaluation in agent filter that can result in request blocking. The filter implementation will be pluggable.
List of supported frameworks with additional capabilities:
Library/Framework | Versions |
---|---|
Apache HttpAsyncClient | 4.1+ |
Apache HttpClient | 4.0+ |
gRPC | 1.5+ |
JAX-RS Client | 2.0+ |
Micronaut (basic support via Netty) | 1.0+ |
Netty | 4.0+ |
OkHttp | 3.0+ |
Servlet | 2.3+ |
Spark Web Framework | 2.3+ |
Spring Webflux | 5.0+ |
Vert.x | 3.0+ |
Adding custom filter implementation
Custom filter implementations can be added via FilterProvider
SPI (Java service loader).
The providers can be disabled at startup via ht.filter.provider.<provider-class-name>.disabled=true
.
Build
make build
The final artifact is in javaagent/build/libs/hypertrace-agent-<version>-all.jar
Run & Configure
Download the latest version.
HT_EXPORTING_ENDPOINT=http://localhost:9411/api/v2/spans java -javaagent:javaagent/build/libs/hypertrace-agent-<version>-all.jar -jar app.jar
By default the agent uses Zipkin exporter.
The configuration precedence order
- OpenTelemetry Agent's trace config file
OTEL_TRACE_CONFIG
/otel.trace.config
- OpenTelemetry system properties and env variables
- Hypertrace configuration with the following precedence order:
- system properties
- environment variables, TODO add link to agent-config repo
- configuration file, specified
HT_CONFIG_FILE=example-config.yaml
Disable instrumentation at startup
Instrumentations can be disabled by -Dotel.instrumentation.<instrumentation-name>.enabled=false
.
The following instrumentation names disable only Hypertrace instrumentations, not core OpenTelemetry:
ht
- all Hypertrace instrumentationsservlet-ht
- Servlet, Spark Webokhttp-ht
- Okhttpgrpc-ht
- gRPC
The Hypertrace instrumentations use also the core OpenTelemetry instrumentation names so for example
-Dotel.instrumentation.servlet.enabled=false
disables all servlet instrumentations including core
OpenTelemetry and Hypertrace.
Test
Tests use docker via Testcontainers.org.
When running tests from IDE set SMOKETEST_JAVAAGENT_PATH
env variable.
make test