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

Kora is a cloud-oriented server-side Java framework for writing Java / Kotlin applications with a focus on performance, efficiency and transparency

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

Метрики

Модуль для сбора метрик приложения с использованием 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

Справочник метрик

Все метрики Kora используют OpenTelemetry semantic conventions для именования и тегов.

Используемые типы метрик Micrometer:

  • DistributionSummary — применяется как инструмент для сбора распределения произвольных величин. Тип метрики позволяет эффективно визуализировать данные по бакетам и рассчитывать персентиль.
  • Counter — монотонно возрастающий счётчик
  • Gauge — текущее значение метрики

HTTP сервер

Метрика Prometheus Тип Описание Теги
http.server.request.duration http_server_request_duration_milliseconds / _count / _sum / _bucket / _max DistributionSummary Длительность обработки HTTP-запроса на сервере http.request.method, http.response.status_code, http.route, url.scheme, server.address, error.type
http.server.active_requests http_server_active_requests Gauge Количество активных HTTP-запросов http.request.method, http.route, server.address, url.scheme

Подробнее о модуле в документации HTTP сервер.

HTTP клиент

Метрика Prometheus Тип Описание Теги
http.client.request.duration http_client_request_duration_milliseconds / _count / _sum / _bucket / _max DistributionSummary Длительность HTTP-запроса клиента http.request.method, http.response.status_code, server.address, url.scheme, http.route, error.type

Подробнее о модуле в документации HTTP клиент.

База данных

Метрика Prometheus Тип Описание Теги
db.client.request.duration db_client_request_duration_milliseconds / _count / _sum / _bucket / _max DistributionSummary Длительность операции/запроса к БД db.pool.name, db.statement, db.operation, error.type

Подробнее о модуле в документации Базы данных.

Kafka

Метрика Prometheus Тип Описание Теги
messaging.receive.duration messaging_receive_duration_milliseconds / _count / _sum / _bucket / _max DistributionSummary Длительность обработки одного сообщения messaging.system, messaging.destination, messaging.operation, error.type
messaging.publish.duration messaging_publish_duration_milliseconds / _count / _sum / _bucket / _max DistributionSummary Длительность отправки сообщения messaging.system, messaging.destination, messaging.partition_id, error.type
messaging.process.batch.duration messaging_process_batch_duration_milliseconds / _count / _sum / _bucket / _max DistributionSummary Длительность обработки батча сообщений messaging.system, messaging.destination, error.type
messaging.kafka.consumer.lag messaging_kafka_consumer_lag Gauge Лаг консьюмера по партициям messaging.system, messaging.destination, messaging.partition_id, messaging.consumer_group

Подробнее о модуле в документации Kafka.

gRPC сервер

Метрика Prometheus Тип Описание Теги
rpc.server.duration rpc_server_duration_milliseconds / _count / _sum / _bucket / _max DistributionSummary Длительность обработки gRPC-вызова на сервере rpc.service, rpc.method, rpc.status, error.type
rpc.server.requests_per_rpc rpc_server_requests_per_rpc_total Counter Количество запросов, полученных за один RPC rpc.service, rpc.method
rpc.server.responses_per_rpc rpc_server_responses_per_rpc_total Counter Количество ответов, отправленных за один RPC rpc.service, rpc.method

Подробнее о модуле в документации gRPC сервер.

gRPC клиент

Метрика Prometheus Тип Описание Теги
rpc.client.duration rpc_client_duration_milliseconds / _count / _sum / _bucket / _max DistributionSummary Длительность gRPC-вызова клиента rpc.service, rpc.method, rpc.status, error.type, server.address
rpc.client.requests_per_rpc rpc_client_requests_per_rpc_total Counter Количество запросов, отправленных за один RPC rpc.service, rpc.method, server.address
rpc.client.responses_per_rpc rpc_client_responses_per_rpc_total Counter Количество ответов, полученных за один RPC rpc.service, rpc.method, server.address

Подробнее о модуле в документации gRPC клиент.

SOAP клиент

Метрика Prometheus Тип Описание Теги
rpc.client.duration rpc_client_duration_milliseconds / _count / _sum / _bucket / _max DistributionSummary Длительность SOAP-вызова клиента rpc.system, rpc.service, rpc.method, rpc.result, server.address, server.port

Подробнее о модуле в документации SOAP клиент.

Планировщик

Метрика Prometheus Тип Описание Теги
scheduling.job.duration scheduling_job_duration_milliseconds / _count / _sum / _bucket / _max DistributionSummary Длительность выполнения запланированной задачи code.class, code.function, error.type

Подробнее о модуле в документации Планировщик.

Кэш

Метрика Prometheus Тип Описание Теги
cache.duration cache_duration_milliseconds / _count / _sum / _bucket / _max DistributionSummary Длительность операции кэша (GET, SET, DELETE и т.д.) cache, operation, origin, status
cache.ratio cache_ratio_total Counter Счётчик попаданий/промахов кэша cache, origin, type

При использовании Caffeine автоматически регистрируются стандартные метрики Micrometer:

Метрика Prometheus Тип Описание
cache.gets cache_gets_total Counter Количество запросов к кэшу
cache.puts cache_puts_total Counter Количество записей в кэш
cache.evictions cache_evictions_total Counter Количество вытеснений из кэша
cache.size cache_size Gauge Текущий размер кэша

Подробнее о модуле в документации Кэш.

Redis / Lettuce

Метрика Prometheus Тип Описание Теги
lettuce.command.completion.duration lettuce_command_completion_duration_milliseconds / _count / _sum / _bucket / _max DistributionSummary Длительность выполнения Redis-команды type, remote, local, command, error.type
lettuce.command.firstresponse.duration lettuce_command_firstresponse_duration_milliseconds / _count / _sum / _bucket / _max DistributionSummary Время до первого ответа Redis-команды type, remote, local, command, error.type

Отказоустойчивость

Метрика Prometheus Тип Описание Теги
resilient.circuitbreaker.state resilient_circuitbreaker_state Gauge Состояние circuit breaker (0=CLOSED, 1=HALF_OPEN, 2=OPEN) name
resilient.circuitbreaker.transition resilient_circuitbreaker_transition_total Counter Переходы состояния circuit breaker name, state
resilient.circuitbreaker.call.acquire resilient_circuitbreaker_call_acquire_total Counter Попытки/отказы вызова через circuit breaker name, state, status
resilient.retry.attempts resilient_retry_attempts_total Counter Количество попыток ретрая name
resilient.retry.exhausted resilient_retry_exhausted_total Counter Количество исчерпанных ретраев name
resilient.timeout.exhausted resilient_timeout_exhausted_total Counter Количество таймаутов name
resilient.fallback.attempts resilient_fallback_attempts_total Counter Количество вызовов фолбэка name, type

Подробнее о модуле в документации Отказоустойчивость.

JMS

Метрика Prometheus Тип Описание Теги
messaging.receive.duration messaging_receive_duration_milliseconds / _count / _sum / _bucket / _max DistributionSummary Длительность получения JMS-сообщения messaging.system, messaging.destination.name, error.type

S3 клиент

Метрика Prometheus Тип Описание Теги
s3.client.duration s3_client_duration_milliseconds / _count / _sum / _bucket / _max DistributionSummary Длительность S3 HTTP-запроса aws.s3.bucket, aws.operation.name, error.type
s3.kora.client.duration s3_kora_client_duration_milliseconds / _count / _sum / _bucket / _max DistributionSummary Длительность операции Kora S3-клиента aws.client.name, aws.s3.bucket, aws.operation.name, error.type

Подробнее о модуле в документации S3 клиент.

Camunda 7 BPMN

Метрика Prometheus Тип Описание Теги
camunda.engine.delegate.duration camunda_engine_delegate_duration_milliseconds / _count / _sum / _bucket / _max DistributionSummary Длительность выполнения Camunda BPMN Java delegate delegate, business.key, error.type
camunda.engine.delegate.active_requests camunda_engine_delegate_active_requests Gauge Количество активных executions делегата delegate, business.key

Подробнее о модуле в документации Camunda 7 BPMN.

Camunda REST

Метрика Prometheus Тип Описание Теги
camunda.rest.server.request.duration camunda_rest_server_request_duration_milliseconds / _count / _sum / _bucket / _max DistributionSummary Длительность Camunda REST-запроса http.request.method, http.response.status_code, http.route, url.scheme, server.address, error.type
camunda.rest.server.active_requests camunda_rest_server_active_requests Gauge Количество активных Camunda REST-запросов http.route, http.request.method, server.address, url.scheme

Подробнее о модуле в документации Camunda 7 REST.

Camunda 8 Worker

Метрика Prometheus Тип Описание Теги
zeebe.worker.handler.duration zeebe_worker_handler_duration_milliseconds / _count / _sum / _bucket / _max DistributionSummary Длительность обработки задачи Zeebe worker job.name, job.type, status, error, error.code
zeebe.worker.handler zeebe_worker_handler_total Counter Счётчик ошибок Zeebe worker job.name, job.type, status, error.code
zeebe.client.worker.job zeebe_client_worker_job_total Counter Количество активированных/обработанных задач Zeebe action, type

Подробнее о модуле в документации Camunda 8 Worker.

Система

Метрика Prometheus Тип Описание Теги
kora.up kora_up Gauge Индикатор статуса фреймворка (значение = 1) version

JVM

Стандартные JVM-метрики собираются автоматически через Micrometer:

Метрика Prometheus Тип Описание Теги
jvm.gc.pause jvm_gc_pause_milliseconds / _count / _sum / _max DistributionSummary Длительность пауз сборщика мусора action, cause
jvm.gc.memory.allocated jvm_gc_memory_allocated_bytes_total Counter Объём выделенной памяти
jvm.gc.memory.promoted jvm_gc_memory_promoted_bytes_total Counter Объём памяти, перемещённой в old gen
jvm.gc.max.data.size jvm_gc_max_data_size_bytes Gauge Максимальный размер old gen
jvm.gc.live.data.size jvm_gc_live_data_size_bytes Gauge Размер old gen после полной сборки мусора
jvm.memory.used jvm_memory_used_bytes Gauge Использованная память area, id
jvm.memory.committed jvm_memory_committed_bytes Gauge Выделенная JVM память area, id
jvm.memory.max jvm_memory_max_bytes Gauge Максимально доступная память area, id
jvm.threads.live jvm_threads_live_threads Gauge Количество активных потоков
jvm.threads.daemon jvm_threads_daemon_threads Gauge Количество daemon-потоков
jvm.threads.peak jvm_threads_peak_threads Gauge Пиковое количество потоков
jvm.threads.states jvm_threads_states_threads Gauge Количество потоков по состояниям state
process.cpu.usage process_cpu_usage Gauge Использование CPU процессом
system.cpu.usage system_cpu_usage Gauge Использование CPU системой
system.cpu.count system_cpu_count Gauge Количество доступных процессоров
logback.events logback_events_total Counter Количество событий логирования level
jvm.classes.loaded jvm_classes_loaded_classes Gauge Количество загруженных классов
jvm.classes.unloaded jvm_classes_unloaded_classes_total Counter Количество выгруженных классов
process.files.open process_files_open_files Gauge Количество открытых файловых дескрипторов
process.files.max process_files_max_files Gauge Максимальное количество файловых дескрипторов
process.uptime process_uptime_milliseconds Gauge Время работы процесса