Kora фреймворк для написания Java / Kotlin приложений с упором на производительность, эффективность, прозрачность сделанный разработчиками Т-Банк / Тинькофф

Kora is a framework for writing Java / Kotlin applications with a focus on performance, efficiency, transparency made by T-Bank / Tinkoff developers

Перейти к содержанию

Трассировка

Модуль для сбора трассировка приложения по стандарту OpenTelemetry и экспорта трассировки по gRPC/HTTP в формате OTLP.

gRPC

Модуль позволяет собирать трассировку с помощью gRPC протокола посредствам GrpcSender.

Зависимость build.gradle:

implementation "ru.tinkoff.kora:opentelemetry-tracing-exporter-grpc"

Модуль:

@KoraApp
public interface Application extends OpentelemetryGrpcExporterModule { }

Зависимость build.gradle.kts:

implementation("ru.tinkoff.kora:opentelemetry-tracing-exporter-grpc")

Модуль:

@KoraApp
interface Application : OpentelemetryGrpcExporterModule

HTTP

Модуль позволяет собирать трассировку с помощью HTTP протокола посредствам HttpSender.

Зависимость build.gradle:

implementation "ru.tinkoff.kora:opentelemetry-tracing-exporter-http"

Модуль:

@KoraApp
public interface Application extends OpentelemetryHttpExporterModule { }

Зависимость build.gradle.kts:

implementation("ru.tinkoff.kora:opentelemetry-tracing-exporter-http")

Модуль:

@KoraApp
interface Application : OpentelemetryHttpExporterModule

Конфигурация

Обязательным полем является только endpoint, аттрибуты из поля attributes будут отправляться с каждым спаном.

Пример полной конфигурации, описанной в классе OpentelemetryGrpcExporterConfig или OpentelemetryHttpExporterConfig, а также OpentelemetryResourceConfig (указаны примеры значений или значения по умолчанию):

tracing {
  exporter {
    endpoint = "http://localhost:4317" // (1)!
    exportTimeout = "2s" // (2)!
    scheduleDelay = "2s" // (3)!
    maxExportBatchSize = 512 // (4)!
    maxQueueSize = 1024 // (5)!
  }
  attributes { // (6)!
    "service.name" = "example-service"
    "service.namespace" = "kora"
  }
}
  1. URL от OpenTelemetry коллектор сервиса (обязательный)
  2. Максимальное время ожидания обработки телеметрии коллектором
  3. Время между экспортом телеметрии в коллектор
  4. Максимальная кол-во телеметрии в рамках одного экспорта
  5. Максимальный размер очереди неотправленной телеметрии
  6. Дополнительные атрибуты телеметрии
tracing:
  exporter:
    endpoint: http://localhost:4317 # (1)!
    exportTimeout: 2s # (2)!
    scheduleDelay: 2s # (3)!
    maxExportBatchSize: 512 # (4)!
    maxQueueSize: 1024 # (5)!
  attributes: # (6)!
    service.name: example-service
    service.namespace: kora
  1. URL от OpenTelemetry коллектор сервиса (обязательный)
  2. Максимальное время ожидания обработки телеметрии коллектором
  3. Время между экспортом телеметрии в коллектор
  4. Максимальная кол-во телеметрии в рамках одного экспорта
  5. Максимальный размер очереди неотправленной телеметрии
  6. Дополнительные атрибуты телеметрии

Параметры конфигурации сбора трассировки описываются в модулях в которых присутствует сбор трассировки, например HTTP сервер, HTTP клиент и т.д.

Императивная трассировка

Помимо автоматически создаваемых спанов вы можете пользоваться объектом Tracer из контейнера. Создать спан с текущим в parent можно следующим образом:

var context = Context.current();
var telemetryContext = OpentelemetryContext.get(context);
var newSpan = this.tracer.spanBuilder("some-span")
    .setParent(telemetryContext.getContext())
    .build();
val context = Context.current();
val telemetryContext = OpentelemetryContext.get(context);
val newSpan = this.tracer.spanBuilder("some-span")
    .setParent(telemetryContext.getContext())
    .build();