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

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

Метрики

Модуль для сбора метрик приложения с использованием Micrometer.

Требует подключения HTTP сервера для предоставления метрик в формате prometheus.

Подключение

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

implementation "ru.tinkoff.kora:micrometer-module"

Модуль:

@KoraApp
public interface Application extends MetricsModule { }

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

implementation("ru.tinkoff.kora:micrometer-module")

Модуль:

@KoraApp
interface Application : MetricsModule

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

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

httpServer {
    privateApiHttpMetricsPath = "/metrics" //(1)!
}
  1. Путь для получения метрик в формате prometheus (если подключен модуль HTTP сервера):
httpServer:
  privateApiHttpMetricsPath: "/metrics" #(1)!
  1. Путь для получения метрик в формате prometheus (если подключен модуль HTTP сервера):

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

metrics {
    opentelemetrySpec = "V120" //(1)!
}
  1. Формат метрик по стандарту OpenTelemetry (доступные значения: V120 / V123)
metrics:
  opentelemetrySpec: "V120" #(1)!
  1. Формат метрик по стандарту OpenTelemetry (доступные значения: V120 / V123)

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

Использование

Мы следуем и вам рекомендуем использовать нотацию, описанную в спецификации.

После подключения модуля Metrics.globalRegistry будет зарегистрирован PrometheusMeterRegistry, который будет использоваться во всех компонентах, собирающих метрики.

Персонализация

Для внесения изменений в конфигурацию PrometheusMeterRegistry нужно добавить в контейнер PrometheusMeterRegistryInitializer.

Важно, PrometheusMeterRegistryInitializer применяется только один раз при инициализации приложения.

Например, мы хотим добавить общий тег для всех метрик:

@Module
public interface MetricsConfigModule {
    default PrometheusMeterRegistryInitializer commonTagsInit() {
        return registry -> {
            registry.config().commonTags("tag", "value");
            return registry;
        };
    }
}
@Module
interface MetricsConfigModule {
    fun commonTagsInit(): PrometheusMeterRegistryInitializer? {
        return PrometheusMeterRegistryInitializer {
            it.config().commonTags("tag", "value")
            it
        }
    }
}

Так же стандартные метрики имеют некоторые конфигурации, такие как ServiceLayerObjectives для Distribution summary метрик. Имена полей конфигурации можно посмотреть в ru.tinkoff.kora.micrometer.module.MetricsConfig.

Стандарты

Изначальный формат метрик использовал стандарт OpenTelemetry V120, после Kora 1.1.0 появилась возможность предоставления метрик в стандарте OpenTelemetry V123, частичный список изменений можно посмотреть в документации OpenTelemetry и рекомендациях миграции OpenTelemetry