Анотації

Використання анотацій інструментування з Java агентом.

Для більшості користувачів достатньо інструментування з коробки, і нічого більше робити не потрібно. Однак іноді користувачі бажають створювати відрізки для свого власного коду без значних змін у коді. Анотації WithSpan та SpanAttribute підтримують ці варіанти використання.

Залежності

Щоб використовувати анотацію @WithSpan, вам потрібно додати залежність від бібліотеки opentelemetry-instrumentation-annotations.

<dependencies>
  <dependency>
    <groupId>io.opentelemetry.instrumentation</groupId>
    <artifactId>opentelemetry-instrumentation-annotations</artifactId>
    <version>2.25.0</version>
  </dependency>
</dependencies>
dependencies {
    implementation('io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations:2.25.0')
}

Створення відрізків навколо методів з @WithSpan

Щоб створити відрізок, що інструментує певний метод, анотуйте метод за допомогою @WithSpan.

import io.opentelemetry.instrumentation.annotations.WithSpan;

public class MyClass {
  @WithSpan
  public void myMethod() {
      <...>
  }
}

Кожного разу, коли застосунок викликає анотований метод, створюється відрізок, який позначає його тривалість і надає будь-які помилки, що зʼявляються. Стандартно імʼя відрізка буде <className>.<methodName>, якщо імʼя не вказано як аргумент параметра value до анотації.

Якщо тип повернення методу, анотованого @WithSpan, є одним із типів, схожих на future або promise, зазначених нижче, то відрізок не буде завершено, доки future не завершиться.

Параметри

Атрибут @WithSpan підтримує наступні необовʼязкові параметри для налаштування відрізків:

назватиптипове значенняопис
valueString""Імʼя відрізка. Якщо не вказано, стандартно використовується <className>.<methodName>.
kindSpanKind (enum)INTERNALВид відрізка.
inheritContextbooleantrueПочинаючи з версії 2.14.0. Контролює, чи буде новий відрізок батьківським для наявного (поточного) контексту. Якщо false, створюється новий контекст.

Приклад використання параметрів:

@WithSpan(kind = SpanKind.CLIENT, inheritContext = false, value = "my span name")
public void myMethod() {
    <...>
}

@WithSpan("my span name")
public void myOtherMethod() {
    <...>
}

Додавання атрибутів до відрізка за допомогою @SpanAttribute

Коли створюється відрізок для анотованого методу, значення аргументів до виклику методу можуть автоматично додаватися як атрибути до створеного відрізка. Просто додайте до параметрів методу анотацію @SpanAttribute:

import io.opentelemetry.instrumentation.annotations.SpanAttribute;
import io.opentelemetry.instrumentation.annotations.WithSpan;

public class MyClass {

    @WithSpan
    public void myMethod(@SpanAttribute("parameter1") String parameter1,
        @SpanAttribute("parameter2") long parameter2) {
        <...>
    }
}

Якщо не вказано як аргумент до анотації, імʼя атрибута буде виведено з формальних імен параметрів, якщо вони скомпільовані у файли .class за допомогою параметра -parameters до компілятора javac.

Придушення інструментування @WithSpan

Придушення @WithSpan корисне, якщо у вас є код, який надмірно інструментований за допомогою @WithSpan, і ви хочете придушити деякі з них без зміни коду.

System property: otel.instrumentation.opentelemetry-instrumentation-annotations.exclude-methodsEnvironment variable: OTEL_INSTRUMENTATION_OPENTELEMETRY_INSTRUMENTATION_ANNOTATIONS_EXCLUDE_METHODS

Description: Придушити інструментування @WithSpan для конкретних методів. Формат: my.package.MyClass1[method1,method2];my.package.MyClass2[method3].

Створення відрізків навколо методів за допомогою otel.instrumentation.methods.include

У випадках, коли ви не можете змінити код, ви все ще можете налаштувати Java агент для захоплення відрізків навколо конкретних методів.

System property: otel.instrumentation.methods.includeEnvironment variable: OTEL_INSTRUMENTATION_METHODS_INCLUDE

Description: Додати інструментування для конкретних методів замість @WithSpan. Формат: my.package.MyClass1[method1,method2];my.package.MyClass2[method3].

Якщо метод перевантажений (зʼявляється більше одного разу в одному класі з однаковим імʼям, але з різними параметрами), всі версії методу будуть інструментовані.

Наступні кроки

Крім використання анотацій, API OpenTelemetry дозволяє отримати трасувальник, який можна використовувати для ручного інструментування.


Востаннє змінено December 26, 2024: [uk] Ukrainian documentation for OpenTelemetry (2a3c5648)