Skip to content
Last9 named a Gartner Cool Vendor in AI for SRE Observability for 2025! Read more →
Last9

Java

Use OpenTelemetry to instrument your Java application and send telemetry data to Last9

Use OpenTelemetry to instrument your Java application and send telemetry data to Last9. You can run OpenTelemetry Collector or send the telemetry directly from the application. Read the setup guide for more details.

Instrumentation packages

Download the OpenTelemetry Java agent JAR file and place it in the project root directory.

curl -L https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar -o opentelemetry-javaagent.jar

The latest opentelemetry-javaagent.jar can be found in the releases section of the opentelemetry-java-instrumentation repository.

For Java version 8, download the following release of OpenTelemetry agent.

curl -L https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v1.32.0/opentelemetry-javaagent.jar -o opentelemetry-javaagent.jar

Environment variables

Set the following environment variables.

OTEL_EXPORTER_OTLP_ENDPOINT={{ .Logs.WriteURL }}
OTEL_SERVICE_NAME=<The name of your service>
OTEL_EXPORTER_OTLP_HEADERS=Authorization={{ .Logs.AuthValue }}
OTEL_TRACES_EXPORTER=otlp
OTEL_METRICS_EXPORTER=otlp
OTEL_LOGS_EXPORTER=none
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
OTEL_TRACES_SAMPLER="always_on"
OTEL_RESOURCE_ATTRIBUTES="deployment.environment=local"
OTEL_LOG_LEVEL=error

Depending on your Cloud environment, enable following:

OTEL_RESOURCE_PROVIDERS_AWS_ENABLED=true
OTEL_RESOURCE_PROVIDERS_GCP_ENABLED=true
OTEL_RESOURCE_PROVIDERS_AZURE_ENABLED=true

System Properties

Alternatively, you can also set system properties for the configuration.

# otel.properties file
otel.exporter.otlp.endpoint: {{ .Logs.WriteURL }}
otel.service.name: <service_name>
otel.exporter.otlp.headers: Authorization={{ .Logs.AuthValue }}
otel.traces.exporter: otlp
otel.metrics.exporter: otlp
otel.logs.exporter: none
otel.exporter.otlp.protocol: http/protobuf
otel.traces.sampler: always_on
otel.resource.attributes: "deployment.environment=staging"

Depending on your Cloud environment, enable following:

otel.resource.providers.aws.enabled: true
otel.resource.providers.gcp.enabled: true
otel.resource.providers.azure.enabled: true

You can either use a properties file or use the runtime syntax for setting system properties as follows.

java -javaagent:path/to/opentelemetry-javaagent.jar -Dotel.exporter.otlp.endpoint={{ .Logs.WriteURL }} -Dotel.service.name=<service_name> -Dotel.exporter.otlp.headers=Authorization={{ .Logs.AuthValue }} -Dotel.traces.exporter=otlp -Dotel.metrics.exporter=otlp -Dotel.logs.exporter=none -Dotel.exporter.otlp.protocol=http/protobuf -Dotel.traces.sampler=always_on -Dotel.resource.attributes="deployment.environment=staging" -jar myapp.jar

Caveat

Older Java OpenTelemetry may require adding %20 between the Basic and the actual authorization header. If you receive 401 error from the Last9 Opentelemetry endpoint, update the OTEL_EXPORTER_OTLP_HEADERS as follows.

Authorization=Basic%20<auth_header>

Start the application

  1. You can start your application specifying the -javaagent parameter now:
java -javaagent:path/to/opentelemetry-javaagent.jar -jar myapp.jar
  1. You can specify an environment variable that automatically adds the -javaagent parameter to your JVM:
export JAVA_TOOL_OPTIONS="-javaagent:path/to/opentelemetry-javaagent.jar"
java -jar myapp.jar # or current build command

The application will send telemetry data such as logs, traces, and metrics to Last9.