Prerequisites
- Kotlin 1.8 or later, JVM 8 or later
- An OTel Collector reachable from your application, with
logs,metrics, andtracespipelines forwarding to Bronto — see Connect OpenTelemetry Collector to Bronto
Attach the agent
Download the agent jar:-javaagent:
http/protobuf, appending the signal path (/v1/logs, /v1/metrics, /v1/traces) to the endpoint automatically.
Two resource attributes determine how Bronto organises your data:
http://localhost:4318 is the standard OTLP/HTTP address for a Collector on the same host. Use the address reachable from your application if the Collector runs in another container, pod, or host. No authentication is needed between the application and the Collector — the Collector holds the Bronto API key.Instrument your application
Existing SLF4J, Logback, and Log4j statements need no changes — the agent picks them up and attachestrace_id and span_id to any log emitted inside an active span, so you can jump from a log line to its trace in Bronto.
For spans and metrics around your own business logic, add the API dependency — not the SDK, which the agent already supplies:
PaymentService.kt
Can’t use the agent? Where a javaagent isn’t an option — GraalVM native images, for example — build the SDK in process with
opentelemetry-sdk-extension-autoconfigure, which reads the same OTEL_* variables, and add opentelemetry-logback-appender-1.0 plus OpenTelemetryAppender.install(openTelemetry) to bridge your logs. See Configure the SDK.Verify
Run your application, then check each signal in Bronto, filtering by theservice.name you set:
- Logs — the Search page, in the dataset named after your service
- Metrics — the Metric Explorer
- Traces — the Explore Traces page
- Confirm the Collector is running and reachable at
OTEL_EXPORTER_OTLP_ENDPOINT, and that its pipelines include anotlpreceiver and the Bronto exporters. - Port
4318is OTLP/HTTP and4317is OTLP/gRPC. If you point at4317, also setOTEL_EXPORTER_OTLP_PROTOCOL=grpc. - Run with
-Dotel.javaagent.debug=trueto log what the agent instruments and exports at startup.
Direct export to Bronto
Without a Collector, the agent exports straight to Bronto over OTLP/HTTP. Point the endpoint at your Bronto region and add your API key:
See API Keys for how to create a key with ingestion permissions.
GenAI semantic conventions
If your application calls an LLM, OpenTelemetry’s GenAI semantic conventions definegen_ai.* span attributes for model, token usage, and prompt and response content.
The Java agent covers Kotlin applications too — there is no separate Kotlin package. See Java: GenAI semantic conventions for current auto-instrumentation coverage and the content-capture setting.

