Integration Guide
April 30, 2026 ยท View on GitHub
telemetry-java is a Java 11 library with zero runtime dependencies.
Example Integration
String projectShortTag = "MyApp";
TelemetryConfig config = TelemetryConfig.builder(projectShortTag, "1.2.3").build();
try (TelemetryClient client = TelemetryClient.create(config)) {
client.track("checkout-started");
}
Required Configuration
- A project short tag and a product/library version at startup. The library adds the project tag as the telemetry category and includes the configured productVersion in every accepted telemetry event.
- An optional HTTP endpoint for JSON
POSTdelivery. If omitted, the default endpoint ishttps://metrics.exasol.com/telemetry. - An optional host-controlled disable switch via
TelemetryConfig.Builder.disableTracking()when the integrating application exposes its own telemetry setting.
Required Documentation
Applications integrating telemetry-java need to link to the App User Guide in both:
- their changelog entry for introducing telemetry
- their end-user documentation
Example changelog entry:
## Summary
This release adds anonymous feature-usage telemetry via `telemetry-java`. See the [documentation](https://github.com/exasol/telemetry-java/blob/main/doc/app-user-guide.md) for details on collected data and opt-out behavior.
## Features
* #??: Added anonymous feature tracking
Example end-user documentation entry:
## Telemetry
This application uses `telemetry-java` to send anonymous feature-usage events.
For details on what is collected and how to disable telemetry, see the [documentation](https://github.com/exasol/telemetry-java/blob/main/doc/app-user-guide.md).
Environment Variables
EXASOL_TELEMETRY_DISABLEDisables collection and delivery when set to any non-empty value.EXASOL_TELEMETRY_ENDPOINTOverrides the endpoint configured in code.CIDisables telemetry automatically when set to any non-empty value.
Host-Controlled Disablement
If the integrating application already has its own telemetry switch, map that setting to TelemetryConfig.Builder.disableTracking().
TelemetryConfig config = TelemetryConfig.builder("MyApp", "1.2.3")
.disableTracking()
.build();
When telemetry is disabled this way, the lifecycle INFO log reports Telemetry is disabled via host configuration..
UDF Integration Tests
For Exasol UDF integration tests, disable telemetry explicitly so test executions never emit usage data. In UDF script definitions, set %env EXASOL_TELEMETRY_DISABLE=1;.
Runtime Behavior
- Tracking calls are non-blocking and enqueue events into a bounded in-memory queue.
- Delivery happens on a background sender thread.
- The JSON payload format includes
category, protocolversion,productVersion,timestamp, andfeatures. - Multiple queued events may be batched into a single payload, with timestamps grouped by caller-provided feature name.
- The configured project short tag is emitted as top-level
category; feature names are preserved as provided, for examplecheckout-started. - Failed delivery uses exponential backoff and stops when the configured retry timeout is reached.
- Closing
TelemetryClientflushes pending work before returning and stops background threads. - Calling
track(...)afterTelemetryClientis closed is a no-op. - The client logs an
INFOlifecycle message when telemetry is enabled or disabled, and debug-level lifecycle messages when telemetry sends data or stops.