Apply Prettier to markdown files (#8968)
This commit is contained in:
parent
c21ea0f4f8
commit
2bdddafdc4
|
|
@ -1,10 +1,9 @@
|
|||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
title: ""
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
assignees: ""
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
title: ""
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
|
||||
assignees: ""
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
|
|
|
|||
|
|
@ -6,13 +6,13 @@ settings](https://github.com/open-telemetry/community/blob/main/docs/how-to-conf
|
|||
|
||||
## General > Pull Requests
|
||||
|
||||
* Allow squash merging > Default to pull request title
|
||||
- Allow squash merging > Default to pull request title
|
||||
|
||||
* Allow auto-merge
|
||||
- Allow auto-merge
|
||||
|
||||
## Actions > General
|
||||
|
||||
* Fork pull request workflows from outside collaborators:
|
||||
- Fork pull request workflows from outside collaborators:
|
||||
"Require approval for first-time contributors who are new to GitHub"
|
||||
|
||||
(To reduce friction for new contributors,
|
||||
|
|
@ -22,14 +22,14 @@ settings](https://github.com/open-telemetry/community/blob/main/docs/how-to-conf
|
|||
|
||||
### `main`
|
||||
|
||||
* Require branches to be up to date before merging: UNCHECKED
|
||||
- Require branches to be up to date before merging: UNCHECKED
|
||||
|
||||
(PR jobs take too long, and leaving this unchecked has not been a significant problem)
|
||||
|
||||
* Status checks that are required:
|
||||
- Status checks that are required:
|
||||
|
||||
* EasyCLA
|
||||
* required-status-check
|
||||
- EasyCLA
|
||||
- required-status-check
|
||||
|
||||
### `release/*`
|
||||
|
||||
|
|
@ -42,7 +42,7 @@ for [`dependabot/**/**`](https://github.com/open-telemetry/community/blob/main/d
|
|||
|
||||
### `gh-pages`
|
||||
|
||||
* Everything UNCHECKED
|
||||
- Everything UNCHECKED
|
||||
|
||||
(This branch is currently only used for directly pushing benchmarking results from the
|
||||
[Nightly overhead benchmark](https://github.com/open-telemetry/opentelemetry-java-instrumentation/actions/workflows/nightly-benchmark-overhead.yml)
|
||||
|
|
@ -50,20 +50,20 @@ for [`dependabot/**/**`](https://github.com/open-telemetry/community/blob/main/d
|
|||
|
||||
## Code security and analysis
|
||||
|
||||
* Secret scanning: Enabled
|
||||
- Secret scanning: Enabled
|
||||
|
||||
## Secrets and variables > Actions
|
||||
|
||||
* `GE_CACHE_PASSWORD`
|
||||
* `GE_CACHE_USERNAME`
|
||||
* `GPG_PASSWORD` - stored in OpenTelemetry-Java 1Password
|
||||
* `GPG_PRIVATE_KEY` - stored in OpenTelemetry-Java 1Password
|
||||
* `GRADLE_ENTERPRISE_ACCESS_KEY` - owned by [@trask](https://github.com/trask)
|
||||
* Generated at https://ge.opentelemetry.io > My settings > Access keys
|
||||
* format of env var is `ge.opentelemetry.io=<access key>`,
|
||||
- `GE_CACHE_PASSWORD`
|
||||
- `GE_CACHE_USERNAME`
|
||||
- `GPG_PASSWORD` - stored in OpenTelemetry-Java 1Password
|
||||
- `GPG_PRIVATE_KEY` - stored in OpenTelemetry-Java 1Password
|
||||
- `GRADLE_ENTERPRISE_ACCESS_KEY` - owned by [@trask](https://github.com/trask)
|
||||
- Generated at https://ge.opentelemetry.io > My settings > Access keys
|
||||
- format of env var is `ge.opentelemetry.io=<access key>`,
|
||||
see [docs](https://docs.gradle.com/enterprise/gradle-plugin/#via_environment_variable)
|
||||
* `GRADLE_PUBLISH_KEY`
|
||||
* `GRADLE_PUBLISH_SECRET`
|
||||
* `OPENTELEMETRYBOT_GITHUB_TOKEN` - owned by [@trask](https://github.com/trask)
|
||||
* `SONATYPE_KEY` - owned by [@trask](https://github.com/trask)
|
||||
* `SONATYPE_USER` - owned by [@trask](https://github.com/trask)
|
||||
- `GRADLE_PUBLISH_KEY`
|
||||
- `GRADLE_PUBLISH_SECRET`
|
||||
- `OPENTELEMETRYBOT_GITHUB_TOKEN` - owned by [@trask](https://github.com/trask)
|
||||
- `SONATYPE_KEY` - owned by [@trask](https://github.com/trask)
|
||||
- `SONATYPE_USER` - owned by [@trask](https://github.com/trask)
|
||||
|
|
|
|||
22
CHANGELOG.md
22
CHANGELOG.md
|
|
@ -286,7 +286,7 @@
|
|||
([#8174](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/8174))
|
||||
- Spring scheduling: run error handler with the same context as task
|
||||
([#8220](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/8220))
|
||||
- Switch from http.flavor to net.protocol.*
|
||||
- Switch from http.flavor to net.protocol.\*
|
||||
([#8131](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/8131),
|
||||
[#8244](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/8244))
|
||||
- Support latest Armeria release
|
||||
|
|
@ -598,7 +598,7 @@
|
|||
|
||||
### 🧰 Tooling
|
||||
|
||||
- Muzzle logs should be logged using the io.opentelemetry.* logger name
|
||||
- Muzzle logs should be logged using the io.opentelemetry.\* logger name
|
||||
([#7446](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/7446))
|
||||
|
||||
## Version 1.21.0 (2022-12-13)
|
||||
|
|
@ -840,12 +840,12 @@ The `opentelemetry-instrumentation-api` artifact is declared stable in this rele
|
|||
|
||||
- There were a few late-breaking changes in `opentelemetry-instrumentation-api`, prior to it being
|
||||
declared stable:
|
||||
* `InstrumenterBuilder.addAttributesExtractors(AttributesExtractor...)` was removed, use instead
|
||||
- `InstrumenterBuilder.addAttributesExtractors(AttributesExtractor...)` was removed, use instead
|
||||
`addAttributesExtractors(AttributesExtractor)` or
|
||||
`addAttributesExtractors(Iterable<AttributesExtractor>)`
|
||||
* `SpanLinksExtractor.extractFromRequest()` was removed, use instead manual extraction
|
||||
* `ErrorCauseExtractor.jdk()` was renamed to `ErrorCauseExtractor.getDefault()`
|
||||
* `ClassNames` utility was removed with no direct replacement
|
||||
- `SpanLinksExtractor.extractFromRequest()` was removed, use instead manual extraction
|
||||
- `ErrorCauseExtractor.jdk()` was renamed to `ErrorCauseExtractor.getDefault()`
|
||||
- `ClassNames` utility was removed with no direct replacement
|
||||
- The deprecated `io.opentelemetry.instrumentation.api.config.Config` and related classes
|
||||
have been removed
|
||||
([#6501](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/6501))
|
||||
|
|
@ -1208,15 +1208,15 @@ The `opentelemetry-instrumentation-api` artifact is declared stable in this rele
|
|||
|
||||
- Micrometer instrumentation is now automatically applied to spring-boot-actuator apps
|
||||
- Some configuration properties have been renamed:
|
||||
* `otel.instrumentation.common.experimental.suppress-controller-spans`
|
||||
- `otel.instrumentation.common.experimental.suppress-controller-spans`
|
||||
→ `otel.instrumentation.common.experimental.controller-telemetry.enabled`
|
||||
(important: note that the meaning is inverted)
|
||||
* `otel.instrumentation.common.experimental.suppress-view-spans`
|
||||
- `otel.instrumentation.common.experimental.suppress-view-spans`
|
||||
→ `otel.instrumentation.common.experimental.view-telemetry.enabled`
|
||||
(important: note that the meaning is inverted)
|
||||
* `otel.instrumentation.netty.always-create-connect-span`
|
||||
- `otel.instrumentation.netty.always-create-connect-span`
|
||||
→ `otel.instrumentation.netty.connection-telemetry.enabled`
|
||||
* `otel.instrumentation.reactor-netty.always-create-connect-span`
|
||||
- `otel.instrumentation.reactor-netty.always-create-connect-span`
|
||||
→ `otel.instrumentation.reactor-netty.connection-telemetry.enabled`
|
||||
- Runtime memory metric names were updated to reflect
|
||||
[semantic conventions](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/semantic_conventions/runtime-environment-metrics.md#jvm-metrics)
|
||||
|
|
@ -1519,7 +1519,7 @@ The `opentelemetry-instrumentation-api` artifact is declared stable in this rele
|
|||
([#5112](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/5112))
|
||||
- Parameterize VirtualField field type
|
||||
([#5165](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/5165))
|
||||
- Remove old TraceUtils and use InstrumentationTestRunner#run*Span() (almost) everywhere
|
||||
- Remove old TraceUtils and use InstrumentationTestRunner#run\*Span() (almost) everywhere
|
||||
([#5160](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/5160))
|
||||
- Remove deprecated tracer API
|
||||
([#5175](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/5175))
|
||||
|
|
|
|||
44
RELEASING.md
44
RELEASING.md
|
|
@ -18,20 +18,20 @@ the second Monday of the month (roughly a few of days after the monthly minor re
|
|||
|
||||
## Preparing a new major or minor release
|
||||
|
||||
* Check that
|
||||
- Check that
|
||||
[dependabot has run](https://github.com/open-telemetry/opentelemetry-java-instrumentation/network/updates)
|
||||
sometime in the past day (this link is only accessible if you have write access to the
|
||||
repository), and check that all
|
||||
[dependabot PRs](https://github.com/open-telemetry/opentelemetry-java-contrib/pulls/app%2Fdependabot)
|
||||
have been merged.
|
||||
* Close the [release milestone](https://github.com/open-telemetry/opentelemetry-java-instrumentation/milestones)
|
||||
- Close the [release milestone](https://github.com/open-telemetry/opentelemetry-java-instrumentation/milestones)
|
||||
if there is one.
|
||||
* Merge a pull request to `main` updating the `CHANGELOG.md`.
|
||||
* The heading for the unreleased entries should be `## Unreleased`.
|
||||
* Use `.github/scripts/draft-change-log-entries.sh` as a starting point for writing the change log.
|
||||
* Run the [Prepare release branch workflow](https://github.com/open-telemetry/opentelemetry-java-instrumentation/actions/workflows/prepare-release-branch.yml).
|
||||
* Press the "Run workflow" button, and leave the default branch `main` selected.
|
||||
* Review and merge the two pull requests that it creates
|
||||
- Merge a pull request to `main` updating the `CHANGELOG.md`.
|
||||
- The heading for the unreleased entries should be `## Unreleased`.
|
||||
- Use `.github/scripts/draft-change-log-entries.sh` as a starting point for writing the change log.
|
||||
- Run the [Prepare release branch workflow](https://github.com/open-telemetry/opentelemetry-java-instrumentation/actions/workflows/prepare-release-branch.yml).
|
||||
- Press the "Run workflow" button, and leave the default branch `main` selected.
|
||||
- Review and merge the two pull requests that it creates
|
||||
(one is targeted to the release branch and one is targeted to `main`).
|
||||
|
||||
## Preparing a new patch release
|
||||
|
|
@ -41,31 +41,31 @@ All patch releases should include only bug-fixes, and must avoid adding/modifyin
|
|||
In general, patch releases are only made for regressions, security vulnerabilities, memory leaks
|
||||
and deadlocks.
|
||||
|
||||
* Backport pull request(s) to the release branch.
|
||||
* Run the [Backport workflow](https://github.com/open-telemetry/opentelemetry-java-instrumentation/actions/workflows/backport.yml).
|
||||
* Press the "Run workflow" button, then select the release branch from the dropdown list,
|
||||
- Backport pull request(s) to the release branch.
|
||||
- Run the [Backport workflow](https://github.com/open-telemetry/opentelemetry-java-instrumentation/actions/workflows/backport.yml).
|
||||
- Press the "Run workflow" button, then select the release branch from the dropdown list,
|
||||
e.g. `release/v1.9.x`, then enter the pull request number that you want to backport,
|
||||
then click the "Run workflow" button below that.
|
||||
* Review and merge the backport pull request that it generates.
|
||||
* Note: if the PR contains any changes to workflow files, it will have to be manually backported,
|
||||
- Review and merge the backport pull request that it generates.
|
||||
- Note: if the PR contains any changes to workflow files, it will have to be manually backported,
|
||||
because the default `GITHUB_TOKEN` does not have permission to update workflow files (and the
|
||||
`opentelemetrybot` token doesn't have write permission to this repository at all, so while it
|
||||
can be used to open a PR, it can't be used to push to a local branch).
|
||||
* Merge a pull request to the release branch updating the `CHANGELOG.md`.
|
||||
* The heading for the unreleased entries should be `## Unreleased`.
|
||||
* Run the [Prepare patch release workflow](https://github.com/open-telemetry/opentelemetry-java-instrumentation/actions/workflows/prepare-patch-release.yml).
|
||||
* Press the "Run workflow" button, then select the release branch from the dropdown list,
|
||||
- Merge a pull request to the release branch updating the `CHANGELOG.md`.
|
||||
- The heading for the unreleased entries should be `## Unreleased`.
|
||||
- Run the [Prepare patch release workflow](https://github.com/open-telemetry/opentelemetry-java-instrumentation/actions/workflows/prepare-patch-release.yml).
|
||||
- Press the "Run workflow" button, then select the release branch from the dropdown list,
|
||||
e.g. `release/v1.9.x`, and click the "Run workflow" button below that.
|
||||
* Review and merge the pull request that it creates for updating the version.
|
||||
- Review and merge the pull request that it creates for updating the version.
|
||||
|
||||
## Making the release
|
||||
|
||||
* Run the [Release workflow](https://github.com/open-telemetry/opentelemetry-java-instrumentation/actions/workflows/release.yml).
|
||||
* Press the "Run workflow" button, then select the release branch from the dropdown list,
|
||||
- Run the [Release workflow](https://github.com/open-telemetry/opentelemetry-java-instrumentation/actions/workflows/release.yml).
|
||||
- Press the "Run workflow" button, then select the release branch from the dropdown list,
|
||||
e.g. `release/v1.9.x`, and click the "Run workflow" button below that.
|
||||
* This workflow will publish the artifacts to maven central and will publish a GitHub release
|
||||
- This workflow will publish the artifacts to maven central and will publish a GitHub release
|
||||
with release notes based on the change log and with the javaagent jar attached.
|
||||
* Review and merge the pull request that it creates for updating the change log in main
|
||||
- Review and merge the pull request that it creates for updating the change log in main
|
||||
(note that if this is not a patch release then the change log on main may already be up-to-date,
|
||||
in which case no pull request will be created).
|
||||
|
||||
|
|
|
|||
|
|
@ -9,15 +9,15 @@ Artifacts in this repository follow the same compatibility requirements describe
|
|||
EXCEPT for the following incompatible changes which are allowed in stable artifacts in this
|
||||
repository:
|
||||
|
||||
* Changes to the telemetry produced by instrumentation
|
||||
- Changes to the telemetry produced by instrumentation
|
||||
(there will be some guarantees about telemetry stability in the future, see discussions
|
||||
in <https://github.com/open-telemetry/opentelemetry-specification/issues/1301>)
|
||||
* Changes to configuration properties that contain the word `experimental`
|
||||
* Changes to configuration properties under the namespace `otel.javaagent.testing`
|
||||
- Changes to configuration properties that contain the word `experimental`
|
||||
- Changes to configuration properties under the namespace `otel.javaagent.testing`
|
||||
|
||||
This means that:
|
||||
|
||||
* Changes to configuration properties (other than those that contain the word `experimental`
|
||||
- Changes to configuration properties (other than those that contain the word `experimental`
|
||||
or are under the namespace `otel.javaagent.testing`) will be considered breaking changes
|
||||
(unless they only affect telemetry produced by instrumentation)
|
||||
|
||||
|
|
@ -39,24 +39,24 @@ where versioning stability is important.
|
|||
Bumping the minimum supported library version for library instrumentation is generally acceptable
|
||||
if there's a good reason because:
|
||||
|
||||
* Users of library instrumentation have to integrate the library instrumentation during build-time
|
||||
- Users of library instrumentation have to integrate the library instrumentation during build-time
|
||||
of their application, and so have the option to bump the library version if they are using an
|
||||
unsupported library version.
|
||||
* Users have the option of staying with the old version of library instrumentation, without being
|
||||
- Users have the option of staying with the old version of library instrumentation, without being
|
||||
pinned on an old version of the OpenTelemetry API and SDK.
|
||||
* Bumping the minimum library version changes the artifact name, so it is not technically a breaking
|
||||
- Bumping the minimum library version changes the artifact name, so it is not technically a breaking
|
||||
change.
|
||||
|
||||
### Javaagent instrumentation
|
||||
|
||||
The situation is much trickier for javaagent instrumentation:
|
||||
|
||||
* A common use case of the javaagent is applying instrumentation at deployment-time (including
|
||||
- A common use case of the javaagent is applying instrumentation at deployment-time (including
|
||||
to third-party applications), where bumping the library version is frequently not an option.
|
||||
* While users have the option of staying with the old version of javaagent, that pins them on
|
||||
- While users have the option of staying with the old version of javaagent, that pins them on
|
||||
an old version of the OpenTelemetry API and SDK, which is problematic for the OpenTelemetry
|
||||
ecosystem.
|
||||
* While bumping the minimum library version changes the instrumentation module name, it does not
|
||||
- While bumping the minimum library version changes the instrumentation module name, it does not
|
||||
change the "aggregated" javaagent artifact name which most users depend on, so could be considered
|
||||
a breaking change for some users (though this is not a breaking change that we currently make any
|
||||
guarantees about).
|
||||
|
|
@ -68,8 +68,8 @@ When there is functionality in a new library version that requires changes to th
|
|||
instrumentation which are incompatible with the current javaagent base library version, some options
|
||||
that do not require bumping the minimum supported library version include:
|
||||
|
||||
* Access the new functionality via reflection. This is a good technique only for very small changes.
|
||||
* Create a new javaagent instrumentation module to support the new library version. This requires
|
||||
- Access the new functionality via reflection. This is a good technique only for very small changes.
|
||||
- Create a new javaagent instrumentation module to support the new library version. This requires
|
||||
configuring non-overlapping versions in the muzzle check and applying `assertInverse` to confirm
|
||||
that the two instrumentations are never be applied to the same library version (see
|
||||
[class loader matchers](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/docs/contributing/writing-instrumentation-module.md#restrict-the-criteria-for-applying-the-instrumentation-by-extending-the-classloadermatcher-method)
|
||||
|
|
|
|||
|
|
@ -1,13 +1,12 @@
|
|||
|
||||
# Overhead tests
|
||||
|
||||
* [Process](#process)
|
||||
* [What do we measure?](#what-do-we-measure)
|
||||
* [Config](#config)
|
||||
* [Agents](#agents)
|
||||
* [Automation](#automation)
|
||||
* [Setup and Usage](#setup-and-usage)
|
||||
* [Visualization](#visualization)
|
||||
- [Process](#process)
|
||||
- [What do we measure?](#what-do-we-measure)
|
||||
- [Config](#config)
|
||||
- [Agents](#agents)
|
||||
- [Automation](#automation)
|
||||
- [Setup and Usage](#setup-and-usage)
|
||||
- [Visualization](#visualization)
|
||||
|
||||
This directory will contain tools and utilities
|
||||
that help us to measure the performance overhead introduced by
|
||||
|
|
@ -43,43 +42,43 @@ For each test pass, we record the following metrics in order to compare agents a
|
|||
relative overhead.
|
||||
|
||||
| metric name | units | description |
|
||||
|--------------------------|------------|----------------------------------------------------------|
|
||||
| Startup time | ms | How long it takes for the spring app to report "healthy"
|
||||
| Total allocated mem | bytes | Across the life of the application
|
||||
| Heap (min) | bytes | Smallest observed heap size
|
||||
| Heap (max) | bytes | Largest observed heap size
|
||||
| Thread switch rate | # / s | Max observed thread context switch rate
|
||||
| GC time | ms | Total amount of time spent paused for garbage collection
|
||||
| Request mean | ms | Average time to handle a single web request (measured at the caller)
|
||||
| Request p95 | ms | 95th percentile time to handle a single web requ4st (measured at the caller)
|
||||
| Iteration mean | ms | average time to do a single pass through the k6 test script
|
||||
| Iteration p95 | ms | 95th percentile time to do a single pass through the k6 test script
|
||||
| Peak threads | # | Highest number of running threads in the VM, including agent threads
|
||||
| Network read mean | bits/s | Average network read rate
|
||||
| Network write mean | bits/s | Average network write rate
|
||||
| Average JVM user CPU | % | Average observed user CPU (range 0.0-1.0)
|
||||
| Max JVM user CPU | % | Max observed user CPU used (range 0.0-1.0)
|
||||
| Average machine tot. CPU | % | Average percentage of machine CPU used (range 0.0-1.0)
|
||||
| Total GC pause nanos | ns | JVM time spent paused due to GC
|
||||
| Run duration ms | ms | Duration of the test run, in ms
|
||||
| ------------------------ | ------ | ---------------------------------------------------------------------------- |
|
||||
| Startup time | ms | How long it takes for the spring app to report "healthy" |
|
||||
| Total allocated mem | bytes | Across the life of the application |
|
||||
| Heap (min) | bytes | Smallest observed heap size |
|
||||
| Heap (max) | bytes | Largest observed heap size |
|
||||
| Thread switch rate | # / s | Max observed thread context switch rate |
|
||||
| GC time | ms | Total amount of time spent paused for garbage collection |
|
||||
| Request mean | ms | Average time to handle a single web request (measured at the caller) |
|
||||
| Request p95 | ms | 95th percentile time to handle a single web requ4st (measured at the caller) |
|
||||
| Iteration mean | ms | average time to do a single pass through the k6 test script |
|
||||
| Iteration p95 | ms | 95th percentile time to do a single pass through the k6 test script |
|
||||
| Peak threads | # | Highest number of running threads in the VM, including agent threads |
|
||||
| Network read mean | bits/s | Average network read rate |
|
||||
| Network write mean | bits/s | Average network write rate |
|
||||
| Average JVM user CPU | % | Average observed user CPU (range 0.0-1.0) |
|
||||
| Max JVM user CPU | % | Max observed user CPU used (range 0.0-1.0) |
|
||||
| Average machine tot. CPU | % | Average percentage of machine CPU used (range 0.0-1.0) |
|
||||
| Total GC pause nanos | ns | JVM time spent paused due to GC |
|
||||
| Run duration ms | ms | Duration of the test run, in ms |
|
||||
|
||||
## Config
|
||||
|
||||
Each config contains the following:
|
||||
|
||||
* name
|
||||
* description
|
||||
* list of agents (see below)
|
||||
* maxRequestRate (optional, used to throttle traffic)
|
||||
* concurrentConnections (number of concurrent virtual users [VUs])
|
||||
* totalIterations - the number of passes to make through the k6 test script
|
||||
* warmupSeconds - how long to wait before starting conducting measurements
|
||||
- name
|
||||
- description
|
||||
- list of agents (see below)
|
||||
- maxRequestRate (optional, used to throttle traffic)
|
||||
- concurrentConnections (number of concurrent virtual users [VUs])
|
||||
- totalIterations - the number of passes to make through the k6 test script
|
||||
- warmupSeconds - how long to wait before starting conducting measurements
|
||||
|
||||
Currently, we test:
|
||||
|
||||
* no agent versus latest released agent
|
||||
* no agent versus latest snapshot
|
||||
* latest release vs. latest snapshot
|
||||
- no agent versus latest released agent
|
||||
- no agent versus latest snapshot
|
||||
- latest release vs. latest snapshot
|
||||
|
||||
Additional configurations can be created by submitting a PR against the `Configs` class.
|
||||
|
||||
|
|
|
|||
|
|
@ -15,15 +15,15 @@ This option should not be used lightly, as it can leave some instrumentation par
|
|||
which could have unknown side-effects.
|
||||
|
||||
| System property | Environment variable | Purpose |
|
||||
|--------------------------------|--------------------------------|---------------------------------------------------------------------------------------------------|
|
||||
| otel.javaagent.exclude-classes | OTEL_JAVAAGENT_EXCLUDE_CLASSES | Suppresses all instrumentation for specific classes, format is "my.package.MyClass,my.package2.*" |
|
||||
| ------------------------------ | ------------------------------ | -------------------------------------------------------------------------------------------------- |
|
||||
| otel.javaagent.exclude-classes | OTEL_JAVAAGENT_EXCLUDE_CLASSES | Suppresses all instrumentation for specific classes, format is "my.package.MyClass,my.package2.\*" |
|
||||
|
||||
## Running application with security manager
|
||||
|
||||
This option can be used to let agent run with all privileges without being affected by security policy restricting some operations.
|
||||
|
||||
| System property | Environment variable | Purpose |
|
||||
|--------------------------------------------------------------|--------------------------------------------------------------|---------------------------------------|
|
||||
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------- |
|
||||
| otel.javaagent.experimental.security-manager-support.enabled | OTEL_JAVAAGENT_EXPERIMENTAL_SECURITY_MANAGER_SUPPORT_ENABLED | Grant all privileges to agent code[1] |
|
||||
|
||||
[1] Disclaimer: agent can provide application means for escaping security manager sandbox. Do not use
|
||||
|
|
|
|||
|
|
@ -26,14 +26,14 @@ maybe due to other reasons. In any case, here's some things that might help:
|
|||
|
||||
### Invalidate Caches > "Just restart"
|
||||
|
||||
* Go to File > Invalidate Caches...
|
||||
* Unselect all the options
|
||||
* Click the "Just restart" link
|
||||
- Go to File > Invalidate Caches...
|
||||
- Unselect all the options
|
||||
- Click the "Just restart" link
|
||||
|
||||
This seems to fix more issues than just closing and re-opening Intellij :shrug:.
|
||||
|
||||
### Delete your `.idea` directory
|
||||
|
||||
* Close Intellij
|
||||
* Delete the `.idea` directory in the root directory of your local repository
|
||||
* Open Intellij
|
||||
- Close Intellij
|
||||
- Delete the `.idea` directory in the root directory of your local repository
|
||||
- Open Intellij
|
||||
|
|
|
|||
|
|
@ -3,10 +3,10 @@
|
|||
The javaagent can be logically divided into several parts, based on the class loader that contains
|
||||
particular classes (and resources) in the runtime:
|
||||
|
||||
* The main agent class living in the system class loader.
|
||||
* Classes that live in the bootstrap class loader.
|
||||
* Classes that live in the agent class loader.
|
||||
* Javaagent extensions, and the extension class loader(s).
|
||||
- The main agent class living in the system class loader.
|
||||
- Classes that live in the bootstrap class loader.
|
||||
- Classes that live in the agent class loader.
|
||||
- Javaagent extensions, and the extension class loader(s).
|
||||
|
||||
## System class loader
|
||||
|
||||
|
|
@ -25,31 +25,31 @@ Inside the javaagent jar, this class is located in the `io/opentelemetry/javaage
|
|||
|
||||
The bootstrap class loader contains several modules:
|
||||
|
||||
* **The `javaagent-bootstrap` module**:
|
||||
- **The `javaagent-bootstrap` module**:
|
||||
it contains classes that continue the initialization work started by `OpenTelemetryAgent`, as well
|
||||
as some internal javaagent classes and interfaces that must be globally available to the whole
|
||||
application. This module is internal and its APIs are considered unstable.
|
||||
* **The `instrumentation-api` and `instrumentation-api-semconv` modules**:
|
||||
- **The `instrumentation-api` and `instrumentation-api-semconv` modules**:
|
||||
these modules contain the [Instrumenter API](using-instrumenter-api.md) and other related
|
||||
utilities. Because they are used by almost all instrumentations, they must be globally available
|
||||
to all classloaders running within the instrumented application. The classes located in these
|
||||
modules are used by both javaagent and library instrumentations - they all must be usable even
|
||||
without the javaagent present.
|
||||
* **The `instrumentation-annotations-support` module**:
|
||||
- **The `instrumentation-annotations-support` module**:
|
||||
it contains classes that provide support for annotation-based auto-instrumentation, e.g.
|
||||
the `@WithSpan` annotation. This module is internal and its APIs are considered unstable.
|
||||
* **The `io.opentelemetry.javaagent.bootstrap` package from the `javaagent-extension-api` module**:
|
||||
- **The `io.opentelemetry.javaagent.bootstrap` package from the `javaagent-extension-api` module**:
|
||||
this package contains several instrumentation utilities that are only usable when an application
|
||||
is instrumented with the javaagent; for example, the `Java8BytecodeBridge` that should be used
|
||||
inside advice classes.
|
||||
* All modules using the `otel.javaagent-bootstrap` Gradle plugin:
|
||||
- All modules using the `otel.javaagent-bootstrap` Gradle plugin:
|
||||
these modules contain instrumentation-specific classes that must be globally available in the
|
||||
bootstrap class loader. For example, classes that are used to coordinate
|
||||
different `InstrumentationModule`s, like the common utilities for storing Servlet context path, or
|
||||
the thread local switch used to coordinate different Kafka consumer instrumentations. By
|
||||
convention, all these modules are named according to this
|
||||
pattern: `:instrumentation:...:bootstrap`.
|
||||
* The [OpenTelemetry API](https://github.com/open-telemetry/opentelemetry-java/tree/main/api/all).
|
||||
- The [OpenTelemetry API](https://github.com/open-telemetry/opentelemetry-java/tree/main/api/all).
|
||||
|
||||
Inside the javaagent jar, these classes are all located under the `io/opentelemetry/javaagent/`
|
||||
directory. Aside from the javaagent-specific `javaagent-bootstrap` and `javaagent-extension-api`
|
||||
|
|
@ -61,27 +61,27 @@ versions of some of our APIs (`opentelemetry-api`, `instrumentation-api`).
|
|||
|
||||
The agent class loader contains almost everything else not mentioned before, including:
|
||||
|
||||
* **The `javaagent-tooling` module**:
|
||||
- **The `javaagent-tooling` module**:
|
||||
this module picks up the initialization process started by `OpenTelemetryAgent`
|
||||
and `javaagent-bootstrap` and actually finishes the work, starting up the OpenTelemetry SDK and
|
||||
building and installing the `ClassFileTransformer` in the JVM. The javaagent
|
||||
uses [ByteBuddy](https://bytebuddy.net) to configure and construct the `ClassFileTransformer`.
|
||||
This module is internal and its APIs are considered unstable.
|
||||
* **The `muzzle` module**:
|
||||
- **The `muzzle` module**:
|
||||
it contains classes that are internally used by [muzzle](muzzle.md), our safety net feature. This
|
||||
module is internal and its APIs are considered unstable.
|
||||
* **The `io.opentelemetry.javaagent.extension` package from the `javaagent-extension-api` module**:
|
||||
- **The `io.opentelemetry.javaagent.extension` package from the `javaagent-extension-api` module**:
|
||||
this package contains common extension points and SPIs that can be used to customize the agent
|
||||
behavior.
|
||||
* All modules using the `otel.javaagent-instrumentation` Gradle plugin:
|
||||
- All modules using the `otel.javaagent-instrumentation` Gradle plugin:
|
||||
these modules contain actual javaagent instrumentations. Almost all of them implement
|
||||
the `InstrumentationModule`, some of them include a library instrumentation as an `implementation`
|
||||
dependency. You can read more about writing instrumentations [here](writing-instrumentation.md).
|
||||
By convention, all these modules are named according to this
|
||||
pattern: `:instrumentation:...:javaagent`.
|
||||
* The [OpenTelemetry SDK](https://github.com/open-telemetry/opentelemetry-java/tree/main/sdk/all),
|
||||
- The [OpenTelemetry SDK](https://github.com/open-telemetry/opentelemetry-java/tree/main/sdk/all),
|
||||
along with various exporters and SDK extensions.
|
||||
* [ByteBuddy](https://bytebuddy.net).
|
||||
- [ByteBuddy](https://bytebuddy.net).
|
||||
|
||||
Inside the javaagent jar, all classes and resources that are meant to be loaded by
|
||||
the `AgentClassLoader` are placed inside the `inst/` directory. All Java class files have
|
||||
|
|
|
|||
|
|
@ -7,10 +7,10 @@ There are a few key components that make this possible, described below.
|
|||
|
||||
## gradle/instrumentation.gradle
|
||||
|
||||
* shades the instrumentation
|
||||
* adds jvm args to the test configuration
|
||||
* -javaagent:[agent for testing]
|
||||
* -Dotel.javaagent.experimental.initializer.jar=[shaded instrumentation jar]
|
||||
- shades the instrumentation
|
||||
- adds jvm args to the test configuration
|
||||
- -javaagent:[agent for testing]
|
||||
- -Dotel.javaagent.experimental.initializer.jar=[shaded instrumentation jar]
|
||||
|
||||
The `otel.javaagent.experimental.initializer.jar` property is used to load the shaded instrumentation jar into the
|
||||
`AgentClassLoader`, so that the javaagent jar doesn't need to be re-built each time.
|
||||
|
|
|
|||
|
|
@ -13,8 +13,8 @@ Muzzle will prevent loading an instrumentation if it detects any mismatch or con
|
|||
|
||||
Muzzle has two phases:
|
||||
|
||||
* at compile time it collects references to the third-party symbols and used helper classes;
|
||||
* at runtime it compares those references to the actual API symbols on the classpath.
|
||||
- at compile time it collects references to the third-party symbols and used helper classes;
|
||||
- at runtime it compares those references to the actual API symbols on the classpath.
|
||||
|
||||
### Compile-time reference collection
|
||||
|
||||
|
|
@ -73,7 +73,7 @@ it's not an optional feature.
|
|||
|
||||
The gradle plugin defines two tasks:
|
||||
|
||||
* `muzzle` task runs the runtime muzzle verification against different library versions:
|
||||
- `muzzle` task runs the runtime muzzle verification against different library versions:
|
||||
|
||||
```sh
|
||||
./gradlew :instrumentation:google-http-client-1.19:javaagent:muzzle
|
||||
|
|
@ -81,7 +81,7 @@ The gradle plugin defines two tasks:
|
|||
|
||||
If a new, incompatible version of the instrumented library is published it fails the build.
|
||||
|
||||
* `printMuzzleReferences` task prints all API references in a given module:
|
||||
- `printMuzzleReferences` task prints all API references in a given module:
|
||||
|
||||
```sh
|
||||
./gradlew :instrumentation:google-http-client-1.19:javaagent:printMuzzleReferences
|
||||
|
|
@ -117,14 +117,14 @@ muzzle {
|
|||
}
|
||||
```
|
||||
|
||||
* Using either `pass` or `fail` directive allows to specify whether muzzle should treat the
|
||||
- Using either `pass` or `fail` directive allows to specify whether muzzle should treat the
|
||||
reference check failure as expected behavior;
|
||||
* `versions` is a version range, where `[]` is inclusive and `()` is exclusive. It is not needed to
|
||||
- `versions` is a version range, where `[]` is inclusive and `()` is exclusive. It is not needed to
|
||||
specify the exact version to start/end, e.g. `[1.0.0,4)` would usually behave in the same way as
|
||||
`[1.0.0,4.0.0-Alpha)`;
|
||||
* `assertInverse` is basically a shortcut for adding an opposite directive for all library versions
|
||||
- `assertInverse` is basically a shortcut for adding an opposite directive for all library versions
|
||||
that are not included in the specified `versions` range;
|
||||
* `extraDependency` allows putting additional libs on the classpath just for the compile-time check;
|
||||
- `extraDependency` allows putting additional libs on the classpath just for the compile-time check;
|
||||
this is usually used for jars that are not bundled with the instrumented lib but always present
|
||||
in the runtime anyway.
|
||||
|
||||
|
|
|
|||
|
|
@ -63,7 +63,6 @@ Some tests can be executed as GraalVM native executables:
|
|||
./gradlew nativeTest
|
||||
```
|
||||
|
||||
|
||||
## Docker disk space
|
||||
|
||||
Some of the instrumentation tests (and all of the smoke tests) spin up docker containers via
|
||||
|
|
|
|||
|
|
@ -59,23 +59,23 @@ We leverage static imports for many common types of operations. However, not all
|
|||
constants are necessarily good candidates for a static import. The following list is a very
|
||||
rough guideline of what are commonly accepted static imports:
|
||||
|
||||
* Test assertions (JUnit and AssertJ)
|
||||
* Mocking/stubbing in tests (with Mockito)
|
||||
* Collections helpers (such as `singletonList()` and `Collectors.toList()`)
|
||||
* ByteBuddy `ElementMatchers` (for building instrumentation modules)
|
||||
* Immutable constants (where clearly named)
|
||||
* Singleton instances (especially where clearly named an hopefully immutable)
|
||||
* `tracer()` methods that expose tracer singleton instances
|
||||
- Test assertions (JUnit and AssertJ)
|
||||
- Mocking/stubbing in tests (with Mockito)
|
||||
- Collections helpers (such as `singletonList()` and `Collectors.toList()`)
|
||||
- ByteBuddy `ElementMatchers` (for building instrumentation modules)
|
||||
- Immutable constants (where clearly named)
|
||||
- Singleton instances (especially where clearly named an hopefully immutable)
|
||||
- `tracer()` methods that expose tracer singleton instances
|
||||
|
||||
## Ordering of class contents
|
||||
|
||||
The following order is preferred:
|
||||
|
||||
* Static fields (final before non-final)
|
||||
* Instance fields (final before non-final)
|
||||
* Constructors
|
||||
* Methods
|
||||
* Nested classes
|
||||
- Static fields (final before non-final)
|
||||
- Instance fields (final before non-final)
|
||||
- Constructors
|
||||
- Methods
|
||||
- Nested classes
|
||||
|
||||
If methods call each other, it's nice if the calling method is ordered (somewhere) above
|
||||
the method that it calls. So, for one example, a private method would be ordered (somewhere) below
|
||||
|
|
|
|||
|
|
@ -68,11 +68,11 @@ span and finishes recording the metrics (if any are registered in the `Instrumen
|
|||
|
||||
The `end()` method accepts several arguments:
|
||||
|
||||
* The OpenTelemetry `Context` that was returned by the `start()` method.
|
||||
* The `REQUEST` instance that started the processing.
|
||||
* Optionally, the `RESPONSE` instance that ends the processing - it may be `null` in case it was not
|
||||
- The OpenTelemetry `Context` that was returned by the `start()` method.
|
||||
- The `REQUEST` instance that started the processing.
|
||||
- Optionally, the `RESPONSE` instance that ends the processing - it may be `null` in case it was not
|
||||
received or an error has occurred.
|
||||
* Optionally, a `Throwable` error that was thrown by the operation.
|
||||
- Optionally, a `Throwable` error that was thrown by the operation.
|
||||
|
||||
Consider the following example:
|
||||
|
||||
|
|
@ -105,13 +105,13 @@ An `Instrumenter` can be obtained by calling its static `builder()` method and u
|
|||
returned `InstrumenterBuilder` to configure captured telemetry and apply customizations.
|
||||
The `builder()` method accepts three arguments:
|
||||
|
||||
* An `OpenTelemetry` instance, which is used to obtain the `Tracer` and `Meter` objects.
|
||||
* The instrumentation name, which indicates the _instrumentation_ library name, not the
|
||||
- An `OpenTelemetry` instance, which is used to obtain the `Tracer` and `Meter` objects.
|
||||
- The instrumentation name, which indicates the _instrumentation_ library name, not the
|
||||
_instrumented_ library name. The value passed here should uniquely identify the instrumentation
|
||||
library so that during troubleshooting it's possible to determine where the telemetry came from.
|
||||
Read more about instrumentation libraries in
|
||||
the [OpenTelemetry specification](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/overview.md#instrumentation-libraries).
|
||||
* A `SpanNameExtractor` that determines the span name.
|
||||
- A `SpanNameExtractor` that determines the span name.
|
||||
|
||||
An `Instrumenter` can be built from several smaller components. The following subsections describe
|
||||
all interfaces that can be used to customize an `Instrumenter`.
|
||||
|
|
@ -122,8 +122,8 @@ By setting the instrumentation library version, you let users identify which ver
|
|||
instrumentation produced the telemetry. Make sure you always provide the version to
|
||||
the `Instrumenter`. You can do this in two ways:
|
||||
|
||||
* By calling the `setInstrumentationVersion()` method on the `InstrumenterBuilder`.
|
||||
* By making sure that the JAR file with your instrumentation library contains a properties file in
|
||||
- By calling the `setInstrumentationVersion()` method on the `InstrumenterBuilder`.
|
||||
- By making sure that the JAR file with your instrumentation library contains a properties file in
|
||||
the `META-INF/io/opentelemetry/instrumentation/` directory. You must name the file
|
||||
`${instrumentationName}.properties`, where `${instrumentationName}` is the name of the
|
||||
instrumentation library passed to the `Instrumenter#builder()` method. The file must contain a
|
||||
|
|
@ -171,9 +171,9 @@ method.
|
|||
An `AttributesExtractor` is responsible for extracting span and metric attributes when the
|
||||
processing starts and ends. It contains two methods:
|
||||
|
||||
* The `onStart()` method is called when the instrumented operation starts. It accepts two
|
||||
- The `onStart()` method is called when the instrumented operation starts. It accepts two
|
||||
parameters: an `AttributesBuilder` instance and the incoming `REQUEST` instance.
|
||||
* The `onEnd()` method is called when the instrumented operation ends. It accepts the same two
|
||||
- The `onEnd()` method is called when the instrumented operation ends. It accepts the same two
|
||||
parameters as `onStart()` and also an optional `RESPONSE` and an optional `Throwable` error.
|
||||
|
||||
The aim of both methods is to extract interesting attributes from the received request (and response
|
||||
|
|
@ -253,9 +253,9 @@ the `setSpanStatusExtractor()` method.
|
|||
The `SpanLinksExtractor` interface can be used to add links to other spans when the instrumented
|
||||
operation starts. It has a single `extract()` method that receives the following arguments:
|
||||
|
||||
* A `SpanLinkBuilder` that can be used to add the links.
|
||||
* The parent `Context` that was passed in to `Instrumenter#start()`.
|
||||
* The `REQUEST` instance that was passed in to `Instrumenter#start()`.
|
||||
- A `SpanLinkBuilder` that can be used to add the links.
|
||||
- The parent `Context` that was passed in to `Instrumenter#start()`.
|
||||
- The `REQUEST` instance that was passed in to `Instrumenter#start()`.
|
||||
|
||||
You can read more about span links and their use
|
||||
cases [here](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/overview.md#links-between-spans).
|
||||
|
|
@ -326,10 +326,10 @@ and `OperationListener` interfaces. `OperationMetrics` is simply a factory inter
|
|||
the `OperationListener` - it receives an OpenTelemetry `Meter` and returns a new listener.
|
||||
The `OperationListener` contains two methods:
|
||||
|
||||
* `onStart()` that gets executed when the instrumented operation starts. It returns a `Context` - it
|
||||
- `onStart()` that gets executed when the instrumented operation starts. It returns a `Context` - it
|
||||
can be used to store internal metrics state that should be propagated to the `onEnd()` call, if
|
||||
needed.
|
||||
* `onEnd()` that gets executed when the instrumented operation ends.
|
||||
- `onEnd()` that gets executed when the instrumented operation ends.
|
||||
|
||||
Both methods accept a `Context`, an instance of `Attributes` that contains either attributes
|
||||
computed on instrumented operation start or end, and the start and end nanoseconds timestamp that
|
||||
|
|
@ -418,16 +418,16 @@ method for that: passing `false` will turn the newly created `Instrumenter` into
|
|||
The `Instrumenter` creation process ends with calling one of the following `InstrumenterBuilder`
|
||||
methods:
|
||||
|
||||
* `newInstrumenter()`: the returned `Instrumenter` will always start spans with kind `INTERNAL`.
|
||||
* `newInstrumenter(SpanKindExtractor)`: the returned `Instrumenter` will always start spans with
|
||||
- `newInstrumenter()`: the returned `Instrumenter` will always start spans with kind `INTERNAL`.
|
||||
- `newInstrumenter(SpanKindExtractor)`: the returned `Instrumenter` will always start spans with
|
||||
kind determined by the passed `SpanKindExtractor`.
|
||||
* `newClientInstrumenter(TextMapSetter)`: the returned `Instrumenter` will always start `CLIENT`
|
||||
- `newClientInstrumenter(TextMapSetter)`: the returned `Instrumenter` will always start `CLIENT`
|
||||
spans and will propagate operation context into the outgoing request.
|
||||
* `newServerInstrumenter(TextMapGetter)`: the returned `Instrumenter` will always start `SERVER`
|
||||
- `newServerInstrumenter(TextMapGetter)`: the returned `Instrumenter` will always start `SERVER`
|
||||
spans and will extract the parent span context from the incoming request.
|
||||
* `newProducerInstrumenter(TextMapSetter)`: the returned `Instrumenter` will always start `PRODUCER`
|
||||
- `newProducerInstrumenter(TextMapSetter)`: the returned `Instrumenter` will always start `PRODUCER`
|
||||
spans and will propagate operation context into the outgoing request.
|
||||
* `newConsumerInstrumenter(TextMapGetter)`: the returned `Instrumenter` will always start `SERVER`
|
||||
- `newConsumerInstrumenter(TextMapGetter)`: the returned `Instrumenter` will always start `SERVER`
|
||||
spans and will extract the parent span context from the incoming request.
|
||||
|
||||
The last four variants that create non-`INTERNAL` spans accept either `TextMapSetter`
|
||||
|
|
|
|||
|
|
@ -190,11 +190,11 @@ This method describes what transformations should be applied to the
|
|||
matched type. The interface `TypeTransformer`, implemented internally by the agent,
|
||||
defines a set of available transformations that you can apply:
|
||||
|
||||
* `applyAdviceToMethod(ElementMatcher<? super MethodDescription>, String)` lets you apply
|
||||
- `applyAdviceToMethod(ElementMatcher<? super MethodDescription>, String)` lets you apply
|
||||
an advice class (the second parameter) to all matching methods (the first parameter). We
|
||||
suggest to make the method matchers as strict as possible: the type instrumentation should
|
||||
only instrument the code that it targets.
|
||||
* `applyTransformer(AgentBuilder.Transformer)` lets you to inject an arbitrary ByteBuddy
|
||||
- `applyTransformer(AgentBuilder.Transformer)` lets you to inject an arbitrary ByteBuddy
|
||||
transformer. This is an advanced, low-level option that is not subjected to muzzle safety
|
||||
checks and helper class detection. Use it responsibly.
|
||||
|
||||
|
|
@ -238,15 +238,15 @@ the instrumented library class files. You should not treat them as ordinary, pla
|
|||
|
||||
Unfortunately many standard practices do not apply to advice classes:
|
||||
|
||||
* If they're inner classes, they MUST be static.
|
||||
* They MUST only contain static methods.
|
||||
* They MUST NOT contain any state (fields) whatsoever, static constants included. Only the advice
|
||||
- If they're inner classes, they MUST be static.
|
||||
- They MUST only contain static methods.
|
||||
- They MUST NOT contain any state (fields) whatsoever, static constants included. Only the advice
|
||||
methods' content is copied to the instrumented code, constants are not.
|
||||
* Inner advice classes defined in an `InstrumentationModule` or a `TypeInstrumentation` MUST NOT use
|
||||
- Inner advice classes defined in an `InstrumentationModule` or a `TypeInstrumentation` MUST NOT use
|
||||
anything from the outer class (loggers, constants, etc).
|
||||
* Reusing code by extracting a common method and/or parent class won't work: create additional helper
|
||||
- Reusing code by extracting a common method and/or parent class won't work: create additional helper
|
||||
classes to store any reusable code instead.
|
||||
* They SHOULD NOT contain any methods other than `@Advice`-annotated method.
|
||||
- They SHOULD NOT contain any methods other than `@Advice`-annotated method.
|
||||
|
||||
Consider the following example:
|
||||
|
||||
|
|
|
|||
|
|
@ -360,8 +360,8 @@ instrumentation modules.
|
|||
|
||||
Some examples of this include:
|
||||
|
||||
* Application server instrumentations communicating with Servlet API instrumentations.
|
||||
* Different high-level Kafka consumer instrumentations suppressing the low-level `kafka-clients`
|
||||
- Application server instrumentations communicating with Servlet API instrumentations.
|
||||
- Different high-level Kafka consumer instrumentations suppressing the low-level `kafka-clients`
|
||||
instrumentation.
|
||||
|
||||
Create a module named `bootstrap` and add a `build.gradle.kts` file with the following content:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ logs can correlate traces/spans with log statements.
|
|||
> Note: There are also log appenders for exporting logs to OpenTelemetry, not to be confused with the MDC appenders.
|
||||
|
||||
| Library | Auto-instrumented versions | Standalone Library Instrumentation |
|
||||
|---------|----------------------------|--------------------------------------------------------------------------------------|
|
||||
| ------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | --- |
|
||||
| Log4j 1 | 1.2+ | |
|
||||
| Log4j 2 | 2.7+ | [opentelemetry-log4j-context-data-2.17-autoconfigure](../instrumentation/log4j/log4j-context-data/log4j-context-data-2.17/library-autoconfigure) | |
|
||||
| Logback | 1.0+ | [opentelemetry-logback-mdc-1.0](../instrumentation/logback/logback-mdc-1.0/library) |
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@
|
|||
|
||||
These two things must seamlessly interoperate:
|
||||
|
||||
* Instrumentation provided by the Java agent
|
||||
* Instrumentation provided by the user app, using any 1.0+ version of the OpenTelemetry API
|
||||
- Instrumentation provided by the Java agent
|
||||
- Instrumentation provided by the user app, using any 1.0+ version of the OpenTelemetry API
|
||||
|
||||
## Design
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
Both javaagent and library-based approaches to the following:
|
||||
|
||||
* Instrumentation for specific Java libraries and frameworks
|
||||
* Emitting spans and metrics (and in the future logs)
|
||||
* System metrics
|
||||
* MDC logging integrations
|
||||
* Encoding traceId/spanId into logs
|
||||
* Spring Boot starters
|
||||
- Instrumentation for specific Java libraries and frameworks
|
||||
- Emitting spans and metrics (and in the future logs)
|
||||
- System metrics
|
||||
- MDC logging integrations
|
||||
- Encoding traceId/spanId into logs
|
||||
- Spring Boot starters
|
||||
|
|
|
|||
|
|
@ -8,17 +8,17 @@ or [contributing](../CONTRIBUTING.md).
|
|||
|
||||
## Contents
|
||||
|
||||
* [Libraries / Frameworks](#libraries--frameworks)
|
||||
* [Application Servers](#application-servers)
|
||||
* [JVMs and Operating Systems](#jvms-and-operating-systems)
|
||||
* [Disabled instrumentations](#disabled-instrumentations)
|
||||
- [Libraries / Frameworks](#libraries--frameworks)
|
||||
- [Application Servers](#application-servers)
|
||||
- [JVMs and Operating Systems](#jvms-and-operating-systems)
|
||||
- [Disabled instrumentations](#disabled-instrumentations)
|
||||
|
||||
## Libraries / Frameworks
|
||||
|
||||
These are the supported libraries and frameworks:
|
||||
|
||||
| Library/Framework | Auto-instrumented versions | Standalone Library Instrumentation [1] | Semantic Conventions |
|
||||
|---------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|
|
||||
| ------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
|
||||
| [Akka Actors](https://doc.akka.io/docs/akka/current/typed/index.html) | 2.5+ | N/A | Context propagation |
|
||||
| [Akka HTTP](https://doc.akka.io/docs/akka-http/current/index.html) | 10.0+ | N/A | [HTTP Client Spans], [HTTP Client Metrics], [HTTP Server Spans], [HTTP Server Metrics] |
|
||||
| [Apache Axis2](https://axis.apache.org/axis2/java/core/) | 1.6+ | N/A | Provides `http.route` [2], Controller Spans [3] |
|
||||
|
|
@ -164,7 +164,7 @@ These are the supported libraries and frameworks:
|
|||
These are the application servers that the smoke tests are run against:
|
||||
|
||||
| Application server | Version | JVM | OS |
|
||||
| ----------------------------------------------------------------------------------------- | --------------------------- | ----------------- | ------------------------------ |
|
||||
| ------------------------------------------------------------------------------------- | --------------------------- | ----------------- | ------------------------------------- |
|
||||
| [Jetty](https://www.eclipse.org/jetty/) | 9.4.x, 10.0.x, 11.0.x | OpenJDK 8, 11, 17 | [`ubuntu-latest`], [`windows-latest`] |
|
||||
| [Payara](https://www.payara.fish/) | 5.0.x, 5.1.x | OpenJDK 8, 11 | [`ubuntu-latest`], [`windows-latest`] |
|
||||
| [Tomcat](http://tomcat.apache.org/) | 7.0.x | OpenJDK 8 | [`ubuntu-latest`], [`windows-latest`] |
|
||||
|
|
@ -183,7 +183,7 @@ These are the application servers that the smoke tests are run against:
|
|||
These are the JVMs and operating systems that the integration tests are run against:
|
||||
|
||||
| JVM | Versions | OS |
|
||||
| ------------------------------------------------------------------------------------------ | --------- | ------------------------------ |
|
||||
| ----------------------------------------------------------------------------------------- | --------- | ------------------------------------- |
|
||||
| [OpenJDK (Eclipse Temurin)](https://adoptium.net/) | 8, 11, 17 | [`ubuntu-latest`], [`windows-latest`] |
|
||||
| [OpenJ9 (IBM Semeru Runtimes)](https://developer.ibm.com/languages/java/semeru-runtimes/) | 8, 11, 17 | [`ubuntu-latest`] |
|
||||
|
||||
|
|
|
|||
|
|
@ -11,20 +11,20 @@ its usage.
|
|||
|
||||
This repository has four main submodules:
|
||||
|
||||
* `custom` contains all custom functionality, SPI and other extensions
|
||||
* `agent` contains the main repackaging functionality and, optionally, an entry point to the agent, if one wishes to
|
||||
- `custom` contains all custom functionality, SPI and other extensions
|
||||
- `agent` contains the main repackaging functionality and, optionally, an entry point to the agent, if one wishes to
|
||||
customize that
|
||||
* `instrumentation` contains custom instrumentations added by vendor
|
||||
* `smoke-tests` contains simple tests to verify that resulting agent builds and applies correctly
|
||||
- `instrumentation` contains custom instrumentations added by vendor
|
||||
- `smoke-tests` contains simple tests to verify that resulting agent builds and applies correctly
|
||||
|
||||
## Extensions examples
|
||||
|
||||
* [DemoIdGenerator](custom/src/main/java/com/example/javaagent/DemoIdGenerator.java) - custom `IdGenerator`
|
||||
* [DemoPropagator](custom/src/main/java/com/example/javaagent/DemoPropagator.java) - custom `TextMapPropagator`
|
||||
* [DemoSampler](custom/src/main/java/com/example/javaagent/DemoSampler.java) - custom `Sampler`
|
||||
* [DemoSpanProcessor](custom/src/main/java/com/example/javaagent/DemoSpanProcessor.java) - custom `SpanProcessor`
|
||||
* [DemoSpanExporter](custom/src/main/java/com/example/javaagent/DemoSpanExporter.java) - custom `SpanExporter`
|
||||
* [DemoServlet3InstrumentationModule](instrumentation/servlet-3/src/main/java/com/example/javaagent/instrumentation/DemoServlet3InstrumentationModule.java) - additional instrumentation
|
||||
- [DemoIdGenerator](custom/src/main/java/com/example/javaagent/DemoIdGenerator.java) - custom `IdGenerator`
|
||||
- [DemoPropagator](custom/src/main/java/com/example/javaagent/DemoPropagator.java) - custom `TextMapPropagator`
|
||||
- [DemoSampler](custom/src/main/java/com/example/javaagent/DemoSampler.java) - custom `Sampler`
|
||||
- [DemoSpanProcessor](custom/src/main/java/com/example/javaagent/DemoSpanProcessor.java) - custom `SpanProcessor`
|
||||
- [DemoSpanExporter](custom/src/main/java/com/example/javaagent/DemoSpanExporter.java) - custom `SpanExporter`
|
||||
- [DemoServlet3InstrumentationModule](instrumentation/servlet-3/src/main/java/com/example/javaagent/instrumentation/DemoServlet3InstrumentationModule.java) - additional instrumentation
|
||||
|
||||
## Instrumentation customisation
|
||||
|
||||
|
|
|
|||
|
|
@ -34,12 +34,12 @@ For more information, see the `extendedAgent` task in [build.gradle](build.gradl
|
|||
|
||||
## Extensions examples
|
||||
|
||||
* Custom `IdGenerator`: [DemoIdGenerator](src/main/java/com/example/javaagent/DemoIdGenerator.java)
|
||||
* Custom `TextMapPropagator`: [DemoPropagator](src/main/java/com/example/javaagent/DemoPropagator.java)
|
||||
* Custom `Sampler`: [DemoSampler](src/main/java/com/example/javaagent/DemoSampler.java)
|
||||
* Custom `SpanProcessor`: [DemoSpanProcessor](src/main/java/com/example/javaagent/DemoSpanProcessor.java)
|
||||
* Custom `SpanExporter`: [DemoSpanExporter](src/main/java/com/example/javaagent/DemoSpanExporter.java)
|
||||
* Additional instrumentation: [DemoServlet3InstrumentationModule](src/main/java/com/example/javaagent/instrumentation/DemoServlet3InstrumentationModule.java)
|
||||
- Custom `IdGenerator`: [DemoIdGenerator](src/main/java/com/example/javaagent/DemoIdGenerator.java)
|
||||
- Custom `TextMapPropagator`: [DemoPropagator](src/main/java/com/example/javaagent/DemoPropagator.java)
|
||||
- Custom `Sampler`: [DemoSampler](src/main/java/com/example/javaagent/DemoSampler.java)
|
||||
- Custom `SpanProcessor`: [DemoSpanProcessor](src/main/java/com/example/javaagent/DemoSpanProcessor.java)
|
||||
- Custom `SpanExporter`: [DemoSpanExporter](src/main/java/com/example/javaagent/DemoSpanExporter.java)
|
||||
- Additional instrumentation: [DemoServlet3InstrumentationModule](src/main/java/com/example/javaagent/instrumentation/DemoServlet3InstrumentationModule.java)
|
||||
|
||||
## Sample use cases
|
||||
|
||||
|
|
|
|||
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
For more information, see the respective public setters in the `AwsSdkTelemetryBuilder` classes:
|
||||
|
||||
* [SDK v1](./aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkTelemetryBuilder.java)
|
||||
* [SDK v2](./aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsSdkTelemetryBuilder.java)
|
||||
- [SDK v1](./aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkTelemetryBuilder.java)
|
||||
- [SDK v2](./aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsSdkTelemetryBuilder.java)
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| ------------------------------------------------------------------------ | ------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `otel.instrumentation.aws-sdk.experimental-span-attributes` | Boolean | `false` | Enable the capture of experimental span attributes. |
|
||||
| `otel.instrumentation.aws-sdk.experimental-use-propagator-for-messaging` | Boolean | `false` | v2 only, inject into SNS/SQS attributes with configured propagator: See [v2 README](aws-sdk-2.2/library/README.md#trace-propagation). |
|
||||
|
|
|
|||
|
|
@ -26,9 +26,9 @@ propagating the trace through them.
|
|||
Additionally, you can enable an experimental option to use the configured propagator to inject into
|
||||
message attributes (see [parent README](../../README.md)). This currently supports the following AWS APIs:
|
||||
|
||||
* SQS.SendMessage
|
||||
* SQS.SendMessageBatch
|
||||
* SNS.Publish
|
||||
- SQS.SendMessage
|
||||
- SQS.SendMessageBatch
|
||||
- SNS.Publish
|
||||
(SNS.PublishBatch is not supported at the moment because it is not available in the minimum SDK
|
||||
version targeted by the instrumentation)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the Apache Camel instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| --------------------------------------------------------- | ------- | ------- | --------------------------------------------------- |
|
||||
| `otel.instrumentation.camel.experimental-span-attributes` | Boolean | `false` | Enable the capture of experimental span attributes. |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the Couchbase instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| ------------------------------------------------------------- | ------- | ------- | --------------------------------------------------------------------------------------------------------- |
|
||||
| `otel.instrumentation.couchbase.experimental-span-attributes` | Boolean | `false` | Enables the capture of experimental span attributes (for version 2.6 and higher of this instrumentation). |
|
||||
|
|
|
|||
|
|
@ -1,12 +1,13 @@
|
|||
# Settings for the elasticsearch instrumentation
|
||||
|
||||
## Settings for the [Elasticsearch Java API Client](https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/index.html) instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|----------------------------------------------------------------------------------------------------------------------------|
|
||||
| --------------------------------------------------------- | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `otel.instrumentation.elasticsearch.capture-search-query` | `Boolean | `false` | Enable the capture of search query bodies. Attention: Elasticsearch queries may contain personal or sensitive information. |
|
||||
|
||||
|
||||
## Settings for the [Elasticsearch Transport Client](https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/index.html) instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| ----------------------------------------------------------------- | -------- | ------- | --------------------------------------------------- |
|
||||
| `otel.instrumentation.elasticsearch.experimental-span-attributes` | `Boolean | `false` | Enable the capture of experimental span attributes. |
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Settings for the executors instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| -------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------- |
|
||||
| `otel.instrumentation.executors.include` | List | Empty | List of `Executor` subclasses to be instrumented. |
|
||||
| `otel.instrumentation.executors.include-all` | Boolean | `false` | Whether to instrument all classes that implement the `Executor` interface. |
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Settings for the external annotations instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|----------------- |------ |--------- |------------- |
|
||||
| `otel.instrumentation.external-annotations.include` | String | Default annotations | Configuration for trace annotations, in the form of a pattern that matches `'package.Annotation$Name;*'`.
|
||||
| ----------------------------------------------------------- | ------ | ------------------- | --------------------------------------------------------------------------------------------------------- |
|
||||
| `otel.instrumentation.external-annotations.include` | String | Default annotations | Configuration for trace annotations, in the form of a pattern that matches `'package.Annotation$Name;*'`. |
|
||||
| `otel.instrumentation.external-annotations.exclude-methods` | String | | All methods to be excluded from auto-instrumentation by annotation-based advices. |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the GraphQL instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---------|--------------------------------------------------------------------------------------------|
|
||||
| ------------------------------------------------------ | ------- | ------- | ------------------------------------------------------------------------------------------ |
|
||||
| `otel.instrumentation.graphql.query-sanitizer.enabled` | Boolean | `true` | Whether to remove sensitive information from query source that is added as span attribute. |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the gRPC instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| -------------------------------------------------------- | ------- | ------- | --------------------------------------------------- |
|
||||
| `otel.instrumentation.grpc.experimental-span-attributes` | Boolean | `false` | Enable the capture of experimental span attributes. |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the Guava instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| --------------------------------------------------------- | ------- | ------- | --------------------------------------------------- |
|
||||
| `otel.instrumentation.guava.experimental-span-attributes` | Boolean | `false` | Enable the capture of experimental span attributes. |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the Hibernate instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| ------------------------------------------------------------- | ------- | ------- | --------------------------------------------------- |
|
||||
| `otel.instrumentation.hibernate.experimental-span-attributes` | Boolean | `false` | Enable the capture of experimental span attributes. |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the Hystrix instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| ----------------------------------------------------------- | ------- | ------- | --------------------------------------------------- |
|
||||
| `otel.instrumentation.hystrix.experimental-span-attributes` | Boolean | `false` | Enable the capture of experimental span attributes. |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the Java Util Logging instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---------|--|------------------------------------------------------|
|
||||
| -------------------------------------------------------------------- | ------- | ------- | --------------------------------------------------------------------------------- |
|
||||
| `otel.instrumentation.java-util-logging.experimental-log-attributes` | Boolean | `false` | Enable the capture of experimental span attributes `thread.name` and `thread.id`. |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the Jaxrs instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| --------------------------------------------------------- | ------- | ------- | --------------------------------------------------- |
|
||||
| `otel.instrumentation.jaxrs.experimental-span-attributes` | Boolean | `false` | Enable the capture of experimental span attributes. |
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
Here is the list of metrics based on MBeans exposed by ActiveMQ.
|
||||
|
||||
| Metric Name | Type | Attributes | Description |
|
||||
| ---------------- | --------------- | ---------------- | --------------- |
|
||||
| -------------------------------------------- | ------------- | ------------------- | --------------------------------------------------------------------- |
|
||||
| activemq.ProducerCount | UpDownCounter | destination, broker | The number of producers attached to this destination |
|
||||
| activemq.ConsumerCount | UpDownCounter | destination, broker | The number of consumers subscribed to this destination |
|
||||
| activemq.memory.MemoryPercentUsage | Gauge | destination, broker | The percentage of configured memory used |
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
Here is the list of metrics based on MBeans exposed by Hadoop.
|
||||
|
||||
| Metric Name | Type | Attributes | Description |
|
||||
|-----------------------------------|---------------|------------------|-------------------------------------------------------|
|
||||
| --------------------------------- | ------------- | ---------------- | ----------------------------------------------------- |
|
||||
| hadoop.capacity.CapacityUsed | UpDownCounter | node_name | Current used capacity across all data nodes |
|
||||
| hadoop.capacity.CapacityTotal | UpDownCounter | node_name | Current raw capacity of data nodes |
|
||||
| hadoop.block.BlocksTotal | UpDownCounter | node_name | Current number of allocated blocks in the system |
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
Here is the list of metrics based on MBeans exposed by Jetty.
|
||||
|
||||
| Metric Name | Type | Attributes | Description |
|
||||
|--------------------------------|---------------|--------------|------------------------------------------------------|
|
||||
| ------------------------------ | ------------- | ------------ | ---------------------------------------------------- |
|
||||
| jetty.session.sessionsCreated | Counter | resource | The number of sessions established in total |
|
||||
| jetty.session.sessionTimeTotal | Counter | resource | The total time sessions have been active |
|
||||
| jetty.session.sessionTimeMax | Gauge | resource | The maximum amount of time a session has been active |
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ Here is the list of metrics based on MBeans exposed by Kafka broker. <br /><br /
|
|||
Broker metrics:
|
||||
|
||||
| Metric Name | Type | Attributes | Description |
|
||||
|------------------------------------|---------------|------------|----------------------------------------------------------------------|
|
||||
| ---------------------------------- | ------------- | ---------- | -------------------------------------------------------------------- |
|
||||
| kafka.message.count | Counter | | The number of messages received by the broker |
|
||||
| kafka.request.count | Counter | type | The number of requests received by the broker |
|
||||
| kafka.request.failed | Counter | type | The number of requests to the broker resulting in a failure |
|
||||
|
|
@ -22,11 +22,12 @@ Broker metrics:
|
|||
| kafka.controller.active.count | UpDownCounter | | The number of controllers active on the broker |
|
||||
| kafka.leaderElection.count | Counter | | The leader election count |
|
||||
| kafka.leaderElection.unclean.count | Counter | | Unclean leader election count - increasing indicates broker failures |
|
||||
|
||||
<br />
|
||||
Log metrics:
|
||||
|
||||
| Metric Name | Type | Attributes | Description |
|
||||
|---------------------------|---------|------------|----------------------------------|
|
||||
| ------------------------- | ------- | ---------- | -------------------------------- |
|
||||
| kafka.logs.flush.count | Counter | | Log flush count |
|
||||
| kafka.logs.flush.time.50p | Gauge | | Log flush time - 50th percentile |
|
||||
| kafka.logs.flush.time.99p | Gauge | | Log flush time - 99th percentile |
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
Here is the list of metrics based on MBeans exposed by Tomcat.
|
||||
|
||||
| Metric Name | Type | Attributes | Description |
|
||||
|--------------------------------------------|---------------|-----------------|-----------------------------------------------------------------|
|
||||
| ------------------------------------------ | ------------- | --------------- | --------------------------------------------------------------- |
|
||||
| http.server.tomcat.sessions.activeSessions | UpDownCounter | context | The number of active sessions |
|
||||
| http.server.tomcat.errorCount | Gauge | name | The number of errors per second on all request processors |
|
||||
| http.server.tomcat.requestCount | Gauge | name | The number of requests per second across all request processors |
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
Here is the list of metrics based on MBeans exposed by Wildfly.
|
||||
|
||||
| Metric Name | Type | Attributes | Description |
|
||||
|----------------------------------------------------|---------------|--------------------|-------------------------------------------------------------------------|
|
||||
| -------------------------------------------------- | ------------- | ------------------ | ----------------------------------------------------------------------- |
|
||||
| wildfly.network.io | Counter | direction, server | Total number of bytes transferred |
|
||||
| wildfly.request.errorCount | Counter | server, listener | The number of 500 responses that have been sent by this listener |
|
||||
| wildfly.request.requestCount | Counter | server, listener | The number of requests this listener has served |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the JSP instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| ------------------------------------------------------- | ------- | ------- | --------------------------------------------------- |
|
||||
| `otel.instrumentation.jsp.experimental-span-attributes` | Boolean | `false` | Enable the capture of experimental span attributes. |
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ Description, etc column indicates there is no registered mapping for the metric
|
|||
collected.
|
||||
|
||||
| Metric Group | Metric Name | Attribute Keys | Instrument Name | Instrument Description | Instrument Type |
|
||||
|--------------|-------------|----------------|-----------------|------------------------|-----------------|
|
||||
| -------------------------------- | ------------------------------------------- | ------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------- |
|
||||
| `app-info` | `commit-id` | `client-id` | | | |
|
||||
| `app-info` | `start-time-ms` | `client-id` | | | |
|
||||
| `app-info` | `version` | `client-id` | | | |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the Kubernetes client instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| --------------------------------------------------------------------- | ------- | ------- | --------------------------------------------------- |
|
||||
| `otel.instrumentation.kubernetes-client.experimental-span-attributes` | Boolean | `false` | Enable the capture of experimental span attributes. |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the Lettuce instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| ----------------------------------------------------------- | ------- | ------- | --------------------------------------------------- |
|
||||
| `otel.instrumentation.lettuce.experimental-span-attributes` | Boolean | `false` | Enable the capture of experimental span attributes. |
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Settings for the Log4j Appender instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---------|--|------------------------------------------------------|
|
||||
| ---------------------------------------------------------------------------------- | ------- | ------- | ----------------------------------------------------------------------------------------------------- |
|
||||
| `otel.instrumentation.log4j-appender.experimental-log-attributes` | Boolean | `false` | Enable the capture of experimental span attributes `thread.name` and `thread.id`. |
|
||||
| `otel.instrumentation.log4j-appender.experimental.capture-map-message-attributes` | Boolean | `false` | Enable the capture of `MapMessage` attributes. |
|
||||
| `otel.instrumentation.log4j-appender.experimental.capture-marker-attribute` | Boolean | `false` | Enable the capture of Log4j markers as attributes. |
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Settings for the Logback Appender instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---------|--|------------------------------------------------------|
|
||||
| -------------------------------------------------------------------------------------- | ------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `otel.instrumentation.logback-appender.experimental-log-attributes` | Boolean | `false` | Enable the capture of experimental span attributes `thread.name` and `thread.id`. |
|
||||
| `otel.instrumentation.logback-appender.experimental.capture-code-attributes` | Boolean | `false` | Enable the capture of [source code attributes]. Note that capturing source code attributes at logging sites might add a performance overhead. |
|
||||
| `otel.instrumentation.logback-appender.experimental.capture-marker-attribute` | Boolean | `false` | Enable the capture of Logback markers as attributes. |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the Logback MDC instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| ---------------------------------------------- | ------- | ------- | ----------------------------------------------- |
|
||||
| `otel.instrumentation.logback-mdc.add-baggage` | Boolean | `false` | Enable exposing baggage attributes through MDC. |
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ The following demonstrates how you might configure the appender in your `logback
|
|||
```
|
||||
|
||||
> It's important to note you can also use other encoders in the `ConsoleAppender` like [logstash-logback-encoder](https://github.com/logfellow/logstash-logback-encoder).
|
||||
This can be helpful when the `Span` is invalid and the `trace_id`, `span_id`, and `trace_flags` are all `null` and are hidden entirely from the logs.
|
||||
> This can be helpful when the `Span` is invalid and the `trace_id`, `span_id`, and `trace_flags` are all `null` and are hidden entirely from the logs.
|
||||
|
||||
Logging events will automatically have context information from the span context injected. The
|
||||
following attributes are available for use:
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Settings for the methods instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|----------------- |------ |--------- |------------- |
|
||||
| `otel.instrumentation.methods.include` | String| None | List of methods to include for tracing. For more information, see [Creating spans around methods with `otel.instrumentation.methods.include`][cs].
|
||||
| -------------------------------------- | ------ | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `otel.instrumentation.methods.include` | String | None | List of methods to include for tracing. For more information, see [Creating spans around methods with `otel.instrumentation.methods.include`][cs]. |
|
||||
|
||||
[cs]: https://opentelemetry.io/docs/instrumentation/java/annotations/#creating-spans-around-methods-with-otelinstrumentationmethodsinclude
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Settings for the Micrometer bridge instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|------------------------------------------------------------|---------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| ---------------------------------------------------------- | ------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `otel.instrumentation.micrometer.base-time-unit` | String | `s` | Set the base time unit for the OpenTelemetry `MeterRegistry` implementation. <details><summary>Valid values</summary>`ns`, `nanoseconds`, `us`, `microseconds`, `ms`, `milliseconds`, `s`, `seconds`, `min`, `minutes`, `h`, `hours`, `d`, `days`</details> |
|
||||
| `otel.instrumentation.micrometer.prometheus-mode.enabled` | boolean | false | Enable the "Prometheus mode" this will simulate the behavior of Micrometer's PrometheusMeterRegistry. The instruments will be renamed to match Micrometer instrument naming, and the base time unit will be set to seconds. |
|
||||
| `otel.instrumentation.micrometer.histogram-gauges.enabled` | boolean | false | Enables the generation of gauge-based Micrometer histograms for `DistributionSummary` and `Timer` instruments. |
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Settings for the Netty instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|-----------------------------------------------------------|---------|---------|---------------------------------------------------------------------------------------------------|
|
||||
| --------------------------------------------------------- | ------- | ------- | ------------------------------------------------------------------------------------------------- |
|
||||
| `otel.instrumentation.netty.connection-telemetry.enabled` | Boolean | `false` | Enable the creation of Connect and DNS spans by default for Netty 4.0 and higher instrumentation. |
|
||||
| `otel.instrumentation.netty.ssl-telemetry.enabled` | Boolean | `false` | Enable SSL telemetry for Netty 4.0 and higher instrumentation. |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the OpenSearch instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|----------------------------------------------------------------|-----------|---------|-----------------------------------------------------|
|
||||
| -------------------------------------------------------------- | --------- | ------- | --------------------------------------------------- |
|
||||
| `otel.instrumentation.opensearch.experimental-span-attributes` | `Boolean` | `false` | Enable the capture of experimental span attributes. |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the OpenTelemetry Extension Annotations integration
|
||||
|
||||
| Environment variable | Type | Default | Description |
|
||||
|----------------- |------ |--------- |------------- |
|
||||
| ---------------------------------------------------------------- | ------ | ------- | --------------------------------------------------------------------------------- |
|
||||
| `otel.instrumentation.opentelemetry-annotations.exclude-methods` | String | | All methods to be excluded from auto-instrumentation by annotation-based advices. |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the OpenTelemetry Instrumentation Annotations integration
|
||||
|
||||
| Environment variable | Type | Default | Description |
|
||||
|----------------- |------ |--------- |------------- |
|
||||
| -------------------------------------------------------------------------------- | ------ | ------- | --------------------------------------------------------------------------------- |
|
||||
| `otel.instrumentation.opentelemetry-instrumentation-annotations.exclude-methods` | String | | All methods to be excluded from auto-instrumentation by annotation-based advices. |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the Apache Pulsar instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| ---------------------------------------------------------- | --------- | ------- | --------------------------------------------------- |
|
||||
| `otel.instrumentation.pulsar.experimental-span-attributes` | `Boolean` | `false` | Enable the capture of experimental span attributes. |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the RabbitMQ instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| ------------------------------------------------------------ | ------- | ------- | --------------------------------------------------- |
|
||||
| `otel.instrumentation.rabbitmq.experimental-span-attributes` | Boolean | `false` | Enable the capture of experimental span attributes. |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the Reactor 3.1 instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| ----------------------------------------------------------- | ------- | ------- | --------------------------------------------------- |
|
||||
| `otel.instrumentation.reactor.experimental-span-attributes` | Boolean | `false` | Enable the capture of experimental span attributes. |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the Reactor Netty instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|-------------------------------------------------------------------|---------|---------|----------------------------------------------------------|
|
||||
| ----------------------------------------------------------------- | ------- | ------- | -------------------------------------------------------- |
|
||||
| `otel.instrumentation.reactor-netty.connection-telemetry.enabled` | Boolean | `false` | Enable the creation of Connect and DNS spans by default. |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the Apache RocketMQ remoting-based client instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| ------------------------------------------------------------------- | ------- | ------- | --------------------------------------------------- |
|
||||
| `otel.instrumentation.rocketmq-client.experimental-span-attributes` | Boolean | `false` | Enable the capture of experimental span attributes. |
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
The main entry point is the `RuntimeMetrics` class in the package `io.opentelemetry.instrumentation.runtimemetrics.java17`:
|
||||
|
||||
```java
|
||||
|
|
@ -37,7 +36,7 @@ default, and the telemetry each produces:
|
|||
<!-- generateDocsStart -->
|
||||
|
||||
| JfrFeature | Default Enabled | Metrics |
|
||||
|---|---|---|
|
||||
| ------------------------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| BUFFER_METRICS | false | `process.runtime.jvm.buffer.count`, `process.runtime.jvm.buffer.limit`, `process.runtime.jvm.buffer.usage` |
|
||||
| CLASS_LOAD_METRICS | false | `process.runtime.jvm.classes.current_loaded`, `process.runtime.jvm.classes.loaded`, `process.runtime.jvm.classes.unloaded` |
|
||||
| CONTEXT_SWITCH_METRICS | true | `process.runtime.jvm.cpu.context_switch` |
|
||||
|
|
|
|||
|
|
@ -48,45 +48,45 @@ The attributes reported on the memory metrics (`process.runtime.jvm.memory.*`) a
|
|||
|
||||
The following lists attributes reported for a variety of garbage collectors. Notice that attributes are not necessarily constant across `*.init`, `*.usage`, `*.committed`, and `*.limit` since not all memory pools report a limit.
|
||||
|
||||
* CMS Garbage Collector
|
||||
* `process.runtime.jvm.memory.init`: {pool=Compressed Class Space,type=non_heap}, {pool=Par Eden Space,type=heap}, {pool=Tenured Gen,type=heap}, {pool=Par Survivor Space,type=heap}, {pool=Code Cache,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
* `process.runtime.jvm.memory.usage`: {pool=Compressed Class Space,type=non_heap}, {pool=Par Eden Space,type=heap}, {pool=Tenured Gen,type=heap}, {pool=Par Survivor Space,type=heap}, {pool=Code Cache,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
* `process.runtime.jvm.memory.committed`: {pool=Compressed Class Space,type=non_heap}, {pool=Par Eden Space,type=heap}, {pool=Tenured Gen,type=heap}, {pool=Par Survivor Space,type=heap}, {pool=Code Cache,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
* `process.runtime.jvm.memory.limit`: {pool=Compressed Class Space,type=non_heap}, {pool=Par Eden Space,type=heap}, {pool=Tenured Gen,type=heap}, {pool=Par Survivor Space,type=heap}, {pool=Code Cache,type=non_heap}
|
||||
* `process.runtime.jvm.memory.usage_after_last_gc`: {pool=Par Eden Space,type=heap}, {pool=Tenured Gen,type=heap}, {pool=Par Survivor Space,type=heap}
|
||||
* `process.runtime.jvm.gc.duration`: {action=end of minor GC,gc=ParNew}, {action=end of major GC,gc=MarkSweepCompact}
|
||||
* G1 Garbage Collector
|
||||
* `process.runtime.jvm.memory.init`: {pool=G1 Survivor Space,type=heap}, {pool=G1 Eden Space,type=heap}, {pool=CodeCache,type=non_heap}, {pool=G1 Old Gen,type=heap}, {pool=Compressed Class Space,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
* `process.runtime.jvm.memory.usage`: {pool=G1 Survivor Space,type=heap}, {pool=G1 Eden Space,type=heap}, {pool=CodeCache,type=non_heap}, {pool=G1 Old Gen,type=heap}, {pool=Compressed Class Space,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
* `process.runtime.jvm.memory.committed`: {pool=G1 Survivor Space,type=heap}, {pool=G1 Eden Space,type=heap}, {pool=CodeCache,type=non_heap}, {pool=G1 Old Gen,type=heap}, {pool=Compressed Class Space,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
* `process.runtime.jvm.memory.limit`: {pool=CodeCache,type=non_heap}, {pool=G1 Old Gen,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
* `process.runtime.jvm.memory.usage_after_last_gc`: {pool=G1 Survivor Space,type=heap}, {pool=G1 Eden Space,type=heap}, {pool=G1 Old Gen,type=heap}
|
||||
* `process.runtime.jvm.gc.duration`: {action=end of minor GC,gc=G1 Young Generation}, {action=end of major GC,gc=G1 Old Generation}
|
||||
* Parallel Garbage Collector
|
||||
* `process.runtime.jvm.memory.init`: {pool=CodeCache,type=non_heap}, {pool=PS Survivor Space,type=heap}, {pool=PS Old Gen,type=heap}, {pool=PS Eden Space,type=heap}, {pool=Compressed Class Space,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
* `process.runtime.jvm.memory.usage`: {pool=CodeCache,type=non_heap}, {pool=PS Survivor Space,type=heap}, {pool=PS Old Gen,type=heap}, {pool=PS Eden Space,type=heap}, {pool=Compressed Class Space,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
* `process.runtime.jvm.memory.committed`: {pool=CodeCache,type=non_heap}, {pool=PS Survivor Space,type=heap}, {pool=PS Old Gen,type=heap}, {pool=PS Eden Space,type=heap}, {pool=Compressed Class Space,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
* `process.runtime.jvm.memory.limit`: {pool=CodeCache,type=non_heap}, {pool=PS Survivor Space,type=heap}, {pool=PS Old Gen,type=heap}, {pool=PS Eden Space,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
* `process.runtime.jvm.memory.usage_after_last_gc`: {pool=PS Survivor Space,type=heap}, {pool=PS Old Gen,type=heap}, {pool=PS Eden Space,type=heap}
|
||||
* `process.runtime.jvm.gc.duration`: {action=end of major GC,gc=PS MarkSweep}, {action=end of minor GC,gc=PS Scavenge}
|
||||
* Serial Garbage Collector
|
||||
* `process.runtime.jvm.memory.init`: {pool=CodeCache,type=non_heap}, {pool=Tenured Gen,type=heap}, {pool=Eden Space,type=heap}, {pool=Survivor Space,type=heap}, {pool=Compressed Class Space,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
* `process.runtime.jvm.memory.usage`: {pool=CodeCache,type=non_heap}, {pool=Tenured Gen,type=heap}, {pool=Eden Space,type=heap}, {pool=Survivor Space,type=heap}, {pool=Compressed Class Space,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
* `process.runtime.jvm.memory.committed`: {pool=CodeCache,type=non_heap}, {pool=Tenured Gen,type=heap}, {pool=Eden Space,type=heap}, {pool=Survivor Space,type=heap}, {pool=Compressed Class Space,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
* `process.runtime.jvm.memory.limit`: {pool=CodeCache,type=non_heap}, {pool=Tenured Gen,type=heap}, {pool=Eden Space,type=heap}, {pool=Survivor Space,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
* `process.runtime.jvm.memory.usage_after_last_gc`: {pool=Tenured Gen,type=heap}, {pool=Eden Space,type=heap}, {pool=Survivor Space,type=heap}
|
||||
* `process.runtime.jvm.gc.duration`: {action=end of minor GC,gc=Copy}, {action=end of major GC,gc=MarkSweepCompact}
|
||||
* Shenandoah Garbage Collector
|
||||
* `process.runtime.jvm.memory.init`: {pool=Metaspace,type=non_heap}, {pool=CodeCache,type=non_heap}, {pool=Shenandoah,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
* `process.runtime.jvm.memory.usage`: {pool=Metaspace,type=non_heap}, {pool=CodeCache,type=non_heap}, {pool=Shenandoah,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
* `process.runtime.jvm.memory.committed`: {pool=Metaspace,type=non_heap}, {pool=CodeCache,type=non_heap}, {pool=Shenandoah,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
* `process.runtime.jvm.memory.limit`: {pool=CodeCache,type=non_heap}, {pool=Shenandoah,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
* `process.runtime.jvm.memory.usage_after_last_gc`: {pool=Shenandoah,type=heap}
|
||||
* `process.runtime.jvm.gc.duration`: {action=end of GC cycle,gc=Shenandoah Cycles}, {action=end of GC pause,gc=Shenandoah Pauses}
|
||||
* Z Garbage Collector
|
||||
* `process.runtime.jvm.memory.init`: {pool=Metaspace,type=non_heap}, {pool=CodeCache,type=non_heap}, {pool=ZHeap,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
* `process.runtime.jvm.memory.usage`: {pool=Metaspace,type=non_heap}, {pool=CodeCache,type=non_heap}, {pool=ZHeap,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
* `process.runtime.jvm.memory.committed`: {pool=Metaspace,type=non_heap}, {pool=CodeCache,type=non_heap}, {pool=ZHeap,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
* `process.runtime.jvm.memory.limit`: {pool=CodeCache,type=non_heap}, {pool=ZHeap,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
* `process.runtime.jvm.memory.usage_after_last_gc`: {pool=ZHeap,type=heap}
|
||||
* `process.runtime.jvm.gc.duration`: {action=end of GC cycle,gc=ZGC Cycles}, {action=end of GC pause,gc=ZGC Pauses}
|
||||
- CMS Garbage Collector
|
||||
- `process.runtime.jvm.memory.init`: {pool=Compressed Class Space,type=non_heap}, {pool=Par Eden Space,type=heap}, {pool=Tenured Gen,type=heap}, {pool=Par Survivor Space,type=heap}, {pool=Code Cache,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
- `process.runtime.jvm.memory.usage`: {pool=Compressed Class Space,type=non_heap}, {pool=Par Eden Space,type=heap}, {pool=Tenured Gen,type=heap}, {pool=Par Survivor Space,type=heap}, {pool=Code Cache,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
- `process.runtime.jvm.memory.committed`: {pool=Compressed Class Space,type=non_heap}, {pool=Par Eden Space,type=heap}, {pool=Tenured Gen,type=heap}, {pool=Par Survivor Space,type=heap}, {pool=Code Cache,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
- `process.runtime.jvm.memory.limit`: {pool=Compressed Class Space,type=non_heap}, {pool=Par Eden Space,type=heap}, {pool=Tenured Gen,type=heap}, {pool=Par Survivor Space,type=heap}, {pool=Code Cache,type=non_heap}
|
||||
- `process.runtime.jvm.memory.usage_after_last_gc`: {pool=Par Eden Space,type=heap}, {pool=Tenured Gen,type=heap}, {pool=Par Survivor Space,type=heap}
|
||||
- `process.runtime.jvm.gc.duration`: {action=end of minor GC,gc=ParNew}, {action=end of major GC,gc=MarkSweepCompact}
|
||||
- G1 Garbage Collector
|
||||
- `process.runtime.jvm.memory.init`: {pool=G1 Survivor Space,type=heap}, {pool=G1 Eden Space,type=heap}, {pool=CodeCache,type=non_heap}, {pool=G1 Old Gen,type=heap}, {pool=Compressed Class Space,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
- `process.runtime.jvm.memory.usage`: {pool=G1 Survivor Space,type=heap}, {pool=G1 Eden Space,type=heap}, {pool=CodeCache,type=non_heap}, {pool=G1 Old Gen,type=heap}, {pool=Compressed Class Space,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
- `process.runtime.jvm.memory.committed`: {pool=G1 Survivor Space,type=heap}, {pool=G1 Eden Space,type=heap}, {pool=CodeCache,type=non_heap}, {pool=G1 Old Gen,type=heap}, {pool=Compressed Class Space,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
- `process.runtime.jvm.memory.limit`: {pool=CodeCache,type=non_heap}, {pool=G1 Old Gen,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
- `process.runtime.jvm.memory.usage_after_last_gc`: {pool=G1 Survivor Space,type=heap}, {pool=G1 Eden Space,type=heap}, {pool=G1 Old Gen,type=heap}
|
||||
- `process.runtime.jvm.gc.duration`: {action=end of minor GC,gc=G1 Young Generation}, {action=end of major GC,gc=G1 Old Generation}
|
||||
- Parallel Garbage Collector
|
||||
- `process.runtime.jvm.memory.init`: {pool=CodeCache,type=non_heap}, {pool=PS Survivor Space,type=heap}, {pool=PS Old Gen,type=heap}, {pool=PS Eden Space,type=heap}, {pool=Compressed Class Space,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
- `process.runtime.jvm.memory.usage`: {pool=CodeCache,type=non_heap}, {pool=PS Survivor Space,type=heap}, {pool=PS Old Gen,type=heap}, {pool=PS Eden Space,type=heap}, {pool=Compressed Class Space,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
- `process.runtime.jvm.memory.committed`: {pool=CodeCache,type=non_heap}, {pool=PS Survivor Space,type=heap}, {pool=PS Old Gen,type=heap}, {pool=PS Eden Space,type=heap}, {pool=Compressed Class Space,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
- `process.runtime.jvm.memory.limit`: {pool=CodeCache,type=non_heap}, {pool=PS Survivor Space,type=heap}, {pool=PS Old Gen,type=heap}, {pool=PS Eden Space,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
- `process.runtime.jvm.memory.usage_after_last_gc`: {pool=PS Survivor Space,type=heap}, {pool=PS Old Gen,type=heap}, {pool=PS Eden Space,type=heap}
|
||||
- `process.runtime.jvm.gc.duration`: {action=end of major GC,gc=PS MarkSweep}, {action=end of minor GC,gc=PS Scavenge}
|
||||
- Serial Garbage Collector
|
||||
- `process.runtime.jvm.memory.init`: {pool=CodeCache,type=non_heap}, {pool=Tenured Gen,type=heap}, {pool=Eden Space,type=heap}, {pool=Survivor Space,type=heap}, {pool=Compressed Class Space,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
- `process.runtime.jvm.memory.usage`: {pool=CodeCache,type=non_heap}, {pool=Tenured Gen,type=heap}, {pool=Eden Space,type=heap}, {pool=Survivor Space,type=heap}, {pool=Compressed Class Space,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
- `process.runtime.jvm.memory.committed`: {pool=CodeCache,type=non_heap}, {pool=Tenured Gen,type=heap}, {pool=Eden Space,type=heap}, {pool=Survivor Space,type=heap}, {pool=Compressed Class Space,type=non_heap}, {pool=Metaspace,type=non_heap}
|
||||
- `process.runtime.jvm.memory.limit`: {pool=CodeCache,type=non_heap}, {pool=Tenured Gen,type=heap}, {pool=Eden Space,type=heap}, {pool=Survivor Space,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
- `process.runtime.jvm.memory.usage_after_last_gc`: {pool=Tenured Gen,type=heap}, {pool=Eden Space,type=heap}, {pool=Survivor Space,type=heap}
|
||||
- `process.runtime.jvm.gc.duration`: {action=end of minor GC,gc=Copy}, {action=end of major GC,gc=MarkSweepCompact}
|
||||
- Shenandoah Garbage Collector
|
||||
- `process.runtime.jvm.memory.init`: {pool=Metaspace,type=non_heap}, {pool=CodeCache,type=non_heap}, {pool=Shenandoah,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
- `process.runtime.jvm.memory.usage`: {pool=Metaspace,type=non_heap}, {pool=CodeCache,type=non_heap}, {pool=Shenandoah,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
- `process.runtime.jvm.memory.committed`: {pool=Metaspace,type=non_heap}, {pool=CodeCache,type=non_heap}, {pool=Shenandoah,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
- `process.runtime.jvm.memory.limit`: {pool=CodeCache,type=non_heap}, {pool=Shenandoah,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
- `process.runtime.jvm.memory.usage_after_last_gc`: {pool=Shenandoah,type=heap}
|
||||
- `process.runtime.jvm.gc.duration`: {action=end of GC cycle,gc=Shenandoah Cycles}, {action=end of GC pause,gc=Shenandoah Pauses}
|
||||
- Z Garbage Collector
|
||||
- `process.runtime.jvm.memory.init`: {pool=Metaspace,type=non_heap}, {pool=CodeCache,type=non_heap}, {pool=ZHeap,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
- `process.runtime.jvm.memory.usage`: {pool=Metaspace,type=non_heap}, {pool=CodeCache,type=non_heap}, {pool=ZHeap,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
- `process.runtime.jvm.memory.committed`: {pool=Metaspace,type=non_heap}, {pool=CodeCache,type=non_heap}, {pool=ZHeap,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
- `process.runtime.jvm.memory.limit`: {pool=CodeCache,type=non_heap}, {pool=ZHeap,type=heap}, {pool=Compressed Class Space,type=non_heap}
|
||||
- `process.runtime.jvm.memory.usage_after_last_gc`: {pool=ZHeap,type=heap}
|
||||
- `process.runtime.jvm.gc.duration`: {action=end of GC cycle,gc=ZGC Cycles}, {action=end of GC pause,gc=ZGC Pauses}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the RxJava instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| ---------------------------------------------------------- | ------- | ------- | -------------------------------------------------------------------------------------- |
|
||||
| `otel.instrumentation.rxjava.experimental-span-attributes` | Boolean | `false` | Enable the capture of experimental span attributes for RxJava 2 and 3 instrumentation. |
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
## Settings
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| ---------------------------------------------------------------------- | ------- | ------- | --------------------------------------------------- |
|
||||
| `otel.instrumentation.servlet.experimental-span-attributes` | Boolean | `false` | Enable the capture of experimental span attributes. |
|
||||
| `otel.instrumentation.servlet.experimental.capture-request-parameters` | List | Empty | Request parameters to be captured (experimental). |
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
# OpenTelemetry Instrumentation: Spring and Spring Boot
|
||||
|
||||
<!-- ReadMe is in progress -->
|
||||
<!-- TO DO: Add sections for starter guide -->
|
||||
|
||||
|
|
@ -15,7 +16,7 @@ In this guide we will be using a running example. In section one and two, we wil
|
|||
## Settings
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| ----------------------------------------------------------------------------- | ------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `otel.instrumentation.spring-integration.global-channel-interceptor-patterns` | List | `*` | An array of Spring channel name patterns that will be intercepted. See [Spring Integration docs](https://docs.spring.io/spring-integration/reference/html/channel.html#global-channel-configuration-interceptors) for more details. |
|
||||
| `otel.instrumentation.spring-integration.producer.enabled` | Boolean | `false` | Create producer spans when messages are sent to an output channel. Enable when you're using a messaging library that doesn't have its own instrumentation for generating producer spans. Note that the detection of output channels only works for [Spring Cloud Stream](https://spring.io/projects/spring-cloud-stream) `DirectWithAttributesChannel`. |
|
||||
| `otel.instrumentation.spring-webflux.experimental-span-attributes` | Boolean | `false` | Enable the capture of experimental span attributes for Spring WebFlux version 5.0. |
|
||||
|
|
@ -333,7 +334,7 @@ public class TimeServiceController {
|
|||
|
||||
### Run MainService and TimeService
|
||||
|
||||
***To view your distributed traces ensure either LogExporter or Jaeger is configured in the OtelConfig.java file***
|
||||
**_To view your distributed traces ensure either LogExporter or Jaeger is configured in the OtelConfig.java file_**
|
||||
|
||||
To view traces on the Jaeger UI, deploy a Jaeger Exporter on localhost by running the command in terminal:
|
||||
|
||||
|
|
@ -345,7 +346,7 @@ After running Jaeger locally, navigate to the url below. Make sure to refresh th
|
|||
|
||||
Run MainService and TimeService from command line or using an IDE. The end point of interest for MainService is `http://localhost:8080/message` and `http://localhost:8081/time` for TimeService. Entering `localhost:8080/message` in a browser should call MainService and then TimeService, creating a trace.
|
||||
|
||||
***Note: The default port for the Apache Tomcat is 8080. On localhost both MainService and TimeService services will attempt to run on this port raising an error. To avoid this add `server.port=8081` to the resources/application.properties file. Ensure the port specified corresponds to port referenced by MainServiceController.TIME_SERVICE_URL.***
|
||||
**_Note: The default port for the Apache Tomcat is 8080. On localhost both MainService and TimeService services will attempt to run on this port raising an error. To avoid this add `server.port=8081` to the resources/application.properties file. Ensure the port specified corresponds to port referenced by MainServiceController.TIME_SERVICE_URL._**
|
||||
|
||||
Congrats, we just created a distributed service with OpenTelemetry!
|
||||
|
||||
|
|
|
|||
|
|
@ -399,7 +399,7 @@ If an exporter is present in the classpath during runtime and a spring bean of t
|
|||
##### Enabling/Disabling Features
|
||||
|
||||
| Feature | Property | Default Value | ConditionalOnClass |
|
||||
|------------------|------------------------------------------|---------------|------------------------|
|
||||
| ---------------- | ----------------------------------- | ------------- | ---------------------- |
|
||||
| spring-web | otel.springboot.httpclients.enabled | `true` | RestTemplate |
|
||||
| spring-webmvc | otel.springboot.httpclients.enabled | `true` | OncePerRequestFilter |
|
||||
| spring-webflux | otel.springboot.httpclients.enabled | `true` | WebClient |
|
||||
|
|
@ -414,7 +414,7 @@ If an exporter is present in the classpath during runtime and a spring bean of t
|
|||
##### Resource Properties
|
||||
|
||||
| Feature | Property | Default Value |
|
||||
|----------|--------------------------------------------------|------------------------|
|
||||
| -------- | ------------------------------------------------ | ---------------------- |
|
||||
| Resource | otel.springboot.resource.enabled | `true` |
|
||||
| | otel.springboot.resource.attributes.service.name | `unknown_service:java` |
|
||||
| | otel.springboot.resource.attributes | `empty map` |
|
||||
|
|
@ -434,7 +434,7 @@ otel.springboot.resource.attributes.xyz=foo
|
|||
##### Exporter Properties
|
||||
|
||||
| Feature | Property | Default Value |
|
||||
|-----------------|-------------------------------|--------------------------------------|
|
||||
| --------------- | ----------------------------- | ------------------------------------ |
|
||||
| Otlp Exporter | otel.exporter.otlp.endpoint | `localhost:4317` |
|
||||
| | otel.exporter.otlp.timeout | `1s` |
|
||||
| Jaeger Exporter | otel.exporter.jaeger.endpoint | `localhost:14250` |
|
||||
|
|
@ -444,7 +444,7 @@ otel.springboot.resource.attributes.xyz=foo
|
|||
##### Tracer Properties
|
||||
|
||||
| Feature | Property | Default Value |
|
||||
|---------|---------------------------------|---------------|
|
||||
| ------- | ------------------------------- | ------------- |
|
||||
| Tracer | otel.traces.sampler.probability | `1.0` |
|
||||
|
||||
### Starter Guide
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ OpenTelemetry Zipkin Exporter Starter is a starter package that includes the ope
|
|||
|
||||
Replace `OPENTELEMETRY_VERSION` with the latest stable [release](https://search.maven.org/search?q=g:io.opentelemetry).
|
||||
|
||||
* Minimum version: `1.1.0`
|
||||
- Minimum version: `1.1.0`
|
||||
|
||||
#### Maven
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the Spymemcached instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| ---------------------------------------------------------------- | ------- | ------- | ---------------------------------------------------- |
|
||||
| `otel.instrumentation.spymemcached.experimental-span-attributes` | Boolean | `false` | Enables the capture of experimental span attributes. |
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Settings for the Twilio instrumentation
|
||||
|
||||
| System property | Type | Default | Description |
|
||||
|---|---|---|---|
|
||||
| ---------------------------------------------------------- | ------- | ------- | ---------------------------------------------------- |
|
||||
| `otel.instrumentation.twilio.experimental-span-attributes` | Boolean | `false` | Enables the capture of experimental span attributes. |
|
||||
|
|
|
|||
Loading…
Reference in New Issue