182 lines
10 KiB
Markdown
182 lines
10 KiB
Markdown
---
|
|
|
|
<p align="center">
|
|
<strong>
|
|
<a href="https://github.com/open-telemetry/opentelemetry-java-instrumentation#getting-started">Getting Started</a>
|
|
•
|
|
<a href="https://github.com/open-telemetry/community#special-interest-groups">Getting Involved</a>
|
|
•
|
|
<a href="https://github.com/open-telemetry/opentelemetry-java-instrumentation/discussions">Getting In Touch</a>
|
|
</strong>
|
|
</p>
|
|
|
|
<p align="center">
|
|
<a href="https://github.com/open-telemetry/opentelemetry-java-instrumentation/actions/workflows/build.yml">
|
|
<img alt="Build Status" src="https://img.shields.io/github/workflow/status/open-telemetry/opentelemetry-java-instrumentation/Build?style=for-the-badge">
|
|
</a>
|
|
<a href="https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases">
|
|
<img alt="GitHub release (latest by date including pre-releases)" src="https://img.shields.io/github/v/release/open-telemetry/opentelemetry-java-instrumentation?include_prereleases&style=for-the-badge">
|
|
</a>
|
|
<img alt="Beta" src="https://img.shields.io/badge/status-beta-informational?style=for-the-badge&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAIRlWElmTU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAACQAAAAAQAAAJAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABigAwAEAAAAAQAAABgAAAAA8A2UOAAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAAVlpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KTMInWQAABK5JREFUSA2dVm1sFEUYfmd2b/f2Pkqghn5eEQWKrRgjpkYgpoRCLC0oxV5apAiGUDEpJvwxEQ2raWPU+Kf8INU/RtEedwTCR9tYPloxGNJYTTQUwYqJ1aNpaLH3sXu3t7vjvFevpSqt7eSyM+/czvM8877PzB3APBoLgoDLsNePF56LBwqa07EKlDGg84CcWsI4CEbhNnDpAd951lXE2NkiNknCCTLv4HtzZuvPm1C/IKv4oDNXqNDHragety2XVzjECZsJARuBMyRzJrh1O0gQwLXuxofxsPSj4hG8fMLQo7bl9JJD8XZfC1E5yWFOMtd07dvX5kDwg6+2++Chq8txHGtfPoAp0gOFmhYoNFkHjn2TNUmrwRdna7W1QSkU8hvbGk4uThLrapaiLA2E6QY4u/lS9ItHfvJkxYsTMVtnAJLipYIWtVrcdX+8+b8IVnPl/R81prbuPZ1jpYw+0aEUGSkdFsgyBIaFTXCm6nyaxMtJ4n+TeDhJzGqZtQZcuYDgqDwDbqb0JF9oRpIG1Oea3bC1Y6N3x/WV8Zh83emhCs++hlaghDw+8w5UlYKq2lU7Pl8IkvS9KDqXmKmEwdMppVPKwGSEilmyAwJhRwWcq7wYC6z4wZ1rrEoMWxecdOjZWXeAQClBcYDN3NwVwD9pGwqUSyQgclcmxpNJqCuwLmDh3WtvPqXdlt+6Oz70HPGDNSNBee/EOen+rGbEFqDENBPDbtdCp0ukPANmzO0QQJYUpyS5IJJI3Hqt4maS+EB3199ozm8EDU/6fVNU2dQpdx3ZnKzeFXyaUTiasEV/gZMzJMjr3Z+WvAdQ+hs/zw9savimxUntDSaBdZ2f+Idbm1rlNY8esFffBit9HtK5/MejsrJVxikOXlb1Ukir2X+Rbdkd1KG2Ixfn2Ql4JRmELnYK9mEM8G36fAA3xEQ89fxXihC8q+sAKi9jhHxNqagY2hiaYgRCm0f0QP7H4Fp11LSXiuBY2aYFlh0DeDIVVFUJQn5rCnpiNI2gvLxHnASn9DIVHJJlm5rXvQAGEo4zvKq2w5G1NxENN7jrft1oxMdekETjxdH2Z3x+VTVYsPb+O0C/9/auN6v2hNZw5b2UOmSbG5/rkC3LBA+1PdxFxORjxpQ81GcxKc+ybVjEBvUJvaGJ7p7n5A5KSwe4AzkasA+crmzFtowoIVTiLjANm8GDsrWW35ScI3JY8Urv83tnkF8JR0yLvEt2hO/0qNyy3Jb3YKeHeHeLeOuVLRpNF+pkf85OW7/zJxWdXsbsKBUk2TC0BCPwMq5Q/CPvaJFkNS/1l1qUPe+uH3oD59erYGI/Y4sce6KaXYElAIOLt+0O3t2+/xJDF1XvOlWGC1W1B8VMszbGfOvT5qaRRAIFK3BCO164nZ0uYLH2YjNN8thXS2v2BK9gTfD7jHVxzHr4roOlEvYYz9QIz+Vl/sLDXInsctFsXjqIRnO2ZO387lxmIboLDZCJ59KLFliNIgh9ipt6tLg9SihpRPDO1ia5byw7de1aCQmF5geOQtK509rzfdwxaKOIq+73AvwCC5/5fcV4vo3+3LpMdtWHh0ywsJC/ZGoCb8/9D8F/ifgLLl8S8QWfU8cAAAAASUVORK5CYII=">
|
|
</p>
|
|
|
|
<p align="center">
|
|
<strong>
|
|
<a href="CONTRIBUTING.md">Contributing<a/>
|
|
•
|
|
<a href="docs/scope.md">Scope<a/>
|
|
</strong>
|
|
</p>
|
|
|
|
---
|
|
|
|
# <img src="https://opentelemetry.io/img/logos/opentelemetry-logo-nav.png" alt="OpenTelemetry Icon" width="45" height=""> OpenTelemetry Instrumentation for Java
|
|
|
|
* [About](#about)
|
|
* [Getting Started](#getting-started)
|
|
* [Configuring the Agent](#configuring-the-agent)
|
|
* [Supported libraries, frameworks, and application servers](#supported-libraries-frameworks-and-application-servers)
|
|
* [Creating agent extensions](#creating-agent-extensions)
|
|
* [Manually instrumenting](#manually-instrumenting)
|
|
* [Logger MDC auto-instrumentation](#logger-mdc-mapped-diagnostic-context-auto-instrumentation)
|
|
* [Troubleshooting](#troubleshooting)
|
|
* [Contributing](#contributing)
|
|
|
|
## About
|
|
|
|
This project provides a Java agent JAR that can be attached to any Java 8+
|
|
application and dynamically injects bytecode to capture telemetry from a
|
|
number of popular libraries and frameworks.
|
|
You can export the telemetry data in a variety of formats.
|
|
You can also configure the agent and exporter via command line arguments
|
|
or environment variables. The net result is the ability to gather telemetry
|
|
data from a Java application without code changes.
|
|
|
|
This repository also publishes standalone instrumentation for several libraries (and growing)
|
|
that can be used if you prefer that over using the Java agent.
|
|
Please see [standalone library instrumentation](docs/standalone-library-instrumentation.md)
|
|
if you are looking for documentation on using those.
|
|
|
|
## Getting Started
|
|
|
|
Download
|
|
the [latest version](https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar).
|
|
|
|
This package includes the instrumentation agent as well as
|
|
instrumentations for all supported libraries and all available data exporters.
|
|
The package provides a completely automatic, out-of-the-box experience.
|
|
|
|
Enable the instrumentation agent using the `-javaagent` flag to the JVM.
|
|
|
|
```
|
|
java -javaagent:path/to/opentelemetry-javaagent.jar \
|
|
-jar myapp.jar
|
|
```
|
|
|
|
By default, the OpenTelemetry Java agent uses
|
|
[OTLP exporter](https://github.com/open-telemetry/opentelemetry-java/tree/main/exporters/otlp)
|
|
configured to send data to
|
|
[OpenTelemetry collector](https://github.com/open-telemetry/opentelemetry-collector/blob/main/receiver/otlpreceiver/README.md)
|
|
at `http://localhost:4317`.
|
|
|
|
Configuration parameters are passed as Java system properties (`-D` flags) or
|
|
as environment variables. See [the configuration documentation][config]
|
|
for the full list of configuration items. For example:
|
|
|
|
```
|
|
java -javaagent:path/to/opentelemetry-javaagent.jar \
|
|
-Dotel.resource.attributes=service.name=your-service-name \
|
|
-Dotel.traces.exporter=zipkin \
|
|
-jar myapp.jar
|
|
```
|
|
|
|
## Configuring the Agent
|
|
|
|
The agent is [highly configurable][config]! Many aspects of the agent's behavior can be
|
|
configured for your needs, such as exporter choice, exporter config (like where
|
|
data is sent), trace context propagation headers, and much more.
|
|
|
|
[Click here to see the detailed list of configuration environment variables and system properties][config].
|
|
|
|
*Note: Config parameter names are very likely to change over time, so please check
|
|
back here when trying out a new version!
|
|
Please [report any bugs](https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues)
|
|
or unexpected behavior you find.*
|
|
|
|
## Supported libraries, frameworks, and application servers
|
|
|
|
We support an impressively huge number
|
|
of [libraries and frameworks](docs/supported-libraries.md#libraries--frameworks) and
|
|
a majority of the most
|
|
popular [application servers](docs/supported-libraries.md#application-servers)...right out of the
|
|
box!
|
|
[Click here to see the full list](docs/supported-libraries.md) and to learn more about
|
|
[disabled instrumentation](docs/supported-libraries.md#disabled-instrumentations)
|
|
and how to [suppress unwanted instrumentation][suppress].
|
|
|
|
## Creating agent extensions
|
|
|
|
[Extensions](examples/extension/README.md) add new features and capabilities to the agent without
|
|
having to create a separate distribution or to fork this repository. For example, you can create
|
|
custom samplers or span exporters, set new defaults, and embed it all in the agent to obtain a
|
|
single jar file.
|
|
|
|
## Manually instrumenting
|
|
|
|
For most users, the out-of-the-box instrumentation is completely sufficient and nothing more has to
|
|
be done. Sometimes, however, users wish to add attributes to the otherwise automatic spans,
|
|
or they might want to manually create spans for their own custom code.
|
|
|
|
For detailed instructions, see [Manual instrumentation][manual].
|
|
|
|
## Logger MDC (Mapped Diagnostic Context) auto-instrumentation
|
|
|
|
It is possible to inject trace information like trace IDs and span IDs into your
|
|
custom application logs. For details, see [Logger MDC
|
|
auto-instrumentation](docs/logger-mdc-instrumentation.md).
|
|
|
|
## Troubleshooting
|
|
|
|
To turn on the agent's internal debug logging:
|
|
|
|
`-Dotel.javaagent.debug=true`
|
|
|
|
**Note**: These logs are extremely verbose. Enable debug logging only when needed.
|
|
Debug logging negatively impacts the performance of your application.
|
|
|
|
## Contributing
|
|
|
|
See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
|
|
Triagers ([@open-telemetry/java-instrumentation-triagers](https://github.com/orgs/open-telemetry/teams/java-instrumentation-triagers)):
|
|
|
|
- [Jason Plumb](https://github.com/breedx-splk), Splunk
|
|
|
|
Approvers ([@open-telemetry/java-instrumentation-approvers](https://github.com/orgs/open-telemetry/teams/java-instrumentation-approvers)):
|
|
|
|
- [Jack Berg](https://github.com/jack-berg), New Relic
|
|
- [John Watson](https://github.com/jkwatson), Verta.ai
|
|
- [Pavol Loffay](https://github.com/pavolloffay), Traceable.ai
|
|
|
|
Maintainers ([@open-telemetry/java-instrumentation-maintainers](https://github.com/orgs/open-telemetry/teams/java-instrumentation-maintainers)):
|
|
|
|
- [Lauri Tulmin](https://github.com/laurit), Splunk
|
|
- [Mateusz Rzeszutek](https://github.com/mateuszrzeszutek), Splunk
|
|
- [Nikita Salnikov-Tarnovski](https://github.com/iNikem), Splunk
|
|
- [Trask Stalnaker](https://github.com/trask), Microsoft
|
|
|
|
Learn more about roles in
|
|
the [community repository](https://github.com/open-telemetry/community/blob/main/community-membership.md).
|
|
|
|
Thanks to all the people who already contributed!
|
|
|
|
<a href="https://github.com/open-telemetry/opentelemetry-java-instrumentation/graphs/contributors">
|
|
<img src="https://contributors-img.web.app/image?repo=open-telemetry/opentelemetry-java-instrumentation" />
|
|
</a>
|
|
|
|
[config]: https://opentelemetry.io/docs/instrumentation/java/automatic/agent-config/
|
|
|
|
[manual]: https://opentelemetry.io/docs/instrumentation/java/manual/
|
|
|
|
[suppress]: https://opentelemetry.io/docs/instrumentation/java/automatic/agent-config/#suppressing-specific-auto-instrumentation
|