OpenTelemetry auto-instrumentation and instrumentation libraries for Java
Go to file
Nikita Salnikov-Tarnovski fe8819fb8f
Support for khttp library (#401)
2020-05-17 10:41:41 -07:00
.circleci Use java 11 for compilation (#390) 2020-05-14 15:13:30 -07:00
.github Move CODEOWNERS to .github (#376) 2020-05-05 17:54:53 -07:00
agent-bootstrap Used BatchSpansProcessor instead of SimpleSpansProcessor (#393) 2020-05-16 13:18:43 -07:00
agent-tooling Used BatchSpansProcessor instead of SimpleSpansProcessor (#393) 2020-05-16 13:18:43 -07:00
auto-exporters Make auto-instr work with latest otel-java snapshot (#372) 2020-05-04 23:18:39 -07:00
benchmark Update a few last things to otel-java 0.4.0 (#399) 2020-05-11 22:17:16 -07:00
benchmark-integration Remove copyright year from license header (#322) 2020-04-15 11:24:44 -07:00
buildSrc Use java 11 for compilation (#390) 2020-05-14 15:13:30 -07:00
buildscripts Copy .editorconfig file and relevant sections in CONTRIBUTING.md from otel-java repo (#373) 2020-05-04 10:07:19 -04:00
exporter-support Remove copyright year from license header (#322) 2020-04-15 11:24:44 -07:00
gradle Initial Propagators support. (#389) 2020-05-14 16:57:52 -07:00
instrumentation Support for khttp library (#401) 2020-05-17 10:41:41 -07:00
java-agent Use java 11 for compilation (#390) 2020-05-14 15:13:30 -07:00
load-generator Remove copyright year from license header (#322) 2020-04-15 11:24:44 -07:00
opentelemetry-api-shaded-for-instrumenting Update a few last things to otel-java 0.4.0 (#399) 2020-05-11 22:17:16 -07:00
opentelemetry-sdk-shaded-for-testing Rename boostrap and tooling modules (#146) 2020-02-07 17:01:55 -08:00
smoke-tests Used BatchSpansProcessor instead of SimpleSpansProcessor (#393) 2020-05-16 13:18:43 -07:00
testing Use java 11 for compilation (#390) 2020-05-14 15:13:30 -07:00
utils Bring back code coverage verification (#357) 2020-04-28 15:27:44 -07:00
.editorconfig Update .editorconfig for groovy (#397) 2020-05-11 21:34:50 -07:00
.gitignore Merge remote-tracking branch 'datadog/master' into dd-merge 2020-02-22 14:35:03 -08:00
CONTRIBUTING.md Add documentation about java agent structure and related classloaders (#380) 2020-05-06 10:28:35 -07:00
LICENSE Update to standard LICENSE file for OpenTelemetry (#19) 2019-11-19 09:46:10 -08:00
LICENSE-3rdparty.csv Rename package to io.opentelemetry.auto (#54) 2020-01-14 13:57:01 -08:00
README.md Support for khttp library (#401) 2020-05-17 10:41:41 -07:00
gradle.properties Try doubling the metaspace size to fix check task. 2019-01-04 13:43:40 -08:00
gradlew Upgradle to gradle 6.0 2019-11-12 16:26:46 -05:00
gradlew.bat Update gradle to 6.3 2020-04-06 08:08:03 -04:00
settings.gradle Support for khttp library (#401) 2020-05-17 10:41:41 -07:00
trace-java.gradle Fix publishing to artifactory (DataDog/dd-trace-java#1432) 2020-05-14 11:50:30 -07:00

README.md

OpenTelemetry Auto-Instrumentation for Java

Introduction

This project provides a Java agent that can be attached to any Java 7+ application and dynamically injects bytecode to capture telemetry from a number of popular libraries and frameworks.

Supported Java libraries and frameworks

Library/Framework Versions
Akka HTTP 10.0+
Apache HttpAsyncClient 4.0+
Apache HttpClient 2.0+
AWS SDK 1.11.x and 2.2.0+
Cassandra Driver 3.0+ (not including 4.x yet)
Couchbase Client 2.0+ (not including 3.x yet)
Dropwizard Views 0.7+
Elasticsearch API 2.0+ (not including 7.x yet)
Elasticsearch REST Client 5.0+
Finatra 2.9+
Geode Client 1.4+
Google HTTP Client 1.19+
Grizzly 2.0+ (disabled by default, see below)
gRPC 1.5+
Hibernate 3.3+
HttpURLConnection Java 7+
Hystrix 1.4+
java.util.logging Java 7+
JAX-RS 0.5+
JAX-RS Client 2.0+
JDBC Java 7+
Jedis 1.4+
Jetty 8.0+
JMS 1.1+
JSP 2.3+
Kafka 0.11+
khttp 0.1.0+
Lettuce 4.0+
Log4j 1.1+
Logback 1.0+
MongoDB Drivers 3.3+
Netty 3.8+
OkHttp 3.0+
Play 2.3+ (not including 2.8.x yet)
Play WS 1.0+
RabbitMQ Client 2.7+
Ratpack 1.5+
Reactor 3.1+
Rediscala 1.8+
RMI Java 7+
RxJava 1.0+
Servlet 2.3+
Spark Web Framework 2.3+
Spring Data 1.8+
Spring Scheduling 3.1+
Spring Servlet MVC 3.1+
Spring Webflux 5.0+
Spymemcached 2.12+
Twilio 6.6+

Download and run

Release builds

Download the latest release.

The instrumentation agent is enabled using the -javaagent flag to the JVM. Configuration parameters are passed as Java system properties (-D flags) or as environment variables. This is an example:

java -javaagent:path/to/opentelemetry-auto-<version>.jar \
     -Dota.exporter.jar=path/to/opentelemetry-auto-exporters-jaeger-<version>.jar \
     -Dota.exporter.jaeger.endpoint=localhost:14250 \
     -Dota.exporter.jaeger.service.name=shopping \
     -jar myapp.jar

Snapshot builds

For developers testing code changes before a release is complete, there are snapshot builds of the master branch. When a PR is merged to master, a circleci build is kicked off as a github action which shows up as a github check on the git commit on master branch, i.e. a green checkmark. Clicking on the green checkmark you can view the build_test_deploy workflow and the build job shows the artifacts hosted on circleci. The artifacts will be named like:

libs/exporter-support-<version>-SNAPSHOT.jar
libs/opentelemetry-auto-<version>-SNAPSHOT.jar
libs/opentelemetry-auto-exporters-jaeger-<version>-SNAPSHOT.jar
libs/opentelemetry-auto-exporters-logging-<version>-SNAPSHOT.jar
libs/opentelemetry-auto-exporters-otlp-<version>-SNAPSHOT.jar

Configuration parameters (subject to change!)

System property Environment variable Purpose
ota.exporter.jar OTA_EXPORTER_JAR Path to the exporter fat-jar that you want to use

Available exporters

There are three exporters available under releases.

Jaeger exporter

A simple wrapper for the Jaeger exporter of opentelemetry-java. It currently only supports gRPC as its communications protocol.

System property Environment variable Purpose
ota.exporter.jaeger.endpoint OTA_EXPORTER_JAEGER_ENDPOINT The Jaeger endpoint to connect to. Currently only gRPC is supported.
ota.exporter.jaeger.service.name OTA_EXPORTER_JAEGER_SERVICE_NAME The service name of this JVM instance

OTLP exporter

A simple wrapper for the OTLP exporter of opentelemetry-java.

System property Environment variable Purpose
ota.exporter.otlp.endpoint OTA_EXPORTER_OTLP_ENDPOINT The OTLP endpoint to connect to.

Logging Exporter

The logging exporter simply prints the name of the span along with its attributes to stdout. It is used manly for testing and debugging.

System property Environment variable Purpose
ota.exporter.logging.prefix OTA_EXPORTER_LOGGING_PREFIX An optional string that is printed in front of the span name and attributes.

These parameter names are very likely to change over time, so please check back here when trying out a new version!

Please report any bugs or unexpected behavior you may find.

Disabled instrumentations

Some instrumentations can produce too many spans and make traces very noisy. For this reason the following instrumentations are disabled by default:

  • jdbc-datasource which creates spans whenever java.sql.DataSource#getConnection method is called.
  • servlet-filter which creates spans around Servlet Filter methods.
  • servlet-service which creates spans around Servlet methods.

To enable them, add ota.integration.<name>.enabled system property: -Dota.integration.jdbc-datasource.enabled=true

Grizzly instrumentation

Whenever you use Grizzly for Servlet-based applications, you get better experience from Servlet-specific support. As these two instrumentations conflict with each other, more generic instrumentation for Grizzly http server is disabled by default. If needed, you can enable it by add the following system property: -Dota.integration.grizzly.enabled=true

Troubleshooting

To turn on the agent's internal debug logging:

-Dio.opentelemetry.auto.slf4j.simpleLogger.defaultLogLevel=debug

Building from source

Build using Java 8:

gradle assemble

and then you can find the java agent artifact at java-agent/build/lib/opentelemetry-auto-<version>.jar.