|
| 1 | +--- |
| 2 | +title: Annotations |
| 3 | +description: Utilisation des annotations d'instrumentation avec un agent Java. |
| 4 | +aliases: [/docs/instrumentation/java/annotations] |
| 5 | +weight: 20 |
| 6 | +default_lang_commit: 3d179dbe1270b83aafff0d3b6aa3311afd482649 |
| 7 | +cSpell:ignore: Flowable javac reactivestreams reactivex |
| 8 | +--- |
| 9 | + |
| 10 | +Pour la plupart des utilisateurs, l'instrumentation fournie par défaut est |
| 11 | +complètement suffisante et rien de plus n'a besoin d'être fait. Parfois, |
| 12 | +cependant, les utilisateurs souhaitent créer des |
| 13 | +[spans](/docs/concepts/signals/traces/#spans) pour leur propre code sans avoir à |
| 14 | +changer beaucoup de code. Les annotations `WithSpan` et `SpanAttribute` |
| 15 | +supportent ces cas d'usage. |
| 16 | + |
| 17 | +## Dépendances {#dependencies} |
| 18 | + |
| 19 | +Vous devrez ajouter une dépendance à `opentelemetry-instrumentation-annotations` |
| 20 | +pour utiliser l'annotation `@WithSpan`. |
| 21 | + |
| 22 | +{{< tabpane text=true >}} {{% tab "Maven" %}} |
| 23 | + |
| 24 | +```xml |
| 25 | +<dependencies> |
| 26 | + <dependency> |
| 27 | + <groupId>io.opentelemetry.instrumentation</groupId> |
| 28 | + <artifactId>opentelemetry-instrumentation-annotations</artifactId> |
| 29 | + <version>{{% param vers.instrumentation %}}</version> |
| 30 | + </dependency> |
| 31 | +</dependencies> |
| 32 | +``` |
| 33 | + |
| 34 | +{{% /tab %}} {{% tab "Gradle" %}} |
| 35 | + |
| 36 | +### Gradle {#gradle} |
| 37 | + |
| 38 | +```groovy |
| 39 | +dependencies { |
| 40 | + implementation('io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations:{{% param vers.instrumentation %}}') |
| 41 | +} |
| 42 | +``` |
| 43 | + |
| 44 | +{{% /tab %}} {{< /tabpane >}} |
| 45 | + |
| 46 | +## Créer des spans autour de méthodes avec `@WithSpan` {#creating-spans-around-methods-with-withspan} |
| 47 | + |
| 48 | +Pour créer un [span](/docs/concepts/signals/traces/#spans) qui instrumente une |
| 49 | +méthode particulière, annotez la méthode avec `@WithSpan`. |
| 50 | + |
| 51 | +```java |
| 52 | +import io.opentelemetry.instrumentation.annotations.WithSpan; |
| 53 | + |
| 54 | +public class MyClass { |
| 55 | + @WithSpan |
| 56 | + public void myMethod() { |
| 57 | + <...> |
| 58 | + } |
| 59 | +} |
| 60 | +``` |
| 61 | + |
| 62 | +Chaque fois que l'application invoque la méthode annotée, elle crée un span qui |
| 63 | +indique sa durée et fournit toutes les exceptions levées. Par défaut, le nom du |
| 64 | +span sera `<className>.<methodName>`, sauf si un nom est fourni via le paramètre |
| 65 | +d'annotation `value`. |
| 66 | + |
| 67 | +Si le type de retour de la méthode annotée par `@WithSpan` est l'un des types |
| 68 | +[future ou promise](http://en.wikipedia.org/wiki/Futures_and_promises) listés |
| 69 | +ci-dessous, alors le span ne sera pas terminé jusqu'à ce que le future se |
| 70 | +termine. |
| 71 | + |
| 72 | +- [java.util.concurrent.CompletableFuture](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html) |
| 73 | +- [java.util.concurrent.CompletionStage](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionStage.html) |
| 74 | +- [com.google.common.util.concurrent.ListenableFuture](http://guava.dev/releases/10.0/api/docs/com/google/common/util/concurrent/ListenableFuture.html) |
| 75 | +- [org.reactivestreams.Publisher](http://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/org/reactivestreams/Publisher.html) |
| 76 | +- [reactor.core.publisher.Mono](http://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html) |
| 77 | +- [reactor.core.publisher.Flux](http://projectreactor.io/docs/core/release/api/reactor/core/publisher/Flux.html) |
| 78 | +- [io.reactivex.Completable](http://reactivex.io/RxJava/2.x/javadoc/index.html?io/reactivex/Completable.html) |
| 79 | +- [io.reactivex.Maybe](http://reactivex.io/RxJava/2.x/javadoc/index.html?io/reactivex/Maybe.html) |
| 80 | +- [io.reactivex.Single](http://reactivex.io/RxJava/2.x/javadoc/index.html?io/reactivex/Single.html) |
| 81 | +- [io.reactivex.Observable](http://reactivex.io/RxJava/2.x/javadoc/index.html?io/reactivex/Observable.html) |
| 82 | +- [io.reactivex.Flowable](http://reactivex.io/RxJava/2.x/javadoc/index.html?io/reactivex/Flowable.html) |
| 83 | +- [io.reactivex.parallel.ParallelFlowable](http://reactivex.io/RxJava/2.x/javadoc/index.html?io/reactivex/parallel/ParallelFlowable.html) |
| 84 | + |
| 85 | +### Paramètres {#parameters} |
| 86 | + |
| 87 | +L'attribut `@WithSpan` supporte les paramètres optionnels suivants pour |
| 88 | +permettre la personnalisation des spans : |
| 89 | + |
| 90 | +| nom | type | défaut | description | |
| 91 | +| ---------------- | ----------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------- | |
| 92 | +| `value` | `String` | `""` | Le nom du span. Si non spécifié, le défaut `<className>.<methodName>` est utilisé. | |
| 93 | +| `kind` | `SpanKind` (enum) | `INTERNAL` | Le [type de span](/docs/specs/otel/trace/api/#spankind). | |
| 94 | +| `inheritContext` | `boolean` | `true` | Depuis 2.14.0. Contrôle si le nouveau span sera ou non parent dans le contexte existant (actuel). Si `false`, un nouveau contexte est créé. | |
| 95 | + |
| 96 | +Exemple d'utilisation des paramètres : |
| 97 | + |
| 98 | +```java |
| 99 | +@WithSpan(kind = SpanKind.CLIENT, inheritContext = false, value = "my span name") |
| 100 | +public void myMethod() { |
| 101 | + <...> |
| 102 | +} |
| 103 | + |
| 104 | +@WithSpan("my span name") |
| 105 | +public void myOtherMethod() { |
| 106 | + <...> |
| 107 | +} |
| 108 | +``` |
| 109 | + |
| 110 | +## Ajouter des attributs au span avec `@SpanAttribute` {#adding-attributes-to-the-span-with-spanattribute} |
| 111 | + |
| 112 | +Quand un [span](/docs/concepts/signals/traces/#spans) est créé pour une méthode |
| 113 | +annotée, les valeurs des arguments de l'invocation de méthode peuvent être |
| 114 | +automatiquement ajoutées comme |
| 115 | +[attributs](/docs/concepts/signals/traces/#attributes) au span créé. Annotez |
| 116 | +simplement les paramètres de méthode avec l'annotation `@SpanAttribute` : |
| 117 | + |
| 118 | +```java |
| 119 | +import io.opentelemetry.instrumentation.annotations.SpanAttribute; |
| 120 | +import io.opentelemetry.instrumentation.annotations.WithSpan; |
| 121 | + |
| 122 | +public class MyClass { |
| 123 | + |
| 124 | + @WithSpan |
| 125 | + public void myMethod(@SpanAttribute("parameter1") String parameter1, |
| 126 | + @SpanAttribute("parameter2") long parameter2) { |
| 127 | + <...> |
| 128 | + } |
| 129 | +} |
| 130 | +``` |
| 131 | + |
| 132 | +Sauf si spécifié comme argument de l'annotation, le nom de l'attribut sera |
| 133 | +dérivé des noms de paramètres formels s'ils sont compilés dans les fichiers |
| 134 | +`.class` en passant l'option `-parameters` au compilateur `javac`. |
| 135 | + |
| 136 | +## Supprimer l'instrumentation `@WithSpan` {#suppressing-withspan-instrumentation} |
| 137 | + |
| 138 | +Supprimer `@WithSpan` est utile si vous avez du code qui est sur-instrumenté en |
| 139 | +utilisant `@WithSpan` et que vous voulez en supprimer certains sans modifier le |
| 140 | +code. |
| 141 | + |
| 142 | +{{% config_option |
| 143 | + name="otel.instrumentation.opentelemetry-instrumentation-annotations.exclude-methods" %}} Supprimer |
| 144 | +l'instrumentation `@WithSpan` pour des méthodes spécifiques. Le format est |
| 145 | +`my.package.MyClass1[method1,method2];my.package.MyClass2[method3]`. |
| 146 | +{{% /config_option %}} |
| 147 | + |
| 148 | +## Créer des spans autour de méthodes avec `otel.instrumentation.methods.include` {#creating-spans-around-methods-with-otelinstrumentationmethodsinclude} |
| 149 | + |
| 150 | +Dans les cas où vous ne pouvez pas modifier le code, vous pouvez toujours |
| 151 | +configurer l'agent Java pour capturer des spans autour de méthodes spécifiques. |
| 152 | + |
| 153 | +{{% config_option name="otel.instrumentation.methods.include" %}} Ajouter |
| 154 | +l'instrumentation pour des méthodes spécifiques à la place de `@WithSpan`. Le |
| 155 | +format est `my.package.MyClass1[method1,method2];my.package.MyClass2[method3]`. |
| 156 | +{{% |
| 157 | +/config_option %}} |
| 158 | + |
| 159 | +Si une méthode est surchargée (apparaît plus d'une fois sur la même classe avec |
| 160 | +le même nom mais des paramètres différents), toutes les versions de la méthode |
| 161 | +seront instrumentées. |
| 162 | + |
| 163 | +## Prochaines étapes {#next-steps} |
| 164 | + |
| 165 | +Au-delà de l'utilisation d'annotations, l'API OpenTelemetry vous permet |
| 166 | +d'obtenir un traceur qui peut être utilisé pour |
| 167 | +[l'instrumentation personnalisée](../api). |
0 commit comments