-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Extending with custom manual instrumentation #5789
base: main
Are you sure you want to change the base?
Changes from 3 commits
486b50e
3b68951
dd8e8a6
ada45a4
ee0e758
0e70e8c
f406ecb
eafb9ec
5bc3d56
9491792
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,81 @@ | ||||||
--- | ||||||
title: Manual instrumentation | ||||||
zeitlinger marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
description: Extending a Java agent with custom manual instrumentation. | ||||||
weight: 21 | ||||||
--- | ||||||
|
||||||
## Introduction | ||||||
|
||||||
In addition to the out-of-the-box instrumentation, you can extend the Java agent | ||||||
with custom manual instrumentation. This allows you to create | ||||||
[spans](/docs/concepts/signals/traces/#spans) and | ||||||
[metrics](/docs/concepts/signals/metrics) for your own code without doing too | ||||||
many code changes. | ||||||
|
||||||
## Dependencies | ||||||
|
||||||
Add a dependency on the `opentelemetry-api` library. | ||||||
|
||||||
### Maven | ||||||
|
||||||
```xml | ||||||
<dependencies> | ||||||
<dependency> | ||||||
<groupId>io.opentelemetry</groupId> | ||||||
<artifactId>opentelemetry-api</artifactId> | ||||||
<version>{{% param vers.otel %}}</version> | ||||||
</dependency> | ||||||
</dependencies> | ||||||
``` | ||||||
|
||||||
### Gradle | ||||||
|
||||||
```groovy | ||||||
dependencies { | ||||||
implementation('io.opentelemetry:opentelemetry-api:{{% param vers.otel %}}') | ||||||
} | ||||||
``` | ||||||
|
||||||
## OpenTelemetry | ||||||
|
||||||
The Java agent is a special case where `GlobalOpenTelemetry` is set by the | ||||||
agent. Simply call `GlobalOpenTelemetry.get()` to access the `OpenTelemetry` | ||||||
instance. | ||||||
|
||||||
## Span | ||||||
|
||||||
{{% alert title="Note" color="info" %}} | ||||||
|
||||||
For the most common use cases, use the `@WithSpan` annotation instead of manual | ||||||
instrumentation. See [Annotations](../annotations) for more information. | ||||||
|
||||||
{{% /alert %}} | ||||||
|
||||||
```java | ||||||
import io.opentelemetry.api.GlobalOpenTelemetry; | ||||||
import io.opentelemetry.api.trace.Tracer; | ||||||
|
||||||
Tracer tracer = GlobalOpenTelemetry.getTracer("application"); | ||||||
``` | ||||||
|
||||||
Use the `Tracer` to create a span as explained in the | ||||||
[Span](/docs/languages/java/api/#span) section. | ||||||
|
||||||
A full example can be found [example repository]. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
||||||
## Meter | ||||||
|
||||||
```java | ||||||
import io.opentelemetry.api.GlobalOpenTelemetry; | ||||||
import io.opentelemetry.api.metrics.Meter; | ||||||
|
||||||
Meter meter = GlobalOpenTelemetry.getMeter("application"); | ||||||
``` | ||||||
|
||||||
Use the `Meter` to create a counter, gauge or histogram as explained in the | ||||||
[Meter](/docs/languages/java/api/#meter) section. | ||||||
|
||||||
A full example can be found [example repository]. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
||||||
[example repository]: | ||||||
https://github.com/open-telemetry/opentelemetry-java-examples/tree/main/javaagent |
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,73 @@ | ||||||
--- | ||||||
title: Manual instrumentation | ||||||
zeitlinger marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
description: | ||||||
Extending the Spring Boot starter with custom manual instrumentation. | ||||||
weight: 21 | ||||||
--- | ||||||
|
||||||
## Introduction | ||||||
|
||||||
In addition to the out-of-the-box instrumentation, you can extend the Spring | ||||||
starter with custom manual instrumentation. This allows you to create | ||||||
[spans](/docs/concepts/signals/traces/#spans) and | ||||||
[metrics](/docs/concepts/signals/metrics) for your own code without doing too | ||||||
many code changes. | ||||||
|
||||||
The required dependencies are already included in the Spring Boot starter. | ||||||
|
||||||
## OpenTelemetry | ||||||
|
||||||
The Spring Boot starter is a special case where `OpenTelemetry` is available as | ||||||
a Spring bean. Simply inject `OpenTelemetry` into your Spring components. | ||||||
|
||||||
## Span | ||||||
|
||||||
{{% alert title="Note" color="info" %}} | ||||||
|
||||||
For the most common use cases, use the `@WithSpan` annotation instead of manual | ||||||
instrumentation. See [Annotations](../annotations) for more information. | ||||||
|
||||||
{{% /alert %}} | ||||||
|
||||||
```java | ||||||
import io.opentelemetry.api.OpenTelemetry; | ||||||
import io.opentelemetry.api.trace.Tracer; | ||||||
|
||||||
@Controller | ||||||
public class MyController { | ||||||
private final Tracer tracer; | ||||||
|
||||||
public MyController(OpenTelemetry openTelemetry) { | ||||||
this.tracer = openTelemetry.getTracer("application"); | ||||||
} | ||||||
} | ||||||
``` | ||||||
|
||||||
Use the `Tracer` to create a span as explained in the | ||||||
[Span](/docs/languages/java/api/#span) section. | ||||||
|
||||||
A full example can be found [example repository]. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
||||||
## Meter | ||||||
|
||||||
```java | ||||||
import io.opentelemetry.api.OpenTelemetry; | ||||||
import io.opentelemetry.api.metrics.Meter; | ||||||
|
||||||
@Controller | ||||||
public class MyController { | ||||||
private final Meter meter; | ||||||
|
||||||
public MyController(OpenTelemetry openTelemetry) { | ||||||
this.meter = openTelemetry.getMeter("application"); | ||||||
} | ||||||
} | ||||||
``` | ||||||
|
||||||
Use the `Meter` to create a counter, gauge or histogram as explained in the | ||||||
[Meter](/docs/languages/java/api/#meter) section. | ||||||
|
||||||
A full example can be found [example repository]. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
||||||
[example repository]: | ||||||
https://github.com/open-telemetry/opentelemetry-java-examples/tree/main/spring-native |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure about the organization of the additions in this file
Maybe could just add two small notes right above here, something like "If you are using the Java agent, see X for information about how to obtain an OpenTelemetry instance" (and similar note for Spring Boot starter)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree - I think an alert could be good. Something like