Модуль для сбора метрик приложения с использованием Micrometer.
Требует подключения служебного HTTP сервера для предоставления метрик в формате prometheus.
===! ":fontawesome-brands-java: Java"
[Зависимость](general.md#_4) `build.gradle`:
```groovy
implementation "ru.tinkoff.kora:micrometer-module"
```
Модуль:
```java
@KoraApp
public interface Application extends MetricsModule { }
```
=== ":simple-kotlin: Kotlin"
[Зависимость](general.md#_4) `build.gradle.kts`:
```groovy
implementation("ru.tinkoff.kora:micrometer-module")
```
Модуль:
```kotlin
@KoraApp
interface Application : MetricsModule
```
Пример конфигурации пути HTTP сервера для получения метрик, описанной в классе HttpServerConfig (указаны значения по умолчанию):
===! ":material-code-json: Hocon"
```javascript
httpServer {
privateApiHttpMetricsPath = "/metrics" //(1)!
}
```
1. Путь для получения метрик в формате `prometheus` (если подключен модуль [HTTP сервера](http-server.md)):
=== ":simple-yaml: YAML"
```yaml
httpServer:
privateApiHttpMetricsPath: "/metrics" #(1)!
```
1. Путь для получения метрик в формате `prometheus` (если подключен модуль [HTTP сервера](http-server.md)):
Пример полной конфигурации, описанной в классе MetricsConfig (указаны значения по умолчанию):
===! ":material-code-json: Hocon"
```javascript
metrics {
opentelemetrySpec = "V120" //(1)!
}
```
1. Формат метрик по стандарту OpenTelemetry (доступные значения: [V120](https://opentelemetry.io/docs/specs/semconv/http/migration-guide/#migrating-from-a-version-prior-to-v1200) / [V123](https://opentelemetry.io/docs/specs/semconv/http/migration-guide/))
=== ":simple-yaml: YAML"
```yaml
metrics:
opentelemetrySpec: "V120" #(1)!
```
1. Формат метрик по стандарту OpenTelemetry (доступные значения: [V120](https://opentelemetry.io/docs/specs/semconv/http/migration-guide/#migrating-from-a-version-prior-to-v1200) / [V123](https://opentelemetry.io/docs/specs/semconv/http/migration-guide/))
Параметры конфигурации сбора метрик описываются в модулях в которых присутствует сбор метрик, например HTTP сервер, HTTP клиент и т.д.
Мы следуем и вам советуем использовать нотацию, описанную в спецификации.
После подключения модуля Metrics.globalRegistry будет зарегистрирован PrometheusMeterRegistry, который будет использоваться во всех компонентах, собирающих метрики.
Для внесения изменений в конфигурацию PrometheusMeterRegistry нужно добавить в контейнер PrometheusMeterRegistryInitializer.
Важно, PrometheusMeterRegistryInitializer применяется только один раз при инициализации приложения.
Например, мы хотим добавить общий тег для всех метрик:
===! ":fontawesome-brands-java: Java"
```java
@Module
public interface MetricsConfigModule {
default PrometheusMeterRegistryInitializer commonTagsInit() {
return registry -> {
registry.config().commonTags("tag", "value");
return registry;
};
}
}
```
=== ":simple-kotlin: Kotlin"
```kotlin
@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 — текущее значение метрики
| Метрика | 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 сервер.
| Метрика | 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 |
Подробнее о модуле в документации Базы данных.
| Метрика | 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.
| Метрика | 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 сервер.
| Метрика | 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 клиент.
| Метрика | 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 | Текущий размер кэша |
Подробнее о модуле в документации Кэш.
| Метрика | 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 |
Подробнее о модуле в документации Отказоустойчивость.
| Метрика | Prometheus | Тип | Описание | Теги |
|---|---|---|---|---|
messaging.receive.duration |
messaging_receive_duration_milliseconds / _count / _sum / _bucket / _max |
DistributionSummary | Длительность получения JMS-сообщения | messaging.system, messaging.destination.name, error.type |
| Метрика | 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 клиент.
| Метрика | 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.
| Метрика | 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.
| Метрика | 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-метрики собираются автоматически через 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 | Время работы процесса | — |